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