无法使用 Twine 上传到 PyPi

Posted

技术标签:

【中文标题】无法使用 Twine 上传到 PyPi【英文标题】:Can't upload to PyPi with Twine 【发布时间】:2018-03-18 07:35:37 【问题描述】:

我正在尝试使用以下命令将 python 包上传到 PyPi:

pip install -e .
python setup.py bdist_wheel --universal
twine upload --repository-url https://upload.pypi.org/legacy/ dist/*

我收到此错误:

HTTPError:403 客户端错误:身份验证信息无效或不存在。网址:https://upload.pypi.org/legacy/

我也尝试过以下命令:

twine upload dist/*
twine upload --repository-url pypi dist/*
twine upload --repository-url https://upload.pypi.org/legacy dist/*
python setup.py bdist_wheel --universal upload

使用位于同一目录中的 .pypirc 文件,我正在运行以下命令:

[distutils]
index-servers =
    pypi
    pypitest

[pypitest]
repository: https://testpypi.python.org/pypi/
username: <username>
password: <password>

[pypi]
repository: https://upload.pypi.org/legacy/
username: <username>
password: <password>

但我仍然被要求输入密码。 (也尝试过使用 pypitest,在那里创建了一个帐户后,但得到了同样的错误)

我也尝试过这样做,但删除了存储库行。

我要上传的包名曾经被占用,现在已经被删除了-https://pypi.python.org/pypi?name=&version=1.0.0&:action=display说找不到包

我使用的用户名和密码与我用于成功登录https://pypi.python.org/pypi?%3Aaction=login_form的用户名和密码相同

【问题讨论】:

Failed to upload packages to PyPI: 410 Gone的可能重复 ~/.pypirc 中删除repository 网址并再次尝试twine upload @phd 谢谢,但我已经尝试过了,正如我所说“我也尝试过这样做,但删除了存储库行。”在我的问题中 @phd - 不是重复的,因为从 Twine 返回的错误是不同的。另外,我已经尝试了建议的解决方案,但它们并没有解决我的问题 【参考方案1】:

编辑:如果您使用的是Windows,请检查my other suggestion

我使用的帐户似乎存在某种错误。以下步骤为我修复了它:

    创建一个新帐户 用twine upload dist/*的新账号上传包 将之前的帐户(您最初想用来上传的帐户)作为所有者添加到包中

另外请注意,测试 pypi 服务器 --repository-url https://test.pypi.org/legacy/ 需要从实时服务器 --repository-url https://upload.pypi.org/legacy/ 创建不同的帐户

【讨论】:

嗨!我按照你的回答,但是当我运行twine upload dist/* 时,我得到:HTTPError: 403 Forbidden from https://upload.pypi.org/legacy/ Invalid or non-existent authentication information. See https://pypi.org/help/#invalid-auth for more information.。你能告诉我有什么问题吗?谢谢。 @AnnZen 假设您检查了pypi.org/help/#invalid-auth 上的建议,您的原始帐户是否也遇到同样的错误?【参考方案2】:

我们输入密码的时候,密码没有错,我觉得是bug。

我直接使用-u作为用户名,-p作为密码,不使用控制台提供的字段(默认)。

我尝试在命令中运行它:

twine upload -u YOUR-USERNAME -p YOUR-PASSWORD --repository-url https://test.pypi.org/legacy/ dist/*

我在 Windows 上运行该命令:

它对我有用。希望这会有所帮助。

【讨论】:

这是非常危险的。任何有权访问您的命令行历史记录的人都可以看到您的密码。【参考方案3】:

PyPi 和 TestPyPi 是包索引的独立实例,它们具有独立的用户数据库。因此,必须创建单独的帐户。

也许你会很幸运,测试帐户名称不会被占用,你可以在测试中使用与生产中相同的命令。

(咕噜,咕噜,蟒蛇之禅,咕噜……)

【讨论】:

The Python Packaging Guide 澄清测试 PyPI 使用一个单独的帐户。【参考方案4】:

另一种可能是复制和粘贴不起作用 - 当我尝试在命令行中粘贴密码时,它显示了这个错误,但是当我手动输入它时它成功了。

编辑:看起来这是在 Windows 上粘贴的已知问题,请参阅https://pypi.org/help/#invalid-auth 上的建议:

如果您使用 Windows 并尝试将密码或令牌粘贴到命令提示符或 PowerShell 中,请注意 Ctrl-V 和 Shift+Insert 不起作用。相反,您可以使用窗口菜单中的“编辑 > 粘贴”,或在“属性”中启用“使用 Ctrl+Shift+C/V 作为复制/粘贴”。这是带有 Python 的 getpass 模块的 known issue。

【讨论】:

这就是我的情况!我让 chrome 为我生成了一个我无法输入的复杂密码,但是一旦我切换到可输入的密码,它就会按预期工作。【参考方案5】:

我在the pypi instructions for creating a new package 之后遇到了这个问题。该教程将带您上传到他们的测试服务器 (--repository-url https://test.pypi.org/legacy/),我总是得到 403。

对于他们实际的上传服务器,(--repository-url https://upload.pypi.org/legacy/) 我的凭据工作正常。很明显,他们的测试服务器和实时服务器之间的凭据存在一些差异,如果您遇到这个问题,这可能值得考虑。

【讨论】:

The Python Packaging Guide 澄清测试 PyPI 使用一个单独的帐户。 谢谢基南。我不知道它是丢失了还是我错过了,但这填补了部分难题。 (我的意思是,糟糕的用户体验!但是,嘿。)。【参考方案6】:

我遇到了同样的问题。对我有用的是 (1)添加新电子邮件,对其进行验证并将其设为主要。

【讨论】:

【参考方案7】:

手动输入密码。看起来很愚蠢,但它对我有用。

【讨论】:

这如何回答这个问题?提供更多细节。 此解决方案适用于以下错误....HTTPError: 403 Client Error: Invalid or non-existent authentication information... 如果您已经创建了包并使用 twine 上传包并收到此错误,手动输入 API 密钥作为密码可以解决问题。如果你想从头开始制作一个包。尝试遵循本指南。 medium.com/@faizanzahid09/… 荒谬,但这对我有用。我最终删除了旧令牌并制作了新令牌;这个让我无需手动输入即可复制/粘贴。【参考方案8】:

我在我的 ubuntu 20.04 机器上遇到了同样的错误。从这里我发现了一些东西

我使用的是 vs code 集成终端,它使用的是 zsh 而不是 bash

然后我使用我的系统终端,它对我来说很好。

还要确保您已正确配置 setup.py。

【讨论】:

【参考方案9】:

在 PyPI 和 TestPyPI 中拥有已验证帐户,分别具有凭据(usr1pwd1)和(usr2pwd2),~/.pypi 的内容:

[distutils]
index-servers=
    pypi
    testpypi

[pypi]
repository: https://upload.pypi.org/legacy/
username: usr1
password: pwd1

[testpypi]
repository: https://test.pypi.org/legacy/
username: usr2
password: pwd2

构建包后,为 TestPyPI 发布:

twine upload --repository testpypi dist/*

为 PyPI 发布:

twine upload --repository pypi dist/*

【讨论】:

【参考方案10】:

嗯,我觉得这很愚蠢,但这是我用来上传我的效率低下的解决方案。 在编辑器中输入类似这样的内容

__token__
yourTokenHere

然后使用 Ctrl + V 将其粘贴到用户名字段 另外,我发现 Windows + V 对获取剪贴板历史记录很有用。

【讨论】:

【参考方案11】:

我上传了一个项目,但是当我在 pypi 网站上查看时,它缺少 readme.md 文件。我不知道如何更新,所以我删除了项目,但接受一些警告。 最后,我添加了 readme.md 文件并尝试再次上传项目,但出现此错误。所以,我前往 pypi 网站并完全删除了我上传的最后一个项目。之后我就可以用同一个账号上传了。希望这有效

【讨论】:

你能详细说明你用于回答的命令吗? 我没有尝试任何新命令。我刚刚删除了 pypi.org 上的整个项目。删除项目后,前往 pypi.org 帐户的设置,然后您将在那里找到您删除的项目。也从那里删除,并尝试通过相同的命令上传包。就是这样。

以上是关于无法使用 Twine 上传到 PyPi的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 twine 将新版本的项目上传到 PyPI?

使用Windows 10将Python包上传到Pypi的问题 - twine不被认为是内部或外部的推荐

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

twine上传文件到pypi时为啥会弹出如下错误

发布本地的python程序到pypi服务器

无法将项目上传到 pypi