我正在使用mr.developer从mercurial存储库中检出我的包,但是我必须做错了,因为我遇到了嵌套依赖项的问题.
例如,如果我有foo以下内容
[buildout]
develop = .
extensions = mr.developer
sources = sources
auto-checkout =
pack1
parts = foo
[sources]
pack1 = hg http://blah.com/hg/pack1
Run Code Online (Sandbox Code Playgroud)
foo 依赖于pack1,在setup.py中列为 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
Run Code Online (Sandbox Code Playgroud)
我还将foo列为我的setup.py中的依赖项.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?
我希望能够嵌套这样的多个包,而无需深入到每个包中并手动运行buildout.
干杯,马丁
Mar*_*ers 10
您误解了buildout的工作原理.
通常情况下,buildout会尝试找到为您构建零件所需的所有鸡蛋.它通过在您的站点包,PyPI或任何其他Web位置(使用find-links)中搜索鸡蛋(可选择固定到特定版本)来实现.
它将以递归方式执行此操作,直到满足所有依赖关系.所以,如果你指定要使用一种称为鸡蛋foo取决于bar,而这又依赖于spam和bacon,扩建将定位这四个鸡蛋给你.
请注意,egg是特殊的python包,使用.egg扩展名.如果有一个带有setup.py文件的python包,它指定了正确的名称,那么执行setup.py即可动态创建一个egg.
这是发展鸡蛋进来; 它们是不需要从其他地方下载的python包,因为它们已经存在于文件系统中.他们的版本要求没有强制执行,如果存在,他们优先于其他地方发现的其他版本的鸡蛋.当buildout运行时,运行它们的setup.py来就地生成一个蛋; 当buildout运行时,你会在该包中找到一个.egg-info目录,并且一些更多的元数据存储在你的buildout的develop-eggs目录中.
在您的示例中,您使用mr.developer来管理开发阶段,首先从mercurial存储库加载它们.Buildout本身并不关心这一点,它只是一个(聪明的)从SCM存储库加载python包并将它们视为python egg的方法.
所有你需要做的是列表全部依赖从善变进来[sources]和auto-checkout(每行一个).在您的情况下,依赖项运行bar- > foo- > pack1,并通过列表foo和pack1mr.developer控制的配置,您确保buildout将找到这两者的开发蛋.
在所有这些中,重要的是要记住,只需要一个构建配置; buildout不会运行包内的buildout配置文件.它只处理蟒蛇蛋,而不是其他构建配置.你有时会在python egg中找到buildout配置文件,但是这些是针对egg的开发人员,运行测试和辅助开发,而不是在你自己的项目中用作egg时依赖.
| 归档时间: |
|
| 查看次数: |
1074 次 |
| 最近记录: |