如何使用 twine 将新版本的项目上传到 PyPI?
How to upload new versions of project to PyPI with twine?
我已经将我的 Python 包上传到 PyPI。
但是现在我制作了我的包的新版本并且需要上传它。
我尝试取得与第一次上传包时相同的进展。
但给我这个错误:
HTTPError: 400 Client Error: File already exists. See https://pypi.org/help/#file-name-reuse for url: 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 upload --skip-existing dist/*
如@dustin所述,同名的dist文件无法再次上传。
确保 dist 目录在 运行
之前是空的
python setup.py sdist
错误似乎源于命令:
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/*
另一种没有提到的方法是提供明确的文件名:
twine upload --repository testpypi --skip-existing dist/myProject-0.1.9-py3-none-any.whl
与其他提议的解决方案相比,这具有优势,准确地说:
- 虽然更新版本号是 twine 上传包的必要条件,但这不会阻止程序上传
dist
文件夹中的所有内容,包括以前上传的版本。如果你移出旧版本没关系,但我不确定可能的影响。
- 使用
--skip-existing
选项解决了上面的问题,但是所有的文件还是要处理,所以需要时间。
我相信有更有效的解决方案,但这对我来说很简单。
我已经将我的 Python 包上传到 PyPI。 但是现在我制作了我的包的新版本并且需要上传它。 我尝试取得与第一次上传包时相同的进展。 但给我这个错误:
HTTPError: 400 Client Error: File already exists. See https://pypi.org/help/#file-name-reuse for url: 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 upload --skip-existing dist/*
如@dustin所述,同名的dist文件无法再次上传。
确保 dist 目录在 运行
之前是空的python setup.py sdist
错误似乎源于命令:
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/*
另一种没有提到的方法是提供明确的文件名:
twine upload --repository testpypi --skip-existing dist/myProject-0.1.9-py3-none-any.whl
与其他提议的解决方案相比,这具有优势,准确地说:
- 虽然更新版本号是 twine 上传包的必要条件,但这不会阻止程序上传
dist
文件夹中的所有内容,包括以前上传的版本。如果你移出旧版本没关系,但我不确定可能的影响。 - 使用
--skip-existing
选项解决了上面的问题,但是所有的文件还是要处理,所以需要时间。
我相信有更有效的解决方案,但这对我来说很简单。