pip3 setup.py install_requires PEP 508 git URL for private repo

时间:2019-03-27 20:27:34

标签: python git pip setup.py

我正在尝试运行:

pip3 install -e .

在我的Python项目中,我有以下setup.py

from setuptools import setup

setup(
    name='mypackage',
    install_requires=[
        "anotherpackage@git+git@bitbucket.org:myorg/anotherpackage.git"
    ]
)

但是失败了:

error in mypackage setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Invalid URL given

我想我的URL格式是正确的,因为PEP 508不允许为ssh克隆URL指定git用户名。

具有git + ssh协议的PEP 508 URL的正确语法是什么(对于私有git存储库(在本例中为BitBucket托管),install_requires依赖)?指定特定分支,标记或sha的语法是什么?

更多上下文以避免XY问题

我有一个内部Python项目,该项目依赖于多个内部开发的Python包。我想避免在组织中托管自己的PIP存储库的必要,因此,我尝试直接使用git URL。我需要对git URL使用ssh协议,因为所有用户都已配置了他们的ssh密钥,要求所有用户在BitBuckets中配置其应用密码会很麻烦(我需要2FA,并且常规用户密码无效)

我已经尝试使用:

dependency_links

setup(
    name='mypackage',
    install_requires=[
        "anotherpackage==0.0.1"
    ],
    dependency_links=[
        "git+git@bitbucket.org:myorg/anotherpackage.git@0.0.1#egg=anotherpackage-0.0.1"
    ]
)

但是不推荐使用它们,pip3 install -e .将忽略它们。根据我发现的文档,应该改用PEP 508 URL。

requirements.txt文件,其中包含与install_requires个条目重复的条目

我有一个requirements.txt文件,

-e git+git@bitbucket.org:myorg/anotherpackage.git@0.0.1#egg=anotherpackage

,我使用pip3 install -r requirements.txt而不是pip3 install -e .。它可以工作,但是由于我必须同时保持setyp.pyrequirements.txt同步而并非最佳。

如果有其他推荐的解决方案,我想了解一下:)

1 个答案:

答案 0 :(得分:1)

检查pip源代码后,我发现专用BitBucket存储库的正确语法。

带有URL的软件包的一般形式是<package name>@<URI>,并且URI必须以<scheme>://开头。

所以我将其固定为:

anotherpackage@git+ssh://git@bitbucket.org:myorg/anotherpackage.git

然后我遇到了另一个错误-这次git命令(由pip调用)抱怨存储库URL ssh://git@bitbucket.org:myorg/anotherpackage.git

我检查了ssh:// URL格式的git文档,发现主机名和组织部分必须用/而不是:分开:

ssh://git@bitbucket.org/myorg/anotherpackage.git

此URL正常工作。我还从pip源代码中学到,可以通过附加@<rev-spec>来指定实际的修订/分支/标记,因此我可以在{{1 }}:

0.0.1

我唯一仍然遇到的问题是,当我更改修订版本并再次运行install_requires时,它无法检测到更改(即使使用anotherpackage@git+ssh://git@bitbucket.org:myorg/anotherpackage.git@0.0.1运行)。我必须手动卸载软件包(pip3 install -e .),然后再次运行--upgrade