无法在PyPI.org更新maildiff包,上传返回200 OK但无效果
问题分析与解决方案
我于2015年提交了maildiff包,如今为其添加了PyPI的Markdown支持,并更新setup.py以适配pip 10。但现在遇到一个异常问题:执行以下命令时:
python setup.py sdist upload -r http://pypi.org Password: # 我输入密码 Submitting dist/maildiff-1.2.1.tar.gz to http://pypi.org Server response (200): OKPyPI上的包并未更新。更奇怪的是,即使输入错误密码,我仍会收到相同的提示:
Submitting dist/maildiff-1.2.1.tar.gz to http://pypi.org Server response (200): OK
问题根源
这是因为**python setup.py upload命令已经被PyPI官方弃用**了!旧上传方式的HTTP认证逻辑已经跟不上PyPI当前的安全要求,导致即使密码错误或请求无效,服务器也会返回200状态码,但实际上并没有完成包的上传操作。
解决步骤
你需要改用官方推荐的twine工具来上传包,步骤如下:
安装twine
先确保环境中安装了twine:pip install twine重新构建分发包(可选但推荐)
为确保上传的是最新版本的包,重新执行构建命令:python setup.py sdist使用twine上传包
用twine代替旧的upload命令,它会正确处理HTTPS和身份验证:twine upload dist/maildiff-1.2.1.tar.gz执行后twine会明确提示你输入PyPI用户名和密码,只有验证通过才会真正完成上传,不会再出现错密码也返回成功的情况。
检查仓库地址(重要)
注意:PyPI官方上传地址现在是https://upload.pypi.org/legacy/,你之前用的http://pypi.org会被重定向,但旧工具无法正确处理重定向后的上传流程。twine默认使用正确的HTTPS地址,无需额外指定-r参数,除非配置了自定义仓库。
这样应该就能成功更新PyPI上的maildiff包了!
内容的提问来源于stack exchange,提问作者Ciasto piekarz
相关产品推荐
相关产品推荐

