python3のvenvでプロジェクト毎にライブラリを管理する
venvでできること・できないこと
できる
プロジェクト毎にモジュールとそのバージョンを管理する
できない
プロジェクト毎にpython自体のバージョンを管理する
venvの使い方
venvによる仮想環境の作成
sample_project/venvに仮想環境を作成する例
$ mkdir sample_project $ cd sample_project $ python3 -m venv venv
venvの有効化
$ source venv/bin/activate # 有効になると([仮想環境のディレクトリ名])が先頭に表示される (venv) $
有効化したあとは通常通りpythonを使用できる。
venvの無効化
(venv) $ deactivate $
.gitignoreの内容
venvを使用する場合、.gitignoreに以下の内容を指定する。
gitignore/VirtualEnv.gitignore at master · github/gitignore · GitHubgithub.com
- 基本的にはpython3 -m venvにより生成されるファイルを指定する。
- "[Bb]in"とかになっているのはOSによって再生されるフォルダの大文字/小文字が異なるためらしい。
ライブラリの管理
venvというよりかはpipの使い方になるが記載しておく。
pushする前
requirements.txt にライブラリの情報を出力する。 必ずvenvを有効にした状態で実行すること。
(venv) $ pip freeze > requirements.txt
requirements.txtのサンプル
colorama==0.4.1 selenium==3.141.0 urllib3==1.24.1
pullした後
venvの仮想環境がない場合は作成、有効化した後に実行する。
(venv) $ pip install -r requirements.txt
venvをなぜ使うのか
自分は以下の理由からだと考えている。
- プロジェクトで使用するライブラリとバージョンを明確にする
- プロジェクトが自分のマシン以外でも動作できるようにする
通常、pipでインストールしたライブラリは個々のプロジェクトに限定されない。同じマシン内であればどのプロジェクトからも利用できる。
しかし、その反対にプロジェクト毎に必要なライブラリがどれかわからなくなりがちである。結果、他のマシンで実行しようとした際に必要なライブラリのインストールが漏れて動かない。もしくは、本来必要ないライブラリをインストールしてしまうといったことが起きる。
更に、同一マシン上に複数プロジェクトがあり、同一異バージョンのライブラリを使用する場合もvenv等の仮想環境を使用しないと難しい。
環境
この記事は以下の環境で実施した内容をもとに記載しています。