1

私は、実際に構築しているeggへの依存関係であるいくつかのパッケージをインポートしようとしています。これらの卵はチーズストアにないためnstall_requires = ['pack1', 'pack2']setup.pyスクリプトでiを使用できません。そのため、次の方法でビルドアウト構成に追加しようとしています。

  1 [buildout]
  2 develop = .
  3 parts = 
  4     python
  5     pack1
  6     pack2
  7 
  8 extra_paths = ${pack1:location}/src/
  9     ${pack2:location}/src/
 10 
 11 [python]
 12 recipe = zc.recipe.egg
 13 eggs = myegg
 14 extra-paths = 
 15     ${buildout:extra_paths}
 16 
 17 interpreter = python
 18 
 19 [pack1]
 20 recipe = mercurialrecipe
 21 repository = https://repo.xxx.com/hg/pack1/
 22 
 23 [pack2]
 24 recipe = mercurialrecipe
 25 repository = https://repo.xxx.com/hg/pack2/

私はこれを間違った方法で行っている可能性があります-私はビルドアウトから始めています。bin / buildoutを実行すると、次のエラーが発生します。

Updating python.
Updating pack1.
pack1: Pulling repository https://repo.xxx.com/hg/pack1/ and updating /home/martin/proj1/parts/pack1
pulling from https://repo.xxx.com/hg/pack1/
searching for changes
no changes found
Installing pack2.
pack2: Cloning repository https://repo.xxx.com/hg/pack2/ to /home/martin/proj1/parts/pack2
While:
  Installing pack2.

    An internal error occurred due to a bug in either zc.buildout or in a
    recipe being used:
    Traceback (most recent call last):
      File "/home/martin/proj1/eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/buildout.py", line 1805, in main
        getattr(buildout, command)(args)
      File "/home/martin/proj1/eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/buildout.py", line 584, in install
        installed_files = self[part]._call(recipe.install)
      File "/home/martin/proj1/eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/buildout.py", line 1297, in _call
        return f()
      File "build/bdist.linux-x86_64/egg/mercurialrecipe/__init__.py", line 50, in install
        commands.clone(ui.ui(), get_repository(self.source), self.destination)
      File "build/bdist.linux-x86_64/egg/mercurialrecipe/__init__.py", line 18, in get_repository
        return hg.repository(ui.ui(), location)
      File "/usr/lib/python2.6/site-packages/mercurial-1.7.3-py2.6-linux-x86_64.egg/mercurial/hg.py", line 96, in repository
        repo = _lookup(path).instance(ui, path, create)
      File "/usr/lib/python2.6/site-packages/mercurial-1.7.3-py2.6-linux-x86_64.egg/mercurial/httprepo.py", line 203, in instance
        return statichttprepo.instance(ui, "static-" + path, create)
      File "/usr/lib/python2.6/site-packages/mercurial-1.7.3-py2.6-linux-x86_64.egg/mercurial/statichttprepo.py", line 146, in instance
        return statichttprepository(ui, path[7:])

pack1とpack2を切り替えると、pack2がインストールされます。基本的には両方とも正常に動作しますが、両方をフェッチしようとするとすぐにすべてが壊れます。

前もって感謝します。マーティン

4

1 に答える 1

3

ビルドアウトの外部SCM管理依存関係にmr.developerを使用するように切り替えることをお勧めします。mr.developerを使用すると、Mercurialリポジトリ、Git、Bazaar、Darcs、Subversion、さらにはCVSリポジトリから依存関係(eggsなど)を取得できます。これらの依存関係は、setup.pyで他のPythonエッグが依存できる開発エッグとして扱うことができます。

mr.developerを使用するには、ビルドアウト拡張機能として追加します。

[buildout]
extensions = mr.developer

[sources]セクションを使用して、mr.developerにリソースについて通知します。

[sources]
pack1 = hg https://repo.xxx.com/hg/pack1/
pack2 = hg https://repo.xxx.com/hg/pack2/

mr.developerを使用すると、これらのリポジトリを管理するためのコマンドラインツールを入手できます。それらをチェックアウトして更新し、最も重要なこととして、ビルドアウトの開発エッグとしてビルドすることができます。

このようなソースを自動的にチェックアウトし、開発エッグとしてビルドするには、次のセクションのauto-checkoutオプションにリストします。[buildout]

[buildout]
extensions = mr.developer
auto-checkout =
    pack1
    pack2

ここでビルドアウトを実行すると、pack1とpack2の両方がチェックアウトされ、eggとしてビルドされ、他の場所で依存関係として使用される場合は、それらの依存関係を埋めるために使用されます。したがって、「pack1」または「pack2」のいずれかがeggs行にリストされているか、setup.pyの別の卵の依存関係としてリストされている場合、zc.buildoutはmr.developerによってチェックアウトされたバージョンを選択します。

bin/developerコマンドラインツールを使用すると、これらのオプションを完全に制御できます。mr.developerのPyPIページをお読みください。

于 2011-01-30T10:24:57.013 に答える