1

我一直在尝试导入几个实际上依赖于我正在构建的鸡蛋的包。因为这些鸡蛋不在奶酪店里,所以我无法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

我建议您在构建中切换到使用mr.developer来处理外部 SCM 管理的依赖项。mr.developer 允许您从 Mercurial 存储库以及 Git、Bazaar、Darcs、Subversion 甚至 CVS 存储库中提取依赖项(eggs 或其他)。您可以将这些依赖项视为其他 python 鸡蛋可以在 setup.py 中依赖的开发鸡蛋。

要使用 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

当你现在运行 buildout 时,pack1 和 pack2 都将被检出,构建为鸡蛋,当在其他地方用作依赖项时,用于填充这些依赖项。因此,如果 'pack1' 或 'pack2' 列在eggs一行上或作为 setup.py 中另一个 egg 的依赖项,zc.buildout 将选择 mr.developer 签出的版本。

bin/developer命令行工具让您可以完全控制这些选项,请阅读 mr.developer 的PyPI页面

于 2011-01-30T10:24:57.013 回答