使用 setuptools 从私有 Gitlab 包存储库安装 Python 包

问题描述 投票:0回答:2

我为我的雇主创建了一个私人套餐。由于我被禁止将其上传到 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。

python setuptools gitlab-api
2个回答
1
投票

仅在

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 .

0
投票

我的解决方案是不使用“GitLab包注册表”方法,而是使用简单的“存储库级别”方法:

dependencies = [
    "my-package @ git+https://deploy-token-name:[email protected]/path-to-package-project/my-package.git",
]

您可能会在存储库设置中生成

deploy-token

此解决方案允许绕过任何与

extra-index-url
的交易。我团队中的任何人都可以在任何平台上安装我的软件包,无需额外配置 pip。

© www.soinside.com 2019 - 2024. All rights reserved.