Nis*_*ede 162 python pip ssl-certificate python-2.7
我正在尝试使用安装Python库pip,收到SSL错误:
~/projects/base ? pre-master± pip install xdict
Collecting xdict
Could not fetch URL https://pypi.python.org/simple/xdict/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping
Could not find a version that satisfies the requirement xdict (from versions: )
No matching distribution found for xdict
Run Code Online (Sandbox Code Playgroud)
点数版本:pip 9.0.1
我该如何解决这个错误?
Anu*_*pam 429
升级点如下:
curl https://bootstrap.pypa.io/get-pip.py | python
Run Code Online (Sandbox Code Playgroud)
注意:sudo python如果不在虚拟环境中,则可能需要使用上述内容.
(请注意,pip使用pipie进行pip install --upgrade pip升级也不会正确升级.这只是一个鸡与鸡蛋的问题.pip除非使用TLS> = 1.2,否则无法正常工作.)
正如在这个详细的答案中所提到的,这是由于最近对pip的TLS弃用.Python.org站点已停止支持 TLS版本1.0和1.1.
从Python状态页面:
已完成 - 滚动限制已完成,TLSv1.0和TLSv1.1已禁用.4月11日15:37 UTC
对于PyCharm(virtualenv)用户:
使用shell运行虚拟环境.(将"./venv/bin/activate"替换为您自己的路径)
source ./venv/bin/activate
Run Code Online (Sandbox Code Playgroud)运行升级
curl https://bootstrap.pypa.io/get-pip.py | python
Run Code Online (Sandbox Code Playgroud)重新启动PyCharm实例,并在Preference中检查Python解释器.
Ale*_* C. 25
但是,如果curl命令本身因错误而失败,或者"tlsv1 alert protocol version"即使在升级后仍然存在pip,则表示操作系统的底层OpenSSL库版本< 1.0.1或Python版本< 2.7.9(或< 3.4在Python 3中)不支持更新的TLS 1.2协议这pip需要连接到PyPI中,因为大约一年前.您可以在Python解释器中轻松检查它:
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8o 01 Jun 2010'
>>> ssl.PROTOCOL_TLSv1_2
AttributeError: 'module' object has no attribute 'PROTOCOL_TLSv1_2'
Run Code Online (Sandbox Code Playgroud)
的AttributeError(而不是预期的"5")是指你的Python STDLIB ssl模块,对旧的OpenSSL的lib编译,缺乏对TLSv1.2工作协议(即使OpenSSL库可以或可以在以后更新)的支持.
幸运的是,它可以在不升级Python(和整个系统)的情况下通过手动安装额外的Python包来解决 - Stackoverflow上提供了详细的逐步指南.
注意,
curl并pip和wget所有依赖于相同的OpenSSL lib中建立SSL连接(使用$ openssl version命令).libcurl支持TLS 1.2,因为curl版本为7.34,但是如果你有OpenSSL版本1.0.2(或更高版本),那么旧的curl版本应该能够连接.
PS
对于Python 3中,请使用python3和pip3无处不在(除非你是在一个VENV/virtualenv中),包括curl从命令上面:
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user
小智 9
关于@Anupam对OS X的回答导致我出现以下错误,无论我使用以下权限运行它:
由于EnvironmentError导致无法安装软件包:[Errno 13]权限被拒绝:...
最终工作的是从我的浏览器直接从PyPI下载更新的pip包(9.0.3) - https://pypi.org/simple/pip/,提取内容,然后在本地pip安装包:
pip install ./pip-9.0.3/
Run Code Online (Sandbox Code Playgroud)
这解决了我的[SSL: TLSV1_ALERT_PROTOCOL_VERSION]错误.
@Anupam的解决方案对我有用.但是,我必须使用sudo并指定我的虚拟Python环境的确切位置:
curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
Run Code Online (Sandbox Code Playgroud)
小智 6
要升级本地版本,我使用了一个轻微的变体:
curl https://bootstrap.pypa.io/get-pip.py | python - --user
Run Code Online (Sandbox Code Playgroud)
如果您按照此要点中的描述将pip和包保留在主目录下,则会出现此问题.
检查您的 TLS 版本:
python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"
Run Code Online (Sandbox Code Playgroud)
如果您的 TLS 版本低于 1.2,您必须升级它,因为 PyPI 存储库正处于弃用早期 TLS 的限制期。
来源 - 是时候升级您的 Python:TLS v1.2 将很快成为强制性要求
您可以使用以下命令升级 TLS 版本:
sudo apt-get update && sudo apt-get install openssl libssl-dev
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您的问题。祝你好运!
编辑:无论 TLS 版本如何,您都可以使用自己的私有 python 包存储库下载包。 私有 Python 包存储库
| 归档时间: |
|
| 查看次数: |
124274 次 |
| 最近记录: |