3

mr.developerを使用してMercurialリポジトリからパッケージをチェックアウトしていますが、ネストされた依存関係に問題があるため、何か間違ったことをしている必要があります。

たとえば、私がfoo次のように持っている場合

  [buildout]
  develop = .

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

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

foosetup.pyに次のようにリストされているpack1に依存しています install_requires = ['pack1'],

実行するbin/buildoutと、すべてがスムーズに進み、mr.developerがpack1をダウンロードし、pack1がダウンロードされたため、fooが問題なく作成され、存在します。

今、私は別のパッケージ、barを持っています。これは、依存関係としてfooをリストします。

  [buildout]
  develop = .

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

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

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

を実行するbin/buildoutと、mr.developerはfooを取得しますが、foo/内にあるbuildout.cfgを実行するためにシームしません。その結果、foo / setup.pyにはpack1が必要ですが、これは存在しません。

mr.developerが実際に行って、 http: //blah.com/hg/packでpack1をフェッチすることを確認するにはどうすればよい ですfoo/buildout.cfgか?

各パッケージを詳しく調べてビルドアウトを手動で実行しなくても、このように複数のパッケージをネストできるようにしたいと思います。

乾杯、マーティン

4

1 に答える 1

10

ビルドアウトがどのように機能するかを誤解しています。

通常、ビルドアウトは、パーツをビルドするために必要なすべての卵を見つけようとします。これは、サイトパッケージ、PyPI、またはその他のWebロケーション(を使用してfind-links)で卵(オプションで特定のバージョンに固定されている)を検索することによって行われます。

すべての依存関係が満たされるまで、再帰的に実行されます。したがって、に依存するという呼ばれるエッグを使用するように指定した場合foobarこれはとに依存しspambaconビルドアウトはそれらの4つのエッグを検索します。

卵は.egg拡張子を使用した特別なPythonパッケージであることに注意してください。代わりに、正しい名前を指定するsetup.pyファイルを含むPythonパッケージがある場合は、そのsetup.pyが実行され、その場でエッグが作成されます。

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

あなたの例では、mr.developerを使用して開発エッグを管理し、最初にMercurialリポジトリからロードします。Buildout自体はこれを実際には気にしません。これは、SCMリポジトリからPythonパッケージをロードし、それらをPythonの卵として扱うための(賢い)手段にすぎません。

あなたがする必要があるのは、水銀から来るすべての[sources]依存関係をリストすることですauto-checkout(1行に1つ)。あなたの場合、依存関係はbar-> foo->を実行し、mr.developerが制御する構成で両方をリストpack1することにより、ビルドアウトがこれらの両方の開発エッグを確実に見つけるようにします。foopack1

これらすべてにおいて、必要なのは1つのビルドアウト構成だけであることを覚えておくことが重要です。buildoutは、パッケージ内にあるビルドアウト構成ファイルを実行しません。Pythonの卵のみを扱い、他のビルドアウト構成は扱いません。Pythonのegg内にビルドアウト構成ファイルが見つかることもありますが、これらは、eggの開発者がテストを実行して開発を支援するためのものであり、独自のプロジェクトでeggとして使用するときに依存関係を取得するためのものではありません。

于 2011-02-01T12:59:20.770 に答える