我正在尝试运行:
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的语法是什么?
我有一个内部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
同步而并非最佳。
如果有其他推荐的解决方案,我想了解一下:)
答案 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
。