PyPI 400 上传错误

问题描述 投票:0回答:3

我在 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 个版本。所以我们必须删除一些版本并重新上传。

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

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

python-2.7 version packaging pypi
3个回答
18
投票

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

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

16
投票

这对我有用:

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

0
投票

我有一个类似的问题,但对于二进制包。二进制包的修复方法是将构建标签附加到版本号,例如将

mypkg-1.2.3-cp310-cp310-win_amd64.whl
重命名为
mypkg-1.2.3-1-cp310-cp310-win_amd64.whl
。此行为记录在 https://peps.python.org/pep-0427/#file-name-convention:

构建标签: 可选的内部版本号。必须以数字开头。如果两个轮文件名在所有其他方面(即名称、版本和其他标签)相同,则充当平局决胜局。如果未指定,则排序为空元组,否则排序为双项元组,第一项为 int 形式的初始数字,第二项为 str 形式的标记的其余部分。

这比在另一条评论中提到的附加

.post1
更好,因为
pip
认为这是不同的版本号,因此用户必须更改他们的
requirements.txt
等,这对我来说是不可接受的。然而,追加
-1
会被
pip
视为相同版本。

此解决方案可能不适用于源发行版,因为它们没有像二进制文件那样的“构建”。所以这可能不能完全回答OP,但由于在寻找二进制文件的答案时经常出现这个问题,我认为值得在这里发布。

© www.soinside.com 2019 - 2024. All rights reserved.