我为我的雇主创建了一个私人套餐。由于我被禁止将其上传到 PyPI(它是专有的),因此我将其上传到我们私人 Gitlab 中心上我的项目的包索引中。我可以手动安装它:
$ pip install my-package --extra-index-url https://__token__:[email protected]/api/v4/projects/123456/packages/pypi/simple
现在我还希望 setuptools 在 setup() 的 install_requires 参数中列出时能够找到它。我试过:
setup(
install_requires=[
f"my-package @ https://__token__:{API_TOKEN}@gitlab.company-domain.com/api/v4/projects/123456/packages/pypi/simple",
...
],
...
pip install -e .
结果
ERROR: HTTP error 404 while getting https://__token__:****@gitlab.company-domain.com/api/v4/projects/123456/packages/pypi/simple
这与
不同my-package @ git+https://user:[email protected]/..../my-package.git
这可行,但我希望能够将其作为预构建的轮子下载。
我不确定这是 setuptools 问题还是 Gitlab 问题。 404 响应告诉我这可能是 gitlab 问题,但与 pip install CLI 命令一起使用时,相同的 URI 可以完美工作。
这个问题类似于将来自gitlab的包注册表和其他外部索引的python包直接放入setup.py依赖项,但我认为没有得到足够的回应。我在 discuss.python.org 上发布了同样的问题,但该讨论已经过时了,我想我可能会在这里得到更快的回复。
我还发现了对类似问题的此回复,这并不令人鼓舞。推荐Poetry或者Pipenv。我已经尝试了这两种方法,发现在解决依赖关系时,每种方法都非常慢,所以我又求助于 setuptools。
仅在
install_requires
中包含包名称。然后,在 pip 配置中配置(额外)索引 URL(环境变量或 pip.conf
/.pypirc
或 CLI 参数)。然后正常使用 pip install
就可以了。
例如:
在
setup.py
:
# ...
install_requires=[
'my-package-name',
# ...
],
# ...
然后安装命令(假设环境变量
API_TOKEN
存在):
GITLAB_INDEX="https://__token__:${API_TOKEN}@gitlab.company-domain.com/api/v4/projects/123456/packages/pypi/simple"
pip install --extra-index-url "${GITLAB_INDEX}" -e .
我的解决方案是不使用“GitLab包注册表”方法,而是使用简单的“存储库级别”方法:
dependencies = [
"my-package @ git+https://deploy-token-name:[email protected]/path-to-package-project/my-package.git",
]
您可能会在存储库设置中生成
deploy-token
。
此解决方案允许绕过任何与
extra-index-url
的交易。我团队中的任何人都可以在任何平台上安装我的软件包,无需额外配置 pip。