paste スクリプト

説明

paste スクリプトを使用すると、プロダクトの骨格となる (スケルトン) コードを生成できます。

はじめに

Paste スクリプトPython Paste という Web 開発ユーティリティーの一部です。

paster create コマンドは様々な Python フレームワークで開発プロジェクトのスケルトン(骨組みとなる)コードを生成するために使用されています。

paster create とローカルのコマンド

さらに一般的なプロジェクトテンプレートでは、 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

Zopeskel

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 ローカルコマンドがどのように動作するか

paster は setup.py を読み込みます。 paster_plugins セクションが見つかった場合は、ローカルコマンドの情報を参照します。 例として、 Plone プロジェクトのテンプレートでは setup.py の中で以下のように paster_plugins を宣言しています。:

paster_plugins = ["ZopeSkel"]

setup.py の install_requires

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 パッケージが自動的にインストールされるということを意味しています。

paster と install_requires

このことは混乱する元になると思います。

あなたが 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 を実行するように記載されているチュートリアルであふれています。 このようなチュートリアルは間違っているので従わないでください。

paste と buildout

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 の使い方は、デプロイの構成とローカルコマンドが外部に影響することを防ぎます。