gpt4 book ai didi

buildout - 使用 mr.developer 嵌套构建包 - 递归构建

转载 作者:行者123 更新时间:2023-12-02 08:03:03 25 4
gpt4 key购买 nike

我正在使用 mr.developer 从 Mercurial 存储库中 checkout 我的包,但我一定做错了什么,因为我遇到了嵌套依赖项的问题。

例如,如果我的 foo 具有以下内容

  [buildout]
develop = .

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

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

foo 依赖于 pack1,在 setup.py 中列为 install_requires = ['pack1'],

当我运行 bin/buildout 时,一切都很顺利,mr.developer 下载 pack1,并且 foo 的创建没有任何问题,因为 pack1 已下载,因此存在。

现在,我有另一个包 bar,它将 foo 列为依赖项。

  [buildout]
develop = .

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

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

我还通过执行 install_requires = ['foo'], 将 foo 列为 setup.py 中的依赖项现在发生的事情是我不明白的部分。

当我运行 bin/buildout 时,mr.developer 会去获取 foo,但不会执行位于 foo/内部的 buildout.cfg 。因此,foo/setup.py 需要 pack1,但该包不存在。

如何确保 mr.developer 确实在 http://blah.com/hg/pack 上获取 pack1如 foo/buildout.cfg 中所示?

我希望能够像这样嵌套多个包,而不必深入每个包并手动运行构建。

干杯,马丁

最佳答案

您误解了构建的工作原理。

通常情况下,buildout 会尝试找到为您构建零件所需的所有鸡蛋。它通过在您的站点包、PyPI 或任何其他网站位置(使用 find-links)搜索彩蛋(可以选择固定到特定版本)来实现这一点。

它将递归地执行此操作,直到满足所有依赖关系。因此,如果您指定要使用名为 foo 的 Egg,它依赖于 bar,而后者又依赖于 spambacon,buildout 将为您找到这四个鸡蛋。

请注意,eggs 是特殊的 python 包,使用 .egg 扩展名。如果有一个带有 setup.py 文件的 python 包,并且指定了正确的名称,那么就会执行该 setup.py 以动态创建一个 Egg。

这是发育蛋出现的地方;它们是不需要从其他地方下载的 python 包,因为它们已经存在于文件系统中。它们的版本要求并未强制执行,如果存在,它们优先于其他地方找到的鸡蛋的其他版本。当 buildout 运行时,它们的 setup.py 会运行以就地构建一个 Egg;当构建运行时,您会在该包中找到 .egg-info 目录,并且更多元数据存储在构建的develop-eggs 目录中。

在您的示例中,您使用 mr.developer 来管理您的开发 Egg,首先从 Mercurial 存储库加载它们。 Buildout 本身并不真正关心这一点,它只是从 SCM 存储库加载 python 包并将它们视为 python 蛋的一种(聪明)方法。

您需要做的就是在 [sources]auto-checkout 中列出来自 Mercurial 的所有依赖项(每行一个) 。在您的情况下,依赖项运行 bar -> foo -> pack1,并列出 foo pack1 都在 mr.developer 控制的配置中,您可以确保构建将为这两者找到开发鸡蛋。

在这一切中,重要的是要记住,一个构建配置就足够了; buildout 不运行包内找到的 buildout 配置文件。它只处理 python Egg,不处理其他构建配置。有时您确实会在 python Egg 中找到构建配置文件,但这些文件是供 Egg 开发人员运行测试和帮助开发的,而不是在您自己的项目中用作 Egg 时引入依赖项。

关于buildout - 使用 mr.developer 嵌套构建包 - 递归构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4859407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com