2011-02-01 15 views
3

mr.developerを使用して私のパッケージを水銀リポジトリからチェックアウトしていますが、ネストされた依存関係に問題があります。次mr.developerを使用したネストされたビルドアウトパッケージ - 再帰ビルド

[buildout] 
    develop = . 

    extensions = mr.developer 
    sources = sources 
    auto-checkout = 
     pack1 
    parts = foo 

    [sources] 
    pack1 = hg http://blah.com/hg/pack1 

fooと例えば

、私が持っている場合fooは、すべてのものは、MR、スムーズに行く、私はbin/buildoutを実行するとinstall_requires = ['pack1'],

としてsetup.pyに記載されているPACK1への依存性を、持っています。開発者はpack1をダウンロードし、pack1がダウンロードされているので問題なくfooが作成されます。

ここでは、fooを依存関係としてリスト表示する別のパッケージbarがあります。

[buildout] 
    develop = . 

    extensions = mr.developer 
    sources = sources 
    auto-checkout = 
     foo 
    parts = bar 

    [sources] 
    foo = hg http://blah.com/hg/foo 

また、私は今、私は理解していない部分で何が起こるかinstall_requires = ['foo'], を実行して、私のsetup.pyで依存関係としてリストfooの。

bin/buildoutを実行すると、mr.developerがfooをフェッチしますが、foo /の内部にあるbuildout.cfgを実行するための継ぎ目はありません。 その結果、foo/setup.pyには存在しないpack1が必要です。

foo/buildout.cfgに示されているように、mr.developerが実際に行ってpack1をhttp://blah.com/hg/packにフェッチする方法を教えてください。

私は、このような複数のパッケージをネストすることができます。それぞれのパッケージに深く入り込み、手動でビルドアウトを実行する必要はありません。

乾杯、 マーティン

答えて

10

ビルドアウトがどのように機能するかあなたが誤解されています。

通常、buildoutはあなたのために部品を作るために必要なすべての卵を見つけようとします。これは、あなたのサイトパッケージ、PyPI、または任意の追加Webロケーション(find-linksを使用)で卵を検索することによって(特定のバージョンに固定することもできます)。

すべての依存関係が満たされるまで再帰的に実行されます。だから、もしfooという卵をbarに依存し、spambaconに依存する卵を使用することを指定した場合、buildoutはそれらの4つの卵を探し出します。

卵は.egg拡張子を使用した特別なpythonパッケージです。代わりに、setup.pyファイルを持つpythonパッケージがある場合は、正しい名前を指定し、そのsetup.pyを実行してその場で卵を作成します。

これは開発卵が入ったものです。それらはすでにファイルシステム上に存在しているので、他の場所からダウンロードする必要はありません。彼らのバージョン要件は強制されておらず、もし存在するならば、他の場所にある卵の他のバージョンよりも優先されます。ビルドアウトが実行されると、setup.pyが実行されて、卵をインプレイスで構築します。 buildoutが実行され、いくつかのメタデータがbuildoutのdevelopment-eggsディレクトリに格納されているときに、そのパッケージに.egg-infoディレクトリがあります。

例では、開発卵を管理するためにmr.developerを使用していますが、最初に水銀リポジトリから読み込んでください。Buildout自体はこれに本当に気をつけません。それは、SCMリポジトリからPythonパッケージを読み込んでPythonの卵として処理する(巧妙な)方法です。

リストあなたがする必要があるのである水銀から[sources]にし、auto-checkout(1行に1つずつ)に来て、すべての依存関係。あなたの場合、依存関係はbar - >foo - >pack1で実行され、foopack1は両方の開発者制御構成でリストされているため、buildoutがこれらの両方の開発の卵を確実に見つけることができます。

このすべてでは、1つの構築構成がすべて必要であることを覚えておくことが重要です。 buildoutはパッケージ内にあるbuildout構成ファイルを実行しません。 Pythonの卵だけを扱い、他のビルドアウト構成は扱いません。ビルドアウト設定ファイルはpythonの卵の中にあることがありますが、これは卵の開発者のためにテストを実行し、開発を助けるためのものです。

+0

Martjin、もう一度お世話になります。ビルドアウトについてのドキュメントを見つけることは非常に難しく、私はあなたなしで何をするのか分かりません。私がこの権利を得たら、私がするべき最良のことは、fooのために卵を作り、依存関係がないことを確認したいならば、そのパスをfind-linksに追加することです(ネストされたプロジェクトのリスト非常に長くなることだった)。 – Martin

+0

私はfind.pyをsetup.pyで使わないでください。あなたは本当にビルドアウト自体のどこから卵が来るのか完全に制御したいと思っています。 –

+0

@MartijnPieters:もう一度、わかりやすく役立つ非常にコンパクトな説明のために! –

関連する問題