Python、venvで仮想環境を作る

Python

venvとは

venv モジュールは、軽量な “仮想環境” の作成のサポートを提供します。仮想環境には、仮想環境ごとの site ディレクトリがあり、これはシステムの site ディレクトリから分離させることができます。それぞれの仮想環境には、それ自身の Python バイナリ (様々な Python バージョンで環境を作成できます) があり、仮想環境ごとの site ディレクトリに独立した Python パッケージ群をインストールできます。

venvは仮想環境を作成するための、Python本体に付属しているツールです。今はPipenvやPoetyのような依存関係管理・パッケージングツールが出てきて、仮想環境の作成・切り替えもそれらを使って行うのが多くなりましたが、venvだけを使って仮想環境を利用するのもシンプルで、未だによく使われます。

仮想環境の作成

仮想環境の作成は非常にシンプルです。次のようにコマンドを実行します。

# Windowsの一例
py -3.7 -m venv testvenv

# MacやLinux
python3.7 -m venv testvenv

実行したPythonのバージョンで仮想環境が作成されます。上の例ならば、Python3.7での仮想環境ということです。

このコマンドの結果、testvenvというディレクトリが作成されます。これが、作った仮想環境に関するディレクトリです。

仮想環境の有効化

Windowsとそれ以外で、少しだけコマンドが違います。次は、Windowsの場合。

testvenv\Scripts\activate

Windows以外では次のようになります。

source testvenv/bin/activate

すると、左側に(testvenv)と、現在アクティブになっている仮想環境名が表示されます。

PS C:\Users\torit\Pictures> testvenv\Scripts\activate
(testvenv) PS C:\Users\torit\Pictures>          

pip freezeでインストールしたパッケージを表示しても、ちゃんと空欄ですね。グローバルではなく、独立した仮想環境を利用しています。後は心おきなく、好きなものをインストールしていくだけです。

(testvenv) PS C:\Users\torit\Pictures> pip freeze
(testvenv) PS C:\Users\torit\Pictures>   

ちなみにですが、仮想環境に入るとpythonpipコマンドは仮想環境を作成した際のバージョンと紐づきます。py -3.7 main.pyとかpy -3.7 -m pip install hogeみたいな長ったらしいコマンドは使わなくて済むようになり、python main.pyとかpip install hogeで良いということです。

仮想環境の終了

次のコマンドを実行するだけです。

deactivate

仮想環境のPythonパス

仮想環境を有効化しなくても、ある仮想環境のPythonインタプリタを直接実行することもできます。例えば、次のような感じです。

C:\Users\torit\Pictures\testvenv\Scripts\python main.py

/home/narito/testvenv/bin/python main.py

仮想環境を有効化せずに、ある仮想環境内にライブラリをインストールするならば、先ほどと同様にpipコマンドを使います。

C:\Users\torit\Pictures\testvenv\Scripts\pip install requests

例えばサーバー上に幾つかのDjangoプロジェクトがあって、それぞれバージョン等が違っていて、それぞれのために仮想環境を作成していたとします。その場合は、次のようにフルパスを使ってパスを指定すれば良いです。

[Unit]
Description=a.com
After=network.target

[Service]
WorkingDirectory=/home/narito/a.com
ExecStart=/home/narito/venv_a/bin/gunicorn --bind 127.0.0.1:8000 project.wsgi:application

[Install]
WantedBy=multi-user.target

Relation Posts

Pythonで、Pipenvを使う

Pipenvは、Python公式が正式に推薦するPythonパッケージングツールで、簡単に作業環境を作れる方法を提供するためのツールです。pipとvenvが連動して動くようになり、色々と使いやすくなっています。

Python Pipenv

Comment

記事にコメントする

まだコメントはありません。