当试图上传一个python自定义包到我们的内部注册表时,它失败了,并出现以下错误。
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='custom-nexus.com’, port=443): Max retries exceeded with url: /repository/pypi-internal/ (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))
但是通过curl访问相同的url时可以正常工作。使用curl -v选项发现使用的ca-bundle位于/etc/pki/tls/certs/ca-bundle. crt
所以尝试在twine upload命令中使用--cert选项提供这个。但是它也不起作用,并以同样的错误失败。
twine upload --config-file .pypirc --cert /etc/pki/tls/certs/ca-bundle.crt -r pypi dist/*
使用的Python版本是3.6。请在下面找到库版本列表。
certifi==2020.4.5
setuptools==46.1.3
wheel==0.34.2
twine==3.1.1
pyOpenSSL==19.1.0
2条答案
按热度按时间50pmv0ei1#
由于某些原因,即使在使用--cert选项提供证书后,它对我也不起作用。可能是证书的一些问题。然后我遇到了下面的hack来跳过Python请求库中的SSL验证
Disable Python requests SSL validation for an imported module
(For任何人谁不知道,引擎盖下的TWINE也使用python请求库)
在此之后,我尝试了下面的命令,它工作!
j13ufse22#
我刚刚在another thread上发布了将
CURL_CA_BUNDLE
设置为空字符串似乎不再起作用;但是将它设置为.crt文件本身对我来说确实有效。当然,我有一个在浏览器中工作正常的证书,可能是通过curl
,就像OP示例中一样。