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

Pio*_*dyl 7 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"
    ]
)
Run Code Online (Sandbox Code Playgroud)

但是它失败了:

error in mypackage setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Invalid URL given
Run Code Online (Sandbox Code Playgroud)

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

带有git + ssh协议的PEP 508 URL与install_requires私有git存储库(在本例中为BitBucket托管)相关的正确语法是什么?指定特定分支,标记或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"
    ]
)
Run Code Online (Sandbox Code Playgroud)

但是它们已被弃用,并且被忽略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
Run Code Online (Sandbox Code Playgroud)

我用pip3 install -r requirements.txt代替pip3 install -e .。它可以工作,但由于我必须保持两者setyp.py并保持requirements.txt同步而不理想。

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

Pio*_*dyl 5

在检查了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

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

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

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

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

我唯一仍然遇到的问题是,当我更改修订版本并pip3 install -e .再次运行时,它不会检测到更改(即使使用来运行--upgrade)。我必须手动卸载软件包(pip3 uninstall anotherpackage),然后pip3 install -e .再次运行。

  • @piotrek-bzdyl,谢谢你。我认为这可行,但最终从 pypi 或缓存获取包,而不是从 github 获取它: `Collecting mkdocs-git-committers-plugin@ git+ssh://git@github.com:ojacques/mkdocs-git -committers-plugin.git(来自mkdocs-dxc==0.2.0)``下载https://files.pythonhosted.org/packages/45/59/28729f789f2e74666277e40f953e22294bc3076ebf53137b93af65592874/mkdocs-git-committers-plugin-0。 1.8. tar.gz` 你有同样的经历吗? (2认同)