【Python】pipenvを使ったパッケージ管理
共同開発でPythonを使ったのですが、その時にnpmに似たようなパッケージ管理ツールを探していて
pipenvを使ってみて便利で驚いたのでメモを残しておきます。
特徴は簡単にいうと、venv(virtualenv)とpipが合体してより便利になったという感じです。
個人を使った開発でも便利なpipenvですが、このパッケージが特に活躍するのは複数人で開発する時だと思っています。
今回はそのpipenvについてまとめていきます。
pipenvのインストール
code:tarminal
$pip install pipenv
pipenvのインストール自体はpipからできます。
pipenvの使い方
ヘルプを見ることでも何と無く分かりますが、簡単に紹介していきます。
使った環境は次の通りです。
table:環境一覧
ubuntu-xenial
Python 3.6
pipenv 2018.11.14
パッケージ管理環境の作成方法
これには3通りあります。
「新規のプロジェクトの初期化」と「パッケージのインストール」と「pipfile,pipfile.lockから環境の再現」です。
個人的によく使うのは、2.3番目のやつです。
プロジェクトの初期化
これは「対象環境のPythonのバージョンを指定したい時」に使います。
code:tarminal
ただしpyenvを使用してない場合は、元の環境に入ってないバージョンを指定しても自動でインストールしてくれないので
もしこれを使いたい場合は先にpyenvをインストールするのをおすすめします。
パッケージのインストール
こちらはパッケージをインストールすると自動的に現環境のPythonのバージョンの環境も作られるというものです。
そしてパッケージをインストールすると、PipfileとPipfile.lockにパッケージ情報が記載されていきます。
そのPipfileを軸にpipenvは使われるので、環境を作るときはプロジェクトの直下などでインストールを実行しましょう。
code:tarminal
開発用パッケージのインストール
インストールする際に開発環境のみで使うパッケージを入れたい場合、--devオプションをつけるとPipfileに(dev-package)という枠で記録してくれるので、あとで本番環境に切り替えるとき、その部分の記述を削除して作り直すだけで本番環境を再現できるので便利です。
code:tarminal
$pipenv install --dev autopep8 flake8
code:Pipfile
autopep8 = "*"
flake8 = "*"
requirements.txtからのインストール
またpipに慣れている人はそのままの使い勝手で使えるようにpipで使っていた機能も使えます。
code:tarminal
$pipenv install -r ./requirements.txt
Pipfile、Pipfile.lockから環境の再現
複数人開発で環境を作る前にすでに誰かが一回環境を作って上記どっちかのPipfileファイルがあれば、
それを使って自分の環境でも再現できます。
これが特に複数人開発でおすすめする理由です。
Pipfileだけが残っている場合
code:tarminal
$pipenv install
この時にインストールされた内容でPipfile.lockが更新されます。
Pipfile.lockだけが残っている場合
Pipfileでなくこっちを使うと、詳細なバージョンなども合わせて環境が再現できます。
code:tarminal
$pipenv sync
スクリプトの登録
またdockerのymlファイルやnpmのように独自のスクリプトに名前をつけて登録することもできます。
ここにサーバーを構築する時のコマンドや、テストのコマンドなどを登録しておけば詳しいドキュメントをチームで共有する手間も省けるし使いやすいです。
code:Pipfife
start = "python manage.py runserver 192.168.33.10:8080"
test = "python -m unittest discover -v"
format = "autopep8 -ivr ."
lint = "flake8 --show-source ."
スクリプトの実行
code:tarminal
$pipenv run start #scriptsのstartを実行 またscriptsに登録するほどでもないPyhtonのコードを個別に実行するときは、次のように呼び出せます。
これとかはほんとにdockerに似ていますよね...。笑
code:tarminal
このように複数人開発やGitHubでコードを共有した時に簡単に環境やアプリ起動方法などを共有できるのが個人的にいいなと思いました。実際に共同開発でも使用してみたのですが、慣れればなかなか便利なツールだなと思いました。
仮想環境関連の操作一覧
次はpipenvでの仮想環境関連の操作について書いていきます。
仮想環境に入る時のコマンド
code:tarminal
よく使う操作はscriptsに登録しておくのでいいとは思いますが、ちょっとした操作を行う時にはこちらも知っておくと便利です。
仮想環境のパスを調べる
code:tarminal
$pipenv --venv
デフォルトではWindowsは%userprofile%\.virtualenvs、
Linuxは$HOME/.local/share/virtualenvs配下に仮想環境が生成されます。
仮想環境を生成する場所の指定
デフォルトで仮想環境が作成されてしまうのが嫌な人はこちらのコマンドで仮想環境を生成する場所を指定できます。
code:tarminal
プロジェクトのディレクトリに仮想環境を作成
code:tarminal
$pipenv --python 3
また失敗した人は下記のコマンドでいけた場合もあるみたいなので上記で無理なら試してみてください。
code:tarminal
$export PIPENV_VENV_IN_PROJECT=1
仮想環境の削除
code:tarminal
$pipenv --rm
パッケージ管理操作について
最初に紹介していたパッケージのインストール等のコマンドですが、さらに細かいこともできるのでここで紹介していきます。
バージョン指定してパッケージのインストール
code:tarminal
$pipenv install numpy==1.14
GitHubのリポジトリを指定してインストール
code:tarminal
インストールされているパッケージのバージョンアップ
code:tarminal
$pipenv update
インストールされているパッケージ一覧を確認
code:tarminal
$pipenv graph
・・・
・・・
autopep8==1.4.3
flake8==3.6.0
numpy==1.15.4
一覧に関しては、上記のように依存関係もわかるようになっています。
環境変数の自動読み込み
プロジェクトに.envファイルを用意しておくと、pipenv runやpipenv shellを実行する時に自動で読み込んでくれます。
ハードコーディングするにはまずい内容やローカルのテスト環境ならではの設定を登録しておくと便利です。
code:.env
DEBUG=1
code:tarminal
$pipenv run python
'1'