PyPI 400 上传错误

Posted

技术标签:

【中文标题】PyPI 400 上传错误【英文标题】:PyPI 400 upload error 【发布时间】:2015-04-26 20:06:43 【问题描述】:

我在 PyPI 中创建了一个名为 virtdc 的包。我做了一些更改并上传了 2 个不同的版本 0.1.0 和 0.1.1。现在我通过 PyPI Web 界面删除了 0.1.1 版本,并尝试使用相同的版本号再次上传。它给我的错误如下

...
Writing virtdc-0.1.2/setup.cfg
Creating tar archive
removing 'virtdc-0.1.2' (and everything under it)
running register
Registering virtdc to http://pypi.python.org/pypi
Server response (200): OK
running upload
Submitting dist/virtdc-0.1.2.tar.gz to http://pypi.python.org/pypi
Upload failed (400): This filename has previously been used, you should use a different version.

而且 PyPI 不允许一个包超过 4 个版本。所以我们必须删除一些版本并重新上传。

即使在此上传错误之后,第一个内容描述仍然可用。但下载链接不可用。你可以找到我的包裹here

有人可以帮我解决这个问题吗?谢谢

【问题讨论】:

请参阅comments.gmane.org/gmane.comp.python.distutils.devel/22739“我已将更改推送到 PyPI,在该位置不再可能重用文件名,并且尝试这样做会产生 400 错误” GitHub 上packaging-problems issue tracker 上的(相似或)相同的讨论。 -- TL;DR 直到今天还没有修复此 PyPI 行为。 上传bdist_wininstexe格式文件会遇到这个问题。 【参考方案1】:

这对我有用:

    删除根目录中的builddist<package name>.egg-info 文件夹。 在您的setup.py 文件中更改版本号。 再次创建分发。例如:python setup.py sdist bdist_wheel 再次上传分发。例如:twine upload dist/* 享受吧! :-)

【讨论】:

我们应该注意删除是至关重要的。运行setup.py不会覆盖。【参考方案2】:

我遇到了同样的问题,似乎没有直接的解决方法:

http://sourceforge.net/p/pypi/support-requests/468

但是,如果您想上传源代码分发,有一个不太难看的解决方法。您可以构建“zip”存档而不是“tar.gz”存档。您可以控制它,例如通过

python setup.py sdist --formats=zip

这样,您可以获得不同的文件名。然后你可以直接附加上传命令

python setup.py sdist --formats=zip upload

或者你可以在构建后使用twine 上传:

twine upload dist/*

【讨论】:

我还看到了发布.post1 版本的建议。这是一个符合 PEP440 的发布后版本,用于非常小的修复(比如修复你正在谈论的问题)。 正如@Pryce ***.com/a/32443905/1816995 指出的那样,这不再有效。

以上是关于PyPI 400 上传错误的主要内容,如果未能解决你的问题,请参考以下文章

上传到 PyPi 返回无效的 URI

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

上传 PyPi 包错误

400 多部分文件上传错误请求

尝试使用 MERN 上传图像时出现 400 错误请求错误

通过 REST 服务上传文件时如何解决 400() 错误