virturalenv で Python 仮想環境を作成

この記事は2016年9月15日に公開したものです。情報が古い可能性がありますのでご注意ください。

はじめに

Python 実行環境を作る機会があったので Virtaulenv を使ってみました。

Virtaulenv

Virtaulenv はシステム環境とは独立して Python 仮想環境を作成するツールです。
仮想環境とは、特定のバージョンの Python と幾つかの追加パッケージを含んだ Python 実行環境を構成するディレクトリです。
例えば Ubuntu であれば、 Ubuntu 標準の Python 2.7 (/usr/bin/python -> python2.7)と pip を使ってインストールされたライブラリ類は /usr/local/lib/python2.7 以下にインストールされますが、 Virtualenv を使った場合、 /usr/local/lib/python2.7 ではなく Virtualenv で作成したディレクトリ配下に Python 2.7 と pip のライブラリがインストールされます。

インストールと構築

Virtaulenv をインストールしてみます。
インストールの方法は、ソースコードからインストールするか、 pip を使うか、OSパッケージを使うか、のいずれかになると思います。
どの方法が一般的かわかりませんが、今回は Virtualenv を OS パッケージでインストールし、Virtualenv上に pip 含めライブラリをインストールすることにします。

Ubuntu 16.04 LTSには Python 2.7 と Python 3.5 のOSパッケージが存在しますので、この2つのPythonを利用して、2.7 と 3.5 のPython仮想環境を試すことにします。

環境
OS Ubuntu 16.04 LTS(4.4.0-21-generic)
Python Python 2.7 (Ubuntu 標準パッケージ), Python 3.5 (Ubuntu 標準パッケージ)
インストール

単純に apt コマンドでインストールすれば終わりです。

$ sudo apt install virtualenv
Virtualenv 環境構築

Virtualenv環境用ディレクトリを作成します。

$ sudo mkdir ~/WORK/

Python 2.7 用の Virtualenv 環境を作成します。
-p で Python の Path を指定します。

$ virtualenv -p /usr/bin/python2.7 ~/WORK/venv27
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in /home/${USER}/WORK/venv27/bin/python2.7
Also creating executable in /home/${USER}/WORK/venv27/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.

Python 3.5 用の Virtualenv 環境を作成します。

$ virtualenv -p /usr/bin/python3.5 ~/WORK/venv35
Running virtualenv with interpreter /usr/bin/python3.5
Using base prefix '/usr'
New python executable in /home/${USER}/WORK/venv35/bin/python3.5
Also creating executable in /home/${USER}/WORK/venv35/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
Virtualenvの利用

virtualenvの環境に移行してみます。
Python 2.7 の環境に移行するには、先ほど Python 2.7 を指定して作成した Virtualenv ディレクトリ以下の /bin/activate コマンドを使います。

$ . ~/WORK/venv27/bin/activate
(venv27) $

Python の PATH やバージョンを確認してみます。

(venv27) $ which python
/home/${USER}/WORK/venv27/bin/python

(venv27) $ python -V
Python 2.7.12

Virtualenv環境から抜けるには、先ほど Python 2.7 を指定して作成した Virtualenv ディレクトリ以下の /bin/deactivate コマンドを使います。virtaulenv環境に入っている場合は deactivate コマンドへの PATH は通っています。

(venv27) $ deactivate

Python 3.5 の環境に移行するには、先ほど Python 3.5 を指定して作成した Virtualenv ディレクトリ以下の /bin/activate コマンドを使います。

$ . ~/WORK/venv35/bin/activate
(venv35) $

Python の PATHやバージョンを確認してみます。

(venv35) $ which python
/home/${USER}/WORK/venv27/bin/python

(venv35) $ python -V
Python 3.5.2

virtualenv環境から抜けるには、先ほど Python 3.5 を指定して作成した virtualenv ディレクトリ以下の /bin/deactivate コマンドを使います。Virtaulenv環境に入っている場合は deactivate コマンドへの PATH は通っています。

(venv35) $ deactivate

何かライブラリをインストールしてみます。
Virtualenv 環境作成時に pip も利用可能になっています。
pip を使用してライブラリ類をインストールできます。Virtualenv環境内でインストールしたものは 他のVirtaulenv環境やシステムのライブラリに影響を与えません。

以下は flask をインストールしてみたものです。

(venv27) $ pip install flask
Collecting flask
  Downloading Flask-0.11.1-py2.py3-none-any.whl (80kB)
    100% |████████████████████████████████| 81kB 3.2MB/s
Collecting itsdangerous>=0.21 (from flask)
  Downloading itsdangerous-0.24.tar.gz (46kB)
    100% |████████████████████████████████| 51kB 7.0MB/s
Collecting click>=2.0 (from flask)
  Downloading click-6.6.tar.gz (283kB)
    100% |████████████████████████████████| 286kB 2.8MB/s
Collecting Werkzeug>=0.7 (from flask)
  Downloading Werkzeug-0.11.11-py2.py3-none-any.whl (306kB)
    100% |████████████████████████████████| 307kB 3.0MB/s
Collecting Jinja2>=2.4 (from flask)
  Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB)
    100% |████████████████████████████████| 266kB 4.4MB/s
Collecting MarkupSafe (from Jinja2>=2.4->flask)
  Downloading MarkupSafe-0.23.tar.gz
Building wheels for collected packages: itsdangerous, click, MarkupSafe
  Running setup.py bdist_wheel for itsdangerous ... done
  Stored in directory: /home/${USER}/.cache/pip/wheels/fc/a8/66/24d655233c757e178d45dea2de22a04c6d92766abfb741129a
  Running setup.py bdist_wheel for click ... done
  Stored in directory: /home/${USER}/.cache/pip/wheels/b0/6d/8c/cf5ca1146e48bc7914748bfb1dbf3a40a440b8b4f4f0d952dd
  Running setup.py bdist_wheel for MarkupSafe ... done
  Stored in directory: /home/${USER}/.cache/pip/wheels/a3/fa/dc/0198eed9ad95489b8a4f45d14dd5d2aee3f8984e46862c5748
Successfully built itsdangerous click MarkupSafe
Installing collected packages: itsdangerous, click, Werkzeug, MarkupSafe, Jinja2, flask
Successfully installed Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.11.11 click-6.6 flask-0.11.1 itsdangerous-0.24

PATHを確認してみます。

(venv27) $ which flask
/home/${USER}/work/venv27/bin/flask

ライブラリのインストール場所を確認します。

(venv27) $ ls work/venv27/lib/python2.7/site-packages/flask
__init__.py   _compat.py   blueprints.py   config.py   debughelpers.py   exthook.pyc  helpers.pyc  logging.pyc   signals.pyc     testing.pyc  wrappers.pyc
__init__.pyc  _compat.pyc  blueprints.pyc  config.pyc  debughelpers.pyc  globals.py   json.py      sessions.py   templating.py   views.py
__main__.py   app.py       cli.py          ctx.py      ext               globals.pyc  json.pyc     sessions.pyc  templating.pyc  views.pyc
__main__.pyc  app.pyc      cli.pyc         ctx.pyc     exthook.py        helpers.py   logging.py   signals.py    testing.py      wrappers.py

virtualenv環境から抜けて、 flask を利用できるか確認してみます。

(venv27) $ deactivate

$ which flask
(出力なし)

終わりに

異なるバージョンの Python やライブラリの動作を試したい場合に、 Virtualenv を使用することでシステム内のライブラリを汚さずに管理して使い分けることができます。

参考

このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です