8

出于开发原因,我正在编写一个依赖于另一个托管在 github 存储库(从不在 pypi 中)的 python 应用程序。

让我们称呼他们:

  • 正在编写的应用程序:AppA
  • github中的应用程序:AppB

在 App A 中,setup.py 如下:

# coding=utf-8
import sys
try:
    from setuptools import setup, find_packages
except ImportError:
    import distribute_setup
    distribute_setup.use_setuptools()
    from setuptools import setup, find_packages

setup(
    ...
    install_requires=[
        # other requirements that install correctly
        'app_b==0.1.1'
    ],
    dependency_links=[
        'git+https://github.com/user/app_b.git@0.1.1#egg=app_b-0.1.1'
    ]
)

现在每次推送AppA都在构建,Jenkins CI但由于引发了下一个错误,所以我失败了:

error: Download error for git+https://github.com/user/app_b.git@0.1.1: unknown url type: git+https

有趣的是,这只发生在 Jenkins 中,它在我的电脑上完美运行。我尝试了 github 提供的其他两个 SSH url,甚至都没有考虑下载。

现在,AppA 包含在同样由 Jenkins 构建的项目的需求文件中,因此手动安装依赖pip install AppA pip install AppB项不是一种选择,依赖项会通过包含在requirements.txt.

有没有办法让 pip 和 git 与 github url 一起工作?

任何帮助将不胜感激:)

提前致谢!

4

3 回答 3

12

问题不在于pip,在于setuptools。负责setup()调用的是setuptools包(setuptools 或分发项目)。

既不也不setuptools了解distribute这种网址,他们了解 tarballs/zip 文件。

尝试指向 Github 的下载 url - 通常是一个 zip 文件。

您的dependency_links条目可能如下所示:

dependency_links=[
    'https://github.com/user/app_b/archive/0.1.1.zip#egg=app_b-0.1.1'
]

有关更多信息,请查看http://peak.telecommunity.com/DevCenter/setuptools#dependencies-that-aren-t-in-pypi

于 2013-02-18T01:11:47.910 回答
2

来自pip 文档-

pip currently supports cloning over git, git+http and git+ssh:

git+git://git.myproject.org/MyProject#egg=MyProject
git+http://git.myproject.org/MyProject#egg=MyProject
git+ssh://git.myproject.org/MyProject#egg=MyProject

尝试替换git+httpsgit+git.

于 2013-02-06T20:18:32.227 回答
0

我在 2019 年遇到了同样的问题,但由于不同的原因。pip 不再支持依赖链接(使用 pip>=20.0.0 测试)。对于我的情况,我使用install_requirements解决了这个问题并定义了一个直接引用(参见 pip manual direct reference)。

...
install_requirements = [
    <dependencyname> @ git+<url of dependency repository>@<branchname or tag>
]

我在https://gitlab.rhrk.uni-kl.de/scheliga/thepackage创建了一个名为thepackage的公共示例存储库以获取更多详细信息。

于 2020-02-09T23:22:09.417 回答