こんにちは、塊です。
VirtualBox で作成した Ubuntu 12.04 上に Django の開発環境を構築した際のメモです。
今回は pyenv + virtualenv で作ったサンドボックス上で動くようにしました。
pyenv
pyenv とは
pyenv は Python のバージョン管理ツールです。
シェルスクリプトで書かれています。
異なるバージョンの Python をユーザーの環境にインストールし、切り替えて使うことができます。
pyenv をインストール
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
とすることでインストールできます。
また、パスを通す必要があります。
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
Python をインストール
pyenv で Python をインストールするために、僕の環境では以下のパッケージを入れる必要がありました。 ※ このページによくあるビルド時の問題が書かれているので、もしうまくいかなかった場合は参照してください。
sudo apt-get install libbz2-dev libreadline-dev libsqlite3-dev
インストール可能な Python のバージョンは
pyenv install -l
で確認できます。
今回は 2.7.5 をインストールします。
pyenv install 2.7.5
使いかた
使えるバージョンは以下のコマンドで確認できます。
pyenv versions
プロジェクトのディレクトリに移動してから
pyenv local 2.7.5
とすることで、そのプロジェクトでのみ Python 2.7.5 が利用されるようになります。
この状態で
pip install ***
とすると、2.7.5 の環境にパッケージがインストールされます。
なお、パッケージにコマンドラインツールが含まれている場合は、
pyenv rehash
として symlink を作り直してやらないと、コマンドラインツールを利用できません。
virtualenv
virtualenv とは
virtualenv は、独立した Python の実行環境を作成するためのツールです。
ここで言う独立した Python の実行環境とは、バージョンの異なる Python 実行環境と、同じバージョンでも異なるパッケージの入った実行環境を指しています。
virtualenv だけでも複数のバージョンの Python を切り替えることができるので、pyenv と機能が被っている部分があります。
しかし、virtualenv で実行環境を作成するには、元となる Python 本体をどうにかして用意しなければなりません。
pyenv + virtualenv 構成だと、Python 本体の用意と環境の切り替えは pyenv、同じバージョンに対して複数の実行環境を作成するのは virtualenv が行うことになります。
複数の Python 本体を用意するツールとして pythonz といったものもあり、pythonz + virtualenv という構成も考えられますが、pyenv + virtualenv のほうがインストールが手軽でコマンドがシンプルに感じました。
また、pyenv は Python で書かれていないため、デフォルトの Python 環境を汚さないのもよいと思います。
virtualenv のインストール
pyenv 用の virtualenv プラグインがありますので、これをインストールします。
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
使いかた
pyenv virtualenv 2.7.5 venv27
としてやると、 Python 2.7.5 で、かつパッケージがまっさらな環境が新規に作成されます。
作成した環境は、バージョンの切り替えと同様
pyenv local venv27
として利用可能です。
おまけ: pip によるパッケージ管理
pyenv と virtualenv を使ってサンドボックスを簡単に作成できるようになりました。
今度はプロジェクト単位でのパッケージ管理を簡単にしたいと思います。
django-admin.py startproject hoge
として作成された hoge プロジェクトがあったとします。
hoge プロジェクトでは py.test でテストを書くことになりました。
このような場合、hoge/packages.txt
に以下のような記述をしておきます。
このようにファイル化することで、パッケージの構成をバージョン管理することができます。
Django==1.5.2
py==1.4.15
pytest==2.3.5
pytest-django==2.3.0
wsgiref==0.1.2
なお、
pip freeze
とすると現在の環境に入っているパッケージ一覧が出力されますので、新規作成の際に利用できます。
すると、例えば新しくプロジェクトに参加した人が開発環境をセットアップする場合、
git clone https://<repository>/hoge.git
cd hoge
pip install -r packages.txt
とするだけで、同じ環境を構築できます。