はじめに
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 を使用することでシステム内のライブラリを汚さずに管理して使い分けることができます。