A Way of Code

興味の赴くままに書き綴っていきます。

Mac OS X 10.7.3 Lionでpythonbrew, virtualenv, pip, buildoutなPython環境を構築する 第3回 仮想環境の構築

前回:http://toggtc.hatenablog.com/entry/2012/02/06/023652

Pythonの仮想環境を構築することで、Python本体がある実環境を汚さずに、好き放題ライブラリを詰め込んだ環境を作ることができます。
pythonbrewには、venvというvirtualenv, virtualenvwrapperのラッパーコマンドが用意されています。ここではvirtualenvを直接使わず、venvを使って仮想環境を構築します。なお、virtualenvはvenvコマンド経由で自動的にインストールされます。

以下、前回の環境構築が完了している前提で話を進めます。

1. デフォルトで使うPythonを設定する

virtualenvを使うとき、Python 2.*が必要になります。ここでは、バージョン2.7.2をデフォルトで使うPythonとして設定します。

$ pythonbrew switch 2.7.2

これによって次回からpythonコマンドを打つときに2.7.2が使われるようになります。

$ python --version
Python 2.7.2
# ちなみに、pipも2.7.2配下のものが使われるようになります
$ pip --version
pip 1.0.2 from /Users/toggtc/.pythonbrew/pythons/Python-2.7.2/lib/python2.7/site-packages/pip-1.0.2-py2.7.egg (python 2.7)

2. 仮想環境を作成する

pythonbrew venvコマンドを使って、2.5.6、2.7.2、3.2.2それぞれのバージョンの仮想環境を作っていきます。

(仮想環境でdistributeを使うための設定)
なお、virtualenvから作成される仮想環境がsetuptoolsではなくdistributeをセットアップするようにするためには、VIRTUALENV_USE_DISTRIBUTE環境変数を事前に設定しておきます。
(2012.01現時点ではvenv経由だとvirtualenvの--distributeパラメータを認識しないの、この方法を使います)

export VIRTUALENV_USE_DISTRIBUTE=true

(--no-site-packagesについて)
以降、仮想環境を作るときにオプションとして「--no-site-packages」を指定します。
このオプションは、作成対象の仮想環境が、そのベースとなった実環境のPythonにあるsite-packages(※)を参照しないようにするオプションです。このオプションにより、ベースとなる実環境に何らかの外部ライブラリを入れても、仮想環境には影響しないようにすることが出来ます。
※site-packagesディレクトリは、外部ライブラリ・モジュールを格納する場所です。

なお、virtualenv 1.7以降では、--no-site-packagesがデフォルトになります。
pythonbrew 1.1 (2012年1月最新)では、virtualenv 1.6.4を使用しています。

2.1 Python 2.5.6ベースの仮想環境 "py25"

まずはPython 2.5.6ベースの仮想環境"py25"を作成します。
最初にvenvコマンドを使ったときに、virtualenvが自動的にインストールされます。

$ pythonbrew venv create py25 -p 2.5.6 --no-site-packages
Downloading virtualenv.tar.gz as /Users/toggtc/.pythonbrew/dists/virtualenv.tar.gz
######################################################################## 100.0%
Extracting virtualenv into /Users/toggtc/.pythonbrew/etc/virtualenv
Creating `py25` environment into /Users/toggtc/.pythonbrew/venvs/Python-2.5.6
Already using interpreter /Users/toggtc/.pythonbrew/pythons/Python-2.5.6/bin/python
New python executable in /Users/toggtc/.pythonbrew/venvs/Python-2.5.6/py25/bin/python
Installing distribute....................................................................................................................................................................................done.
Installing pip...............done.

2.2 Python 2.7.2ベースの仮想環境 "py27"

次はpython 2.7.2ベースの仮想環境"py27"を作成します。デフォルトのpythonを2.7.2としているので、-p 2.7.2オプションは指定しなくてもよいです。

$ pythonbrew venv create py27 -p 2.7.2 --no-site-packages
Creating `py27` environment into /Users/toggtc/.pythonbrew/venvs/Python-2.7.2
Already using interpreter /Users/toggtc/.pythonbrew/pythons/Python-2.7.2/bin/python
New python executable in /Users/toggtc/.pythonbrew/venvs/Python-2.7.2/py27/bin/python
Installing distribute....................................................................................................................................................................................done.
Installing pip...............done.

2.3 Python 3.2.2ベースの仮想環境 "py32"

最後にpython 3.2.2ベースの仮想環境"py32"を作成します。python 3.2.2は前回、--with-pydebug付きでコンパイルしているので、出力が少し異なります。

$ pythonbrew venv create py32 -p 3.2.2 --no-site-packages
Creating `py32` environment into /Users/toggtc/.pythonbrew/venvs/Python-3.2.2
[26303 refs]
Already using interpreter /Users/toggtc/.pythonbrew/pythons/Python-3.2.2/bin/python
New python executable in /Users/toggtc/.pythonbrew/venvs/Python-3.2.2/py32/bin/python
Installing distribute.............................................................................................................................................................................................................................................................................................................................................................done.
Installing pip....................done.
/Users/toggtc/.pythonbrew/etc/virtualenv/virtualenv.py:577: ResourceWarning: unclosed file <_io.FileIO name=3 mode='rb'>
cwd=cwd)
/Users/toggtc/.pythonbrew/etc/virtualenv/virtualenv.py:648: ResourceWarning: unclosed file <_io.FileIO name=3 mode='rb'>
filter_stdout=_filter_setup)
[79713 refs]

ちょちょいと仮想環境が構築できました。venvのおかげで至れり尽くせりです。
次回はbuildoutを使ってみます。

次回 hello, buildout:http://toggtc.hatenablog.com/entry/2012/02/06/024326