説明
paste スクリプトを使用すると、プロダクトの骨格となる (スケルトン) コードを生成できます。
Paste スクリプト は Python Paste という Web 開発ユーティリティーの一部です。
paster create コマンドは様々な Python フレームワークで開発プロジェクトのスケルトン(骨組みとなる)コードを生成するために使用されています。
さらに一般的なプロジェクトテンプレートでは、 paster create が提供する ローカルコマンド というプロジェクトに関連したコマンドによって、作成したプロジェクトに対してさらにモジュールを追加することができます。 ローカルコマンドは paster の拡張機能として追加されます。 例として、 ZopeSkel プロダクトは Plone/Zope プロジェクトに対して、以下のようなコンテンツのための様々なローカルコマンドを提供します。
... その他
ここでは、Plone アドオンモジュールのテンプレートを使用してプロジェクトを生成し、その中でコンテントタイプを生成するローカルの paster コマンドを使用する例を示します。 ローカルコマンドは生成した Python プロジェクトのフォルダの中で paster コマンドを実行したときに有効になります。
Example:
paster create -t archetype myorg.customploneaddon src myorg.customploneaddon # Now new paster commands are available paster Usage: ../../bin/paster COMMAND usage: paster [paster_options] COMMAND [command_options] ... Commands: ... ZopeSkel local commands: addcontent Adds plone content types to your project
例:
paster create -t archetype myorg.customploneaddon
src myorg.customploneaddon
# Now new paster commands are available
paster
Usage: ../../bin/paster COMMAND
usage: paster [paster_options] COMMAND [command_options]
...
Commands:
...
ZopeSkel local commands:
addcontent Adds plone content types to your project
上記の通り、 ZopeSkel paster テンプレートは addcontent テンプレートを追加します。このように作成したプロジェクトの中では addcontent ローカルコマンドが使用できるようになります。
paster addcontent -t contenttype MyShinyWebPage
paster を使用して Plone 用のコンテントを作成する方法についてのさらに詳細な情報は こちらのページ を参照してください。
以下の paster コマンドを開発プロジェクトのフォルダで実行すると、使用できるローカルコマンドの一覧が出力されます。:
../../bin/paster addcontent --list
ZopeSkel で生成したプロジェクトの場合は、以下のような内容が出力されます。:
Available templates:
atschema: A handy AT schema builder
contenttype: A content type skeleton
form: A form skeleton
paster は setup.py を読み込みます。 paster_plugins セクションが見つかった場合は、ローカルコマンドの情報を参照します。 例として、 Plone プロジェクトのテンプレートでは setup.py の中で以下のように paster_plugins を宣言しています。:
paster_plugins = ["ZopeSkel"]
Python モジュールは setup.py の install_requires セクションを使用して他のモジュールとの依存関係を処理します。 例として、 ある Plone アドオンでは以下のように書かれています。:
install_requires=['setuptools',
# -*- Extra requirements: -*-
"five.grok",
"plone.directives.form"
],
これは setuptools/buildout/pip/whatever という Python のパッケージをインストールするためのツールであなたのパッケージを Python Package Index (PyPi) からインストールする時に、 install_requires に宣言されている Python パッケージが自動的にインストールされるということを意味しています。
このことは混乱する元になると思います。
あなたが N 個の Python パッケージを含んだプロジェクトで paster を使用すると仮定しましょう。 あなたはおそらく、継続的なデプロイを可能にするために、インストールされたアプリケーションとそのバージョンを構成管理をするシステムを使用すると思います (ヒント: buildout は Python コミュニティで最近人気の手法です。)。
paster は外部の Python パッケージの構成についての情報を持っていません (paster は PYTHONPATH の中にあるものを参照できません)。 そのため、 paster create の実行時に setup.py の install_requires を読んで依存関係に遭遇した場合に、なにが問題かわかりません。
paster は そのフォルダローカルに 自動的にダウンロードしてインストールしようと試みます。
Plone と Zope のエコシステムは再利用可能な100以上のコンポーネントを含んでおり、素晴らしい依存関係の階層構造を持っています。 paster create はあなたのソースツリーを *.egg フォルダとして、それらのパッケージをインストールしようと試みます。 この議論を参照してください 。
警告
システムに入っている paster コマンドを使用しないでください。
sudo easy_install ZopeSkel を実行しないでください。 システム全体に提供されている Python にインストールされた paster コマンドを使用している paster ローカルコマンドを実行しないでください。
警告
インターネットには easy_install ZopeSkel を実行するように記載されているチュートリアルであふれています。 このようなチュートリアルは間違っているので従わないでください。
Python のアプリケーション開発の管理を buildout を使用している場合、 paster により開発をより統合することができます。
以下を buildout.cfg に追加します。:
parts =
...
paster
[paster]
recipe = zc.recipe.egg
eggs =
PasteScript
ZopeSkel
${instance:eggs}
buildout を再度実行した後に buildout は paster コマンドを bin フォルダーに追加します。
それから buildout フォルダーで paster コマンドを実行することができます。:
bin/paster
または buildout で管理しているプロジェクトのソースのフォルダーで実行します。:
../../bin/paster
このような paster の使い方は、デプロイの構成とローカルコマンドが外部に影響することを防ぎます。