【Python】venvを使って仮想Python環境を作る
Pythonを使って遊ぶ場合、今まではpipでライブラリを直接ローカル上にインストールしていたが、venvで仮想環境を作ってみたところ結構よかった。
venvとは
Pythonに関する仮想環境を作成できる。
これの目的としては環境の分離。PythonのバージョンとかPyPIのバージョンとかによる依存関係を解消できる。(プロジェクトAだとバージョン1.0しか使えないけど、プロジェクトBだと2.0しか使えないみたいな)
そこで今のMacのpipをみてみると、これらのライブラリがグローバルにインポートされてしまっている。
~ $ pip freeze astroid==2.2.5 beautifulsoup4==4.8.0 bottle==0.12.17 bs4==0.0.1 certifi==2019.6.16 chardet==3.0.4 entrypoints==0.3 flake8==3.7.8 idna==2.8 isort==4.3.21 lazy-object-proxy==1.4.1 mccabe==0.6.1 pep8==1.7.1 pycodestyle==2.5.0 pyflakes==2.1.1 pylint==2.3.1 requests==2.22.0 six==1.12.0 soupsieve==1.9.2 typed-ast==1.4.0 urllib3==1.25.3 wrapt==1.11.2
これをvenvを使ってプロジェクトごとに分離することができる。
使い方
Python3.3以降だったら標準ライブラリでインストールされている。
これでディレクトリが作られ、その中に各種モジュールなどが配置される。
~ $ python3 -m venv test_pj ~ $ ls test_pj/ bin include lib pyvenv.cfg ~ $ ll test_pj/bin/ total 64 -rw-r--r-- 1 user staff 2202 8 3 16:37 activate -rw-r--r-- 1 user staff 1258 8 3 16:37 activate.csh -rw-r--r-- 1 user staff 2410 8 3 16:37 activate.fish -rwxr-xr-x 1 user staff 249 8 3 16:37 easy_install -rwxr-xr-x 1 user staff 249 8 3 16:37 easy_install-3.7 -rwxr-xr-x 1 user staff 231 8 3 16:37 pip -rwxr-xr-x 1 user staff 231 8 3 16:37 pip3 -rwxr-xr-x 1 user staff 231 8 3 16:37 pip3.7 lrwxr-xr-x 1 user staff 7 8 3 16:37 python -> python3 lrwxr-xr-x 1 user staff 22 8 3 16:37 python3 -> /usr/local/bin/python3
次に現在のシェルのセッション内でこの環境を有効化する。activateスクリプトを実行すればOK。
~ $ . test_pj/bin/activate (test_pj) ~ $ which python /Users/user/test_pj/bin/python
有効化され、シェルの先頭に環境名が表示された。pythonのパスも作成した仮想環境になっている。
この状態でpip freeze
を確認すると何もインストールされていないことがわかる。
(test_pj) ~ $ pip freeze (test_pj) ~ $
ここで、グローバルと分離できているか確認してみる。
まず仮想環境にnumpyをインストール。
(test_pj) ~ $ pip install numpy Collecting numpy Downloading https://files.pythonhosted.org/packages/c1/4b/78119133136c20e5ad2e01bf72b0633241defd619939908223cd394a9c32/numpy-1.17.0-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (15.0MB) 100% |████████████████████████████████| 15.0MB 1.7MB/s Installing collected packages: numpy Successfully installed numpy-1.17.0 You are using pip version 19.0.3, however version 19.2.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. (test_pj) ~ $ pip freeze numpy==1.17.0
次にグローバルでnumpy
がインストールされていないこと確認。
仮想環境を終了するにはdeactivate
コマンドを実行する。
(test_pj) ~ $ deactivate ~ $ pip freeze | grep numpy ~ $
インストールされていないのでちゃんと分離できていることがわかる。
他の仮想環境作成ツール
- pyvenv Python3.6から非推奨
- virtualenv Python3.3からvenvとして標準ライブラリになった。わざわざこっちを使う必要は薄い。
- pipenvとかBuildoutとかもある