让pip与git和github仓库一起使用

问题描述 投票:8回答:3

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

让他们叫:

  • 正在编写的应用程序: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/[email protected]#egg=app_b-0.1.1'
    ]
)

现在AppA正在通过每次推入构建Jenkins CI,由于抛出下一个错误,我失败了:

error: Download error for git+https://github.com/user/[email protected]: unknown url type: git+https

有趣的是,这仅发生在詹金斯身上,在我的计算机上可以正常工作。我尝试了github提供的其他两个SSH URL,甚至都不考虑下载。

现在,AppA包含在同样由詹金斯(Jenkins)建立的项目的需求文件中,因此无法通过pip install AppA pip install AppB手动安装依赖项,而是通过包含在requirements.txt中来自动安装依赖项。

有没有办法使ipp和git与github url一起工作?

任何帮助将不胜感激:)

提前感谢!

python django git github pip
3个回答
12
投票

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

setuptoolsdistribute都不了解这种URL,他们了解tarball / zip文件。

尝试指向Github的下载网址-通常是一个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


2
投票

来自pip documentation-

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+https替换git+git


0
投票

我在2019年遇到相同的问题,但由于不同的原因。 pip不再支持dependency_links(已通过pip> = 20.0.0测试)。就我而言,我使用install_requirements并定义了直接引用来解决此问题(请参阅pip手册直接引用)。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.