python開発環境の構築から作成したeggを別環境へインストールするまで
動機
pythonを使い始めるにあたり、単体のスクリプトを書くことはすぐにできます。
pythonをインストールして、pyスクリプトを書いて実行するだけです。
pythonのダウンロードはこちら http://www.python.org/download/releases/
スクリプトを書く (例:myscript.py)#!python #coding:utf-8 print "exsoft!"スクリプトの実行
python myscript.py
素敵なコードが書けたら、別の環境でも再利用したくなります。
コードが小さい内は、スクリプトファイルをそのままコピーしても良いですが、
スクリプトファイルの数が増えてきたり、他の人に配布したりする場合、それでは不便です。
pythonではモジュールの配布方法として、eggという拡張子のzipファイル(javaのjarファイルと同じ)を利用します。
eggファイルは、easy_install(後述します)を使って追加拡張モジュールをインストールする際に、pypi(Python Package Index)からダウンロードするファイル形式としても使用されています。
また、ploneやtrac等で利用するプロダクト、プラグインもeggファイルで配布されています。
個人的に、ある開発環境を学ぶにあたって、開発環境とは別の環境に配布するまでの方法がわからないと、 真剣にコードを書く気になれないのですが、pythonの開発環境構築から別環境への配布方法までをまとめたドキュメントが見当たらなかったので、 今回はそれをテーマに書いてみたいと思います。
pythonのインストール
以下コマンドでpythonが既にインストールされているかを確認できます。python
インストールされていない場合は以下URLよりダウンロード、インストールをします。
pythonのダウンロードはこちら http://www.python.org/download/releases/
※windowsの場合は{python install folder}\Scripts\をPATHに追加します。
パッケージ管理ツールをインストール
pythonではパッケージ(追加拡張モジュール)管理ツールとしてeasy_installを使用します。先ずはこのツールをインストールします。
※windowsの場合は{python install folder}\Scripts\をPATHに追加します。
wget http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py
python仮想環境構築
上述のeasy_installを使って必要なモジュールを環境にどんどんインストールする事で、 pythonの開発は飛躍的に効率的になるわけですが、開発環境とは別の環境に配布する事を前提にすると、 この方法は次のような問題があります。
開発環境には既に様々な追加モジュールがインストールされている可能性が高いです。 既にインストールされている追加モジュールを使えなくする方法は無いので、その開発環境でコードを書くという事は開発環境への依存度が高いという事になります。 環境への依存度が高いコードは、別の環境に配布した際に動作しない可能性も高くなります。
又、既にpythonが動作している環境に、追加モジュールをインストールした場合、既存のシステムへの悪影響を与える可能性もあります。
pythonではこの問題を仮想環境を構築する事で解決します。
つまり、同じシステム内の他のpython環境とは隔離された箱庭の環境(=仮想環境)をつくり、追加モジュールのインストールを
仮想環境の中だけにインストールする事で、開発環境への依存度や、別環境への影響をゼロにする事ができます。
easy_install virtualenv仮想環境構築
任意のpythonバージョンの仮想環境を作成したい場合は、--python=/path/to/python2.x/bin/python を追加
virtualenv --no-site-packages myenvA仮想環境構築に入る(アクティベーション)
※windowsの場合はScripts\activateを実行します。
cd myenvA . ./bin/activate仮想環境構築から出る場合
※windowsの場合はScripts\deactivateを実行します。
deactivate
以降は仮想環境に入った状態を想定していますので一度仮想環境から出た方は再度アクティベーションを行ってください。
配布用パッケージの雛型を作成する
eggファイルを作るには、eggの仕様を満たす為のコードを書く必要があります。
そのコードは内容が少し違うだけで、構造はほぼ同じなので毎回1から作成するのはメンドクサイ上に間違いの元となります。
pythonでは、pasterというツールを使ってコードの雛型を生成する事でこの問題を解消しています。
easy_install PasteScript使用可能な雛型を確認します
paster create --list-template基本パッケージの雛型を作成します
paster create -t basic_package MyPkg
コードを書きます。
pasterで生成されたパッケージの中に、単体のスクリプトを書くのと同じ要領でコードを書いていきます。今回はMyPkg/mypkg/utils.pyファイルを追加して、その中に以下のメソッドだけを記述する事にします。
def somemethod(): print "called somemethod()!!"
eggファイルを作成します
pasterが出力してくれたsetup.pyを使用します。python setup.py bdist_egg
distフォルダにeggファイルが作成されます。
別環境にeggをインストール
前述の方法で、開発環境から隔離された別仮想環境を構築します。virtualenv --no-site-packages myenvB cd myenvB . ./bin/activate以下スクリプトを作成し実行します。
from mypkg.utils import * if __name__=='__main__': somemethod()
eggを未だインストールしていないので、当然エラーになります。
先ほど作成したeggファイルを引数に指定してeasy_installを実行easy_install MyPkg-0.0dev-py2.x.egg
site-packagesにeggが展開されます。
開発用の仮想環境で作成したeggファイルが動作確認用の仮想環境にインストールされたので、先ほどのスクリプトを再実行すると今回は成功します。
以上が、python開発環境の構築から、eggファイルの配布までの流れになります。
あとは、Coolなコードを書くだけです。