我正在尝试通过将 Python 文件上传到 PyPi,twine upload <file>
但出现 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 答案(即导出 twine 试图验证的证书——大概是 pypi.python.org 的证书——然后告诉 twine 使用它):
- 我从 chrome 转到https://pypi.pythong.org,单击 URL 旁边的锁,然后单击详细信息、查看证书、详细信息、复制到文件。这会生成一个 .CER 文件。
- 我使用SSL 转换器将 .CER 文件从 DER 格式转换为 PEM 格式。这创建了一个 .CRT 文件。
- 我把麻绳当作
twine upload <my_package> --cert <path to CRT file>
; 这次 SSL 错误是SSLError: [SSL] PEM lib (_ssl.c:2846)
.
然后我尝试按照选择退出中c:\Python35\lib\ssl.py
所述通过修补来选择退出服务器证书验证:我将行替换_create_default_https_context = create_default_context
为_create_default_https_context = _create_unverified_context
. 重新运行twine
命令再次失败,出现原始 CERTIFICATE_VERIFY_FAILED 错误。
我对证书不是很熟悉,所以我现在不知道还有什么可以尝试的。