記事概要
Pythonでtensorflowを実行するのに、サンプルによってバージョンを切り替える必要が出てきたのと、複数の環境で実行しようと思ったときに毎回必要ライブラリを一つずつインストールするのがかなり面倒だと感じた。
nodeJSのnpmみたいに個別にライブラリの管理ができるようにしたいと考え調べてみたらところ、venvを使えば実現できそうだったのでメモ。
仮想環境の作成
プロジェクト個別にモジュールを管理するにはvenvと呼ばれる仮想環境を作成する必要がある。仮想環境を作成するフォルダに移動し、以下のコマンドを入力することで環境を作ることができる。
# コマンドフォーマット
python -m venv [仮想環境名]
# コマンド例
python -m venv tutorial-env
実行時エラーが出た時の対処方法
上記コマンドを実行したところ、以下のようなエラーが出てしまいました。
$ python -m venv tutorial-env
Error: [Errno 2] No such file or directory: 'C:\\Program Files\\Python37\\lib\\venv\\scripts\\nt\\python_d.exe'
原因を調べたところ、以下のコピー元ディレクトリからコピー先ディレクトリに、対象ファイルをコピーすることで問題を解決することができた。
(この問題はすべての環境で発生するのかどうかは不明。まずはそのままコマンド実行し、エラーが出たら対応してください。)
C:\Program Files\Python37
C:\Program Files\Python37\Lib\venv\scripts\nt`
コピー対象ファイル
- python_d.exe
- python_d.pdb
- pythonw_d.exe
- pythonw_d.pdb
仮想環境の起動
以下のコマンドを実行することで仮想環境を起動することができます。これを実行した後にpipコマンドを実行すると仮想環境にライブラリが追加され、pythonコマンドを実行すると、仮想環境に登録されているライブラリのみが利用されます。
tutorial-env\Scripts\activate.bat
source tutorial-env/bin/activate
実行が成功すると、以下のようにコマンドラインの先頭に(環境名)が追加される。
確認方法
コマンドライン上に仮想環境名が以下のように表示されている状態でpip install numpy
を実行してみる。
(tutorial-env) D:\git-repo\venvtest>
コマンド完了後、tutorial-envの配下にnumpyフォルダが作成されていればOK。
現在インストールされているパッケージの確認
以下のコマンドで、現在の環境にインストールされているライブラリの一覧を確認できる。
pip list
Package Version
----------------- -------
astroid 2.2.5
colorama 0.4.1
isort 4.3.18
lazy-object-proxy 1.3.1
mccabe 0.6.1
pip 19.1.1
pylint 2.3.1
setuptools 40.8.0
typed-ast 1.3.5
wrapt 1.11.1
インストールされているパッケージ一覧を出力する
以下のコマンドで現在の環境にインストールされているライブラリの情報をテキストファイルをに出力できる。複数人で開発をする時や自分の作ったプログラムを外部公開する時などに便利。
pip freeze > reqiurements.txt
出力したパッケージ一覧にあるパッケージを一括インストールする
依存ライブラリを一括インストールするときは、以下の様にfreezeコマンドで出力したファイルを-rの後に記述する。
pip install -r requirements.txt
(tutorial-env) D:\git-repo\venvtest>pip install -r requirement.txt
Collecting joblib==0.13.2 (from -r requirement.txt (line 1))
Using cached
--省略--
repo\venvtest\tutorial-env\lib\site-packages (from astroid<3,>=2.2.0->pylint==2.3.1->-r requirement.txt (line 5)) (1.4.0)
Installing collected packages: joblib, numpy, scipy, scikit-learn, pylint
Successfully installed joblib-0.13.2 numpy-1.16.3 pylint-2.3.1 scikit-learn-0.21.0 scipy-1.2.1