pasterを使って素早くeggとパッケージを作る


This How-to is intended for: Developer

pasterコマンドを使って、setuptools、そしてeggのレイアウトに適した新しいパッケージを素早く簡単に作る方法を紹介します。

Zope 2.10(あるいはZope 2.9でpythonプロダクトを使っている場合)ではProductsディレクトリだけではなく、$PYTHONPATHにパッケージをインストールす るZopeプロダクトを作ることができます。さらにZope 2用のものではないが他のプロダクトが依存するようなパッケージを作ることもできます。

ZopeとPloneはpython eggへの依存度をだんだんと高めている傾向にあります。eggはソースコードだけでなく、便利なメタデータや自動的に依存関係を管理するエクステンショ ンを含んでいます。しかしながらこれをサポートするためには、いくつかの「決まり文句」をコードに追加する必要があります。

これらの「決まり文句」を簡単に生成するためにZopeSkelを使うことができます。これはPloneのための決まり文句を生成するPasteScriptテンプレートです。

セットアップ

ZopeSkelをインストールするためには、まずシステムにeasy_installをインストールする必要があります。もしまだインストールしていなかったら、ez_setup.pyをダウンロードし、下記のように実行します。

  $ wget peak.telecommunity.com/dist/ez_setup.py
  $ python ez_setup.py

それからZopeSkelのeggと、依存関係にあるパッケージ(PasteScriptなど)をインストールするために、下記のようにします。

 $ easy_install -U ZopeSkel

これによってpythonのバイナリが実行される場所にpasterコマンドがインストールされます。インストール後にpasterコマンドが見つ からない場合は、easy_installの出力をよく見てみてください。もし$PATHにpasterが無いようであれば、$PATHにシンボリックリ ンクを作っておきましょう。

新しくeggを作る

これでいろいろなタイプのパッケージを作ることができるようになります。下記のようなコマンドを実行すると利用可能なテンプレートが表示されます。

  $ paster create --list-templates
  Available templates:  basic_namespace:   A project with a namespace package
   basic_package:     A basic setuptools-enabled package
   nested_namespace:  A project with two nested namespaces.
   paste_deploy:      A web application deployed through paste.deploy
   plone:             A Plone project
   plone2_theme:      A Theme for Plone 2.1 & Plone 2.5
   plone3_theme:      A Theme for Plone 3
   plone_app:         A Plone App project

標準的なsingle-levelのPloneテンプレートを生成するためには下記のようにします。

 $ paster create -t plone

質問事項に答えると必要な決まり文句とメタデータを含んだ新しいディレクトリができます。同様にplone.app.somethingのようなtwo-levelなパッケージについても

 $ paster create -t plone_app

のようにすればOKです。

他にもたとえば、David Conventの作ったDIYPloneStyleに基づいた新しいテーマを作ろうと思ったら

 $ paster create -t plone3_theme

とします。

インスタンスにeggを追加する

新しく作ったパッケージをインストールしたり、eggを作ってCheeseshopなどにアップロードするためには、setup.pyを使うことができます。これについての詳細はsetuptoolsのドキュメントを参照してください。

さらに詳しく知りたいときにはbuildoutチュートリアルを参照してください。

Zopeにパッケージを見つけさせる

Productsディレクトリはプロダクトを登録するためにスタートアップ時にZopeにスキャンされます。逆にProductsディレクトリの外 にあるプロダクトやパッケージはスキャンされません($PYTHONPATH全体をスキャンするのはよいアイデアではないでしょう)。

他のパッケージやプロダクトから使おうと思うような通常のpythonパッケージを作るだけであれば何もする必要はありませんが、プロダクトが必要 であったり(つまり"Is this a Zope 2 product?"に対して"Yes"と回答したり)、Zopeのスタートアップ時にZope3の.zcmlファイルを読み込む必要があるのであれば、下 記のようにします。

  • $INSTANCE_HOME/etc/package-includesに、my.package-configure.zcmlと いった名前でファイルを保存します。このファイルには<include package="my.package" />という1行が書かれています。これによってZopeは$PYTHONPATHのmy.packageというパッケージを探し出し、このパッケー ジのconfigure.zcmlを実行します。
  • Productsディレクトリにあるプロダクトのconfigure.zcml に<include package"my.package" />と書きます。FiveはProductsディレクトリにあるすべてのプログラムのZCMLを確認しますので、これによってパッケージが読み込ま れるでしょう。
  • etc/site.zcmlに<include package"my.package" />と書きます。これによってスタートアップ時に読み込まれます。

zc.buildoutで管理する方法についての詳細は、buildout tutorialを参照してください。

*Zope 2.10はPython 2.4を使いますが、システムにインストールされているPythonが2.5の場合、easy_installなどでインストールされるパッケージが (2.5ではなく)2.4のsite-packagesにインストールされることを確認しておいた方がよいでしょう。

see also:

Create new eggs and packages quickly with paster
How to use the paster command to create new packages with proper setuptools- and egg-compliant filesystem layout quickly and easily.