我已经将我的Python包上传到了PyPI。 但是现在我制作了新版本的软件包并需要上传它。 我试图取得与第一次上传包时相同的进度,但出现以下错误:
HTTPError: 400 客户端错误: 文件已存在。有关网址,请参阅 https://pypi.org/help/#file-name-reuse:https://upload.pypi.org/legacy
现在,如何上传新版本而没有任何错误?!
PyPI 不允许重用发行版文件名(项目名称 + 版本号 + 发行版类型(。
这确保了给定项目的给定版本的给定发行版将始终解析为同一文件,并且有一天不会被项目维护者或恶意方秘密更改(只能将其删除(。
您需要将版本号更改为以前未上传到 PyPI 的版本号。
您没有提到如何上传分配,但如果您使用的是twine
,则也可能尝试重新上传以前上传的分配。要解决此问题,您可以执行以下操作:
$ twine upload --skip-existing dist/*
由于以下原因可能会收到该错误:
- 没有在
setup.py
中更改您的版本 - 没有删除您以前的 dist 文件
溶液:
- 更改
setup.py
中的版本号。 - 再次运行安装文件。
python setup.py bdist_wheel
. - 仅上传该 dist 文件或运行 twine(如果使用(。
twine upload --skip-existing dist/*
如@dustin所述,同名dist文件无法再次上传。
您需要更改版本号。
该错误似乎源于以下命令:
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/*
在运行之前确保dist目录为空
python setup.py sdist
另一种没有人提到的方法是提供显式文件名:
twine upload --repository testpypi --skip-existing dist/myProject-0.1.9-py3-none-any.whl
与其他提出的解决方案相比,这具有优势,并且准确地说:
- 虽然更新版本号是 Twine 上传包的必要条件,但这并不妨碍程序上传
dist
文件夹的所有内容,包括以前上传的版本。如果您移出旧版本也没关系,但我不确定可能的影响。 - 使用
--skip-existing
选项解决了上述问题,但仍会处理所有文件,因此需要时间。
我相信有更有效的解决方案,但这对我来说很简单。
如果您有旧的dist目录,请在运行前将其删除
python setup.py bdist_wheel
原因:它包含旧版本文件,这在使用麻线上传到 PyPI 时会导致问题
我在下面得到了同样的错误:
HTTPError:400 来自 https://test.pypi.org/legacy/文件的错误请求已存在。有关详细信息,请参阅 https://test.pypi.org/help/#file-name-reuse。
当我尝试使用以下命令将包上传到 TestPyPI 时:
twine upload --repository testpypi dist/*
因此,我将version
从"0.0.1"
更改为"0.0.2"
或name
从"example_package_superkai"
更改为pyproject.toml
"example_package_hyperkai"
,如下所示,如下所示,然后删除了dist
文件夹:
# "pyproject.toml"
...
[project]
...
# version = "0.0.1"
version = "0.0.2"
...
或:
# "pyproject.toml"
...
[project]
# name = "example_package_superkai"
name = "example_package_hyperkai"
...
然后,我运行了以下命令:
python -m build
最后,我可以使用以下命令将包上传到TestPyPI
:
twine upload --repository testpypi dist/*