【发布时间】:2019-03-27 20:27:33
【问题描述】:
我正在尝试运行:
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 存储库(在本例中托管在 BitBucket)的 install_requires 依赖项,使用 git+ssh 协议的 PEP 508 URL 的正确语法是什么?指定特定分支、标签或 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.py 和 requirements.txt 同步。
如果我的问题有任何其他推荐的解决方案,我想了解它:)
【问题讨论】:
-
我对 Python 打包不是很熟悉,但对 Git 很熟悉。您完全确定您的 URL 中的
git+git@bitbucket.org部分吗?我希望@是://,表示协议:git+git://bitbucket.org/...(我也对anotherpackage@前缀感到困惑,但现在我假设它来自 PEP 508,即使我快速浏览无法在 PEP 本身中找到明确的解释。) -
谢谢,是的,我知道根据 PEP508 应该是
://,我试过了,但它也失败了。无论如何,我深入研究了 pip 源代码并弄清楚了。让我添加一个答案。