開発環境の整備(virtualenv + pip)

virtualenvって何?

Pythonで開発環境を構築している時に、

  1. 既存の環境と別にプロジェクトに特化した環境を作りたい
  2. 複数のバージョンのPythonを使って環境を作りたい

といったニーズが出てくると思います。

そこで、virtualenvを使うと上記のようなニーズに対応出来る。

pipって何?

自分のPC上に環境を作るのであれば、「pip」を利用して環境を作るのが良さそうです。
pipは、長らく使われてきたeasy_installの代わりとなるパッケージ管理ツールです。
phppearrubyのgem、perlcpanみたいな感じ??
メリットとしては、

  • パッケージのuninstallが出来る。
  • freezeでインストールしたパッケージの一覧が表示できる。
  • インストールせずにどのようにインストールされるのか確認できる。
  • bundle出来る(ZIP形式でパッケージングするから、配布出来る?)

といった感じのようです。

インストール

使っている環境は、Ubuntu10.10です。
まずは、easy_installでpipからインストールしていきます。

$> python -V
Python 2.6.6
#setuptools(easy_install)のインストール
$> sudo apt-get install python-setuptools
#pipのインストール
$> sudo easy_install pip

次に、virtualenvとvirtualenvがさらに便利になるvirtualenvwrapperをインストールします。

$> sudo pip install virtualenv
$> sudo pip install virtualenvwrapper

とりあえず、インストールはこれで終わりだけど、これだけだとvirtualenvwrapperが使われないので、.bashrcにでも追記しておく。

$> which virtualenvwrapper.sh
/usr/local/bin/virtualenvwrapper.sh
$> vim ~/.bashrc
#virtualwrapperの読み込み
source /usr/local/bin/virtualenvwrapper.sh
#virtualenvのルートディレクトリにする場所
WORKON_HOME=${HOME}/venv/
#パッケージをvirtualenv環境下にインストール
export PIP_RESPECT_VIRTUALENV=true


まずは、ここまでで前準備が終わりです。
次に、具体的に環境を作っていきたいと思います。

virtualenv環境下にDjango環境を作る。

まずはサンドボックスを作る。

$> mkvirtualenv \
--python=/usr/bin/python \ #利用するpythonを指定(異なるバージョンを使える)
--no-site-packages \ #指定したpythonの標準ライブラリパス(site-packages)を使わない
sandbox1
Already using interpreter /usr/bin/python
New python executable in sandbox1/bin/python
Installing setuptools............done.
virtualenvwrapper.user_scripts creating /home/xxxx/venv/sandbox1/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/xxxx/venv/sandbox1/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/xxxx/venv/sandbox1/bin/preactivate
virtualenvwrapper.user_scripts creating /home/xxxx/venv/sandbox1/bin/postactivate
virtualenvwrapper.user_scripts creating /home/xxxx/venv/sandbox1/bin/get_env_details
#mkvirtualenvするとそのまま指定したサンドボックスに入るので、以下のようになる。
(sandbox1)$> which python
/home/xxxx/venv/sandbox1/bin/python
#サンドボックスを抜ける
(sandbox1)$> deactivate
$>
#指定したサンドボックスに入る
$> workon sandbox1

ここから、サンドボックス内に必要なパッケージをインストールしていきます。

$> workon sandbox1
$> pip install mysql-python
Downloading/unpacking mysql-python
Creating supposed download cache at /home/xxxx/.pip_cache
  Downloading MySQL-python-1.2.3.tar.gz (70Kb): 70Kb downloaded
  Storing download in cache at ./.pip_cache/http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2FM%2FMySQL-python%2FMySQL-python-1.2.3.tar.gz
  Running setup.py egg_info for package mysql-python
    sh: mysql_config: not found
    Traceback (most recent call last):
      File "<string>", line 14, in <module>
      File "/home/xxx/venv/sandbox1/build/mysql-python/setup.py", line 15, in <module>
        metadata, options = get_config()
      File "setup_posix.py", line 43, in get_config
        libs = mysql_config("libs_r")
      File "setup_posix.py", line 24, in mysql_config
        raise EnvironmentError("%s not found" % (mysql_config.path,))
    EnvironmentError: mysql_config not found
    Complete output from command python setup.py egg_info:
    sh: mysql_config: not found
#mysql_configコマンドが見つからないと言っているようだ。。。
#ubuntuでは、libmysqlclient-dev を入れる必要があるとのこと。
#先に、libmysqlclient-dev パッケージをインストール
$> sudo apt-get instal libmysqlclient-dev
$> pip install mysql-python
$> pip install django
Downloading/unpacking django
  Downloading Django-1.2.4.tar.gz (6.4Mb): 6.4Mb downloaded
  Storing download in cache at ./.pip_cache/http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2FD%2FDjango%2FDjango-1.2.4.tar.gz
  Running setup.py egg_info for package django
Installing collected packages: django
  Running setup.py install for django
    changing mode of build/scripts-2.6/django-admin.py from 644 to 755
    changing mode of /home/xxxx/venv/sandbox1/bin/django-admin.py to 755
Successfully installed django
Cleaning up...

動作確認

ここまでで環境が出来ていると思うので、動作確認してみる。

#Djangoプロジェクトの作成(※1)
$>cd workspace
$>django-admin.py</span> startproject dpj1

#Djangoアプリケーションの作成
$>cd dpj1
$>./manage.py startapp app1
$>./manage.py runserver 8080

これでブラウザからアクセスして、Djangoの画面が表示されればOK。

※1) 2010.02.01追記
Ubuntu10.10の場合、django-adminは/usr/bin/django-adminが呼ばれる。
virtualenv環境下を利用する場合は、django-admin.pyとしないとダメ。
$>django-admin startproject dpj1
$>django-admin.py startproject dpj1