命令行上传时如何覆盖pypi包?

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

我想自动化上传过程错误,在某些情况下

python setup.py upload
会失败,因为pypi服务器已经上传了保存版本。

我如何强制它从脚本上传(我知道我可以使用网络界面删除旧的变体)。

distutils pypi distutils2
3个回答
43
投票

一个迟来的答案,但是:似乎每个人都同意你不能覆盖现有的 pypi 上传,或者在删除损坏的版本后重新上传固定版本。然而,这似乎实际上是可能的并且得到官方支持:“内部版本号”是一个没有人使用过或没有人记得它们存在的功能,但这似乎有效,至少对我来说。

诀窍是按照以下模式重命名文件:

mypackage-0.31.0-py2.py3-none-any.whl
mypackage-0.31.0-1-py2.py3-none-any.whl
mypackage-0.31.0-2-py2.py3-none-any.whl

“-1”或“-2”是内部版本号。如果 pip 找到同一版本的所有这些文件,它将选择具有最高内部版本号的文件。如果它发现具有非零构建号的单个文件,它似乎也可以工作,因此您可以在删除原始文件后使用它。

(这在https://www.python.org/dev/peps/pep-0427/#file-name-convention的文档中很快就提到了,但如果没有 Daniel Holth 的指点,我不会猜到它的用途告诉我。谢谢丹尼尔!)

我不知道为什么互联网上有这么多人相信这是不可能的。我自己昨天才知道这件事,并认为我应该尝试传递这些信息。

在此处插入有关不要滥用该功能的常见警告。我认为您应该使用此功能的一个典型示例是在其中一个轮子制造不良之后,您需要用来自相同来源的正确制造的轮子替换它


8
投票

这是一个实际的答案,不仅仅是我在评论中添加更多的武断。找到这个话题:

https://www.reddit.com/r/Python/comments/35xr2q/howto_overwrite_package_when_reupload_to_pypi/

指的是这个:

http://comments.gmane.org/gmane.comp.python.distutils.devel/22739

说做不到。

另请注意 reddit 线程中有关阅读 semver.org 并增加补丁的微型版本的评论。


0
投票

您可以使用此命令覆盖版本

twine upload --skip-existing dist/*

这将跳过现有发行版并上传更新的发行版。

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