无法使用 Twine 上传到 PyPi

Can't upload to PyPi with Twine

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

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

我收到这个错误:

HTTPError: 403 Client Error: Invalid or non-existent authentication information. for url: 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

时使用的用户名和密码相同

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

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

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

另请注意,测试 pypi 服务器 --repository-url https://test.pypi.org/legacy/,需要从实时服务器 --repository-url https://upload.pypi.org/legacy/

创建一个不同的帐户

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

编辑:看起来这是在 Windows 上粘贴的一个已知问题,请参阅 [=11 上的建议=]:

If you're using Windows and trying to paste your password or token in the Command Prompt or PowerShell, note that Ctrl-V and Shift+Insert won't work. Instead, you can use "Edit > Paste" from the window menu, or enable "Use Ctrl+Shift+C/V as Copy/Paste" in "Properties". This is a known issue with Python's getpass module.

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

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

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

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

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

(牢骚,牢骚,python,牢骚....)

当我们输入密码时,密码没有错,我认为是一个错误。

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

我尝试在命令中运行这个:

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

我 运行 windows 上的命令:

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

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

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

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

然后我使用我的系统终端,它对我来说工作正常。

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

在 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/*

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

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

__token__
yourTokenHere

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