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

Posted Xavier Jiezou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录 Poetry 发布包到 pypi 遇到的坑:No suitable keyring backends were found相关的知识,希望对你有一定的参考价值。

项目场景

使用 Poetry 开发一个 Python 项目。在本地可以正常使用 poetry build 构建包,然后使用 poetry publish 将包发布到 pypi 官网。但是当我将其部署到 GitHub Actions 时,可以正常构建包,但发布包时却遇到了如下问题。

问题描述

包构建成功了,发布到 pypi 时报错:

No suitable keyring backends were found


这是我配置工作流的代码:

- name: Publish to PyPI
        env:
          POETRY_PYPI_TOKEN_PYPI: $ secrets.PYPI_TOKEN 
        run: poetry publish

其中,PYPI_TOKEN 是从 pypi 官网申请的一个针对所有项目都能使用的密钥。

并且,我已经将其添加到了仓库设置中的密钥设置里面了。

原因分析

之前一个包,同样的配置,发布的时候是没有任何问题的,但现在新建的这个包却遇到了这个问题,就有点玄学了。然后我不使用 GitHub 的工作流,直接在本地发布的话是没有任何问题的。

简单分析一波:本地使用 poetry publish 发布包时提示我输入的是 pypi 注册时输入的账号和密码。GitHub 工作流发布包使用的是仓库的密钥,而且既然它报错的话,就说明是密钥没找到或者找到了但没使用。

GitHub 仓库密钥我已经配置了,它就在哪里,不可能找不到。再看一下报错信息:No suitable keyring backends were found。一开始,我以为报错信息是 UploadError HTTP Error 500,后来才发现方法找错了,UploadError 是由于前面的 keyring backends were found 错误引发的,不是根本性的错误。

poetry 的 Issue 中也有人谈论过这个问题。但给的解决方案我也没看太懂,下面是我自己研究出来的解决方案。

解决方案

既然使用 poetry publish 发布包到 pypi 有问题,那我们就用别的方法来发布包,换一个 Action:

- name: Publish to PyPI
  uses: ortega2247/pypi-upload-action@master
  with:
    user: XavierJiezou
    password: $ secrets.PYPI_PASSWORD 

这里的 user 是你在 pypi 注册时填写的用户名,然后 password 请在仓库中配置密钥,密钥名称为 PYPI_PASSWORD,密钥内容为你在注册 pypi 时填写的密码。

以上是关于记录 Poetry 发布包到 pypi 遇到的坑:No suitable keyring backends were found的主要内容,如果未能解决你的问题,请参考以下文章

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

Python 包管理工具 poetry(qbit)

使用 twine 上传自己的 python 包到 pypi

[Python]上传huanyuan包到pypi

在pypiserver部署网站遇到的坑

如何把一个 Python 项目发布到 PyPI 上指南教程 All In One