如何使用 twine 将新版本的项目上传到 PyPI?
Posted
技术标签:
【中文标题】如何使用 twine 将新版本的项目上传到 PyPI?【英文标题】:How to upload new versions of project to PyPI with twine? 【发布时间】:2019-01-31 15:15:21 【问题描述】:我已将我的 Python 包上传到 PyPI。 但是现在我制作了我的包的新版本,需要上传它。 我试图取得与第一次上传包时相同的进展。 但是给我这个错误:
HTTPError: 400 Client Error: File already exists. See https://pypi.org/help/#file-name-reuse for url: https://upload.pypi.org/legacy
现在,如何上传新版本没有任何错误?!
【问题讨论】:
我需要删除现存的./dist
来上传我的新版本
【参考方案1】:
您需要更改版本号。
【讨论】:
【参考方案2】:PyPI 不允许重复使用分发文件名(项目名称 + 版本号 + 分发类型)。
这可确保给定项目的给定版本的给定分发将始终解析为同一个文件,并且不会在某一天被项目维护者或恶意方偷偷更改(只能将其删除)。
您需要将版本号更改为您之前未上传到 PyPI 的版本号。
您没有提及您是如何上传分发的,但如果您使用的是twine
,那么您也有可能尝试重新上传之前上传的分发。要解决此问题,您可以这样做:
$ twine upload --skip-existing dist/*
【讨论】:
谢谢,救了我的命:) 哦,我明白了,我需要删除我文件夹中的旧dist....然后就没有这样的错误消息了。【参考方案3】:由于以下原因可能会出现该错误:
没有更改您在setup.py
中的版本
没有删除你之前的 dist 文件
解决方案:
更改setup.py
中的版本号。
再次运行安装文件。 python setup.py bdist_wheel
.
仅上传该 dist 文件或运行 twine(如果使用)。 twine upload --skip-existing dist/*
正如@dustin所说,同名的dist文件不能再次上传。
【讨论】:
【参考方案4】:在运行之前确保你的 dist 目录是空的
python setup.py sdist
【讨论】:
【参考方案5】:错误似乎源于命令:
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 会尝试上传在该 (dist) 文件夹中找到的所有版本。【参考方案6】:另一种没人提到的方法是提供明确的文件名:
twine upload --repository testpypi --skip-existing dist/myProject-0.1.9-py3-none-any.whl
与其他提议的解决方案相比,这具有优势,并且准确地说:
虽然更新版本号是 twine 上传包的要求,但这并不妨碍程序上传dist
文件夹中的所有内容,包括以前上传的版本。如果您移出旧版本也没关系,但我不确定可能的影响。
使用--skip-existing
选项解决了上述问题,但是所有文件都还在处理中,所以需要时间。
我确信有更有效的解决方案,但这对我来说已经足够简单了。
【讨论】:
以上是关于如何使用 twine 将新版本的项目上传到 PyPI?的主要内容,如果未能解决你的问题,请参考以下文章
使用Windows 10将Python包上传到Pypi的问题 - twine不被认为是内部或外部的推荐