我正在尝试通过twine upload <file>
将Python文件上传到PyPi,但我收到了SSL错误:
C:\pypubsub>twine upload dist\PyPubSub-4.0.0rc1-py3-none-any.whl
Uploading distributions to https://upload.pypi.org/legacy/
Uploading PyPubSub-4.0.0rc1-py3-none-any.whl
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)
使用SSL的其他Python脚本也存在同样的问题,例如
python setup.py bdist_wheel upload <my_package>
pip install <any_package>
;但是我可以在任何--trusted-host pypi.python.org
命令中添加pip install
,并且依赖项的安装和下载将成功这种情况发生在我公司的笔记本电脑上,无论是在家还是工作,但在我的笔记本电脑上却不会发生。
为了解决这个问题,我基本上尝试了SO answer to similar problem(即导出twine试图验证的证书 - 可能是pypi.python.org的证书 - 然后告诉twine使用它):
twine upload <my_package> --cert <path to CRT file>
来缠绕;这次SSL错误是SSLError: [SSL] PEM lib (_ssl.c:2846)
。 然后我尝试按照Opting Out中的说明修补c:\Python35\lib\ssl.py
选择退出服务器证书验证:我将行_create_default_https_context = create_default_context
替换为_create_default_https_context = _create_unverified_context
。使用原始CERTIFICATE_VERIFY_FAILED错误重新运行twine
命令失败。
我不是那么熟悉证书,所以我现在还有什么可尝试的。
答案 0 :(得分:1)
您可以传递--cert
标志,告诉twine
使用哪个证书。
twine upload dist\PyPubSub-4.0.0rc1-py3-none-any.whl --cert <path-to-.pem-file>
要将.cer
转换为.pem
文件,请执行以下操作。
openssl x509 -inform der -in certificate.cer -out certificate.pem
--cert
标志对于使用自定义ssl证书的人来说至关重要。如果您使用的是公司网络,则上述修复程序应该将您排除在外。向管理员询问ssl证书:)