開発環境の整備(virtualenv + pip)
virtualenvって何?
Pythonで開発環境を構築している時に、
- 既存の環境と別にプロジェクトに特化した環境を作りたい
- 複数のバージョンのPythonを使って環境を作りたい
といったニーズが出てくると思います。
そこで、virtualenvを使うと上記のようなニーズに対応出来る。
pipって何?
自分のPC上に環境を作るのであれば、「pip」を利用して環境を作るのが良さそうです。
pipは、長らく使われてきたeasy_installの代わりとなるパッケージ管理ツールです。
phpのpear、rubyのgem、perlのcpanみたいな感じ??
メリットとしては、
- パッケージの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