【发布时间】:2017-02-19 14:52:12
【问题描述】:
我正在尝试通过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 使用它):
- 从chrome,我转到https://pypi.pythong.org,点击URL旁边的锁,然后点击详细信息,查看证书,详细信息,复制到文件。这会生成一个 .CER 文件。
- 我使用SSL Converter 将 .CER 文件从 DER 格式转换为 PEM 格式。这创建了一个 .CRT 文件。
- 我以
twine upload <my_package> --cert <path to CRT file>运行 twine;这次 SSL 错误是SSLError: [SSL] PEM lib (_ssl.c:2846)。
然后我尝试通过修补c:\Python35\lib\ssl.py 来选择退出服务器证书验证,如Opting Out 中所述:我将_create_default_https_context = create_default_context 行替换为_create_default_https_context = _create_unverified_context。重新运行 twine 命令再次失败,出现原始 CERTIFICATE_VERIFY_FAILED 错误。
我对证书不是很熟悉,所以我现在不知道还有什么可以尝试的。
【问题讨论】:
标签: python certificate windows-firewall twine