如何使用 Poetry 将 Python 包部署到 Gitlab 包注册表?

Posted

技术标签:

【中文标题】如何使用 Poetry 将 Python 包部署到 Gitlab 包注册表?【英文标题】:How to deploy Python packages to Gitlab Package Registry with Poetry? 【发布时间】:2021-01-13 20:22:39 【问题描述】:

我正在尝试设置 Poetry 以将包部署到我们的内部 Gitlab 包注册表。根据网上的其他消息来源,存储库 ID 应该是 https://gitlab.com/api/v4/projects/<project id>/packages/pypi,但无论我尝试什么,Poetry 都会返回

[上传错误] HTTP 错误 404:未找到

有人搞定了吗?

【问题讨论】:

【参考方案1】:

实际上我自己也搞定了,上面的网址是正确的。我的问题是我试图发布到一个组(使用组 id)而不是一个实际的项目(又名存储库)。

所以这里是如何做到的:

    将存储库添加到您的诗歌.toml

    [virtualenvs]
    in-project = true
    [repositories]
    [repositories.my-gitlab]
    url = "https://gitlab.com/api/v4/projects/<your project id>/packages/pypi"
    

    在 gitlab 中生成一个可以读写包存储库的令牌。

    发布包

    poetry publish --repository my-gitlab -u <token-username> -p <token-password>
    
    

【讨论】:

您可以使用https://gitlab.com/api/v4/projects/$env.CI_PROJECT_ID/packages/pypi 来避免硬编码项目ID。【参考方案2】:

如果您尝试从 GitLab CI 进行部署,GitLab 会自动创建一个用户和令牌组合,该组合可用于在用户 gitlab-ci-token$CI_JOB_TOKEN 变量中的密码下的 CI 上下文中进行身份验证。

所有你需要做的是诗歌特定的设置诗歌的配置值以知道包注册表存在,然后通过它进行身份验证。所有这些都可以在 CI 配置/脚本中完成。

  script:
    - poetry build
    - poetry config repositories.gitlab "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/packages/pypi"
    - poetry config http-basic.gitlab gitlab-ci-token "$CI_JOB_TOKEN"
    - poetry publish --repository gitlab

如果您从 GitLab CI 外部进行部署,则需要该访问令牌并提供上述脚本中使用的值。

【讨论】:

以上是关于如何使用 Poetry 将 Python 包部署到 Gitlab 包注册表?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python Poetry 进行依赖管理

使用 Python Poetry 进行依赖管理

记录 Poetry 发布包到 pypi 遇到的坑:No suitable keyring backends were found

Python 包管理工具 poetry(qbit)

python - Poetry介绍

记录初次使用 Python 的 Poetry 库遇到的一个坑(安装第三方包时卡住)