54

我已将我的 Python 包上传到 PyPI。但现在我制作了我的包的新版本,需要上传它。我试图取得与第一次上传包时相同的进展。但给我这个错误:

HTTPError: 400 Client Error: File already exists. See https://pypi.org/help/#file-name-reuse for url: https://upload.pypi.org/legacy

现在,如何上传新版本没有任何错误?!

4

6 回答 6

116

PyPI 不允许重复使用分发文件名(项目名称 + 版本号 + 分发类型)。

这确保了给定项目的给定版本的给定发行版将始终解析为相同的文件,并且不能在某一天被项目维护者或恶意方偷偷更改(它只能被删除)。

您需要将版本号更改为您之前未上传到 PyPI 的版本号。

您没有提及如何上传分发,但如果您使用twine,也有可能您正在尝试重新上传以前上传的分发。要解决此问题,您可以执行以下操作:

$ twine upload --skip-existing dist/*
于 2018-09-01T18:20:18.337 回答
13

由于以下原因可能会出现该错误:

  • 没有改变你的版本setup.py
  • 没有删除你以前的 dist 文件

解决方案:

  • 更改中的版本号setup.py
  • 再次运行安装文件。python setup.py bdist_wheel.
  • 仅上传该 dist 文件或运行 twine(如果使用)。twine upload --skip-existing dist/*

正如@dustin 所说,不能再次上传同名的dist 文件。

于 2019-05-25T07:59:28.403 回答
2

您需要更改版本号。

于 2018-08-25T10:34:11.740 回答
2

该错误似乎源于以下命令:

twine upload --repository-url https://test.pypi.org/legacy/ dist/*
reusing the previous package version.

要解决此问题,请尝试以下操作:

twine upload --skip-existing --repository-url https://test.pypi.org/legacy/ 
dist/*
于 2020-08-04T15:50:38.063 回答
2

在运行之前确保你的dist目录是空的

python setup.py sdist
于 2020-07-22T16:34:53.857 回答
1

没有人提到的另一种方法是提供明确的文件名:

twine upload --repository testpypi --skip-existing dist/myProject-0.1.9-py3-none-any.whl

与其他提议的解决方案相比,这具有优势,并且准确地说:

  • 虽然更新版本号是 twine 上传包的要求,但这并不妨碍程序上传dist文件夹中的所有内容,包括以前上传的版本。如果您移出旧版本也没关系,但我不确定可能的影响。
  • using --skip-existingoption 解决了上面的问题,但是所有的文件都还在处理中,所以需要时间。

我确信有更有效的解决方案,但这对我来说很简单。

于 2021-07-26T10:40:06.330 回答