MOテクノロジー

技術をメモしていくブログ

【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とかもある

参考

venv --- 仮想環境の作成 — Python 3.7.4 ドキュメント