【问题标题】:Buildout: Including another Python project via mercurial?Buildout:通过 mercurial 包含另一个 Python 项目?
【发布时间】:2011-01-10 04:32:12
【问题描述】:

我有一个名为 Foo/ 的项目,其中包含 buildout.cfg 和 setup.py。现在有另一个名为 Bar/ .. 的项目也有 buildout.cfg 和 setup.py。由于 Bar/ 依赖于各种 Python 模块,它的 setup.py 中有install_requires=['lxml', 'SQLAlchemy']。 Foo/ 取决于 Bar/。

但是 Bar/ 还没有发布。如何在 Foo 的构建中包含 Bar/ 以便我可以导入 Bar 的模块、lxml 和 SQLAlchemy?

假设 Bar/ 使用 mercurial 作为其修订控制系统。

我的尝试Buildout mercurial recipe 没有多大作用。它只克隆存储库,但不会自动获取 Bar/setup.py 中 install_requires 的鸡蛋并将 Bar/ 本身添加到 sys.path。

实际示例:这是我的 buildout.cfg 的样子(Bar == mercurialrecipe 包):

[buildout]
parts = ... pyrtm ...
develop = . parts/pyrtm
eggs = pyrtm

[pyrtm]
recipe = mercurialrecipe
repository = http://bitbucket.org/srid/pyrtm

...

这不起作用,因为 sys.path 不包含本地克隆的 mercurialrecipe(在 parts/mr 中)的路径,并且未安装依赖项(来自 parts/mr/setup.py)。

【问题讨论】:

标签: python mercurial buildout


【解决方案1】:

我发现解决此问题的唯一方法是向 buildout 添加额外路径:

[buildout]
parts = ... pyrtm ...
develop = . parts/pyrtm
eggs = pyrtm

extra-paths = parts/pyrtm/src
# or wherever your pyrtm folder 
# could as well be extra-paths = pyrtm/ 
# if you your code is on same path as buildout.cfg.

[pyrtm]
recipe = mercurialrecipe
repository = http://bitbucket.org/srid/pyrtm

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您正在使用 mercurial recipe 对要用作开发蛋的 mercurial recipe 进行 mercurial checkout.... 那里有一个巨大的循环依赖关系。

    Buildout 需要 mercurial 配方来运行“先生”部分。所以它从 pypi 中获取了配方。它还不知道配方会真正下载配方。

    【讨论】:

    • 我仅以mercurialrecipe 为例。这个问题是普遍存在的,其他软件包也会出现。无论如何,为了避免这种混淆,我修改了上面的示例代码。
    【解决方案3】:

    如果您可以签出/克隆存储库,那么您可以像往常一样开发 python 模块:

    [buildout]
    ...
    develop = src/Bar
    eggs = Bar
    

    【讨论】:

    • 对我不起作用。如果有帮助,我已经用 buildout.cfg 的部分内容更新了问题。
    • 如果我在相应部分下列出Bar egg(上面的示例中为mercurialrecipe),则 buildout 从 PyPI 下载它而不是获取本地副本。
    • 嗯...开发的东西应该可以解决这个问题。诡异的。我在这里遗漏了一些更精细的细节,我必须尝试一下。
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多