我正在尝试使用pip
安装Python库,收到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
点数版本:pip 9.0.1
我该如何解决这个错误?
升级点如下:
curl https://bootstrap.pypa.io/get-pip.py | python
注意:如果不在虚拟环境中,您可能需要使用上面的sudo python
。
(请注意,使用pip
升级pip
即pip install --upgrade pip
也不会正确升级。这只是一个鸡与蛋的问题。除非使用TLS> = 1.2,否则pip
将无效。)
正如在this detailed answer中所提到的,这是由于最近TIP对TIP的弃用。对于TLS版本1.0和1.1,Python.org站点都有stopped support。
从Python状态页面:
已完成 - 滚动限制已完成,TLSv1.0和TLSv1.1已禁用。 4月11日15:37 UTC
对于PyCharm(virtualenv)用户:
source ./venv/bin/activate
curl https://bootstrap.pypa.io/get-pip.py | python
我尝试了所有现有的修复程序而不是为我工作
我通过在https://www.python.org/downloads/mac-osx/下载.pkg重新安装python 2.7(也将安装pip)
安装后下载pkg为我工作
我也遇到了这个问题。根本问题是Python 2.7版本<2.7.9中的ssl库不再与pip机制兼容。
如果你在Windows上运行,并且你(像我们这样)无法从不兼容的2.7版本FWIW轻松升级,我发现如果从另一个最新版本的Python(例如Python 2.7)中复制以下文件。 15)在另一台机器上进行安装:
Lib\ssl.py
libs\_ssl.lib
DLLs\_ssl.dll
它会有效地将您的SSL层“升级”为支持的层;然后我们再次使用pip,甚至升级pip。
这对我有用,我安装了最新版本的pip,然后安装了库(ciscoconfparse)。
升级点数:
curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
myenv:
python 2.7.14
点9.0.1
mac osx 10.9.4
mysolution:
get-pip.py
手动下载https://packaging.python.org/tutorials/installing-packages/python get-pip.py
裁判:
https://github.com/pypa/warehouse/issues/3293#issuecomment-378468534
https://packaging.python.org/tutorials/installing-packages/
安全下载get-pip.py [1]
运行python get-pip.py。 [2]这将安装或升级pip。此外,如果它们尚未安装,它将安装setuptools和wheel。
确保pip,setuptools和wheel是最新的
虽然单独使用pip足以从预先构建的二进制存档进行安装,但setuptools和wheel项目的最新副本对于确保您也可以从源存档进行安装非常有用:
python -m pip install --upgrade pip setuptools wheel
我也在我的windows10上遇到了这个问题并尝试了所有的答案,但没有解决我的问题。
C:\ python367 \ Scripts> pip install Flask
收集Flask无法找到满足要求的版本Flask(来自版本:)没有找到Flask的匹配分布
之后,我发现pip配置文件已被修改。所以,我将pip.ini
设置为原始默认配置,重新运行pip命令,它对我有用!
总结我的解决方案:
C:\ProgramData\pip
下)已被修改;或者只是所需的库不在repo中。我是Python新手,关于升级pip的所有建议最终都显示为误导。我只是想看看https://pypi.org/,发现图书馆(在我的情况下气流)停在一些旧版本,之后它被重命名。是的,也可能是愚蠢的解决方案:-)。
但是如果curl
命令本身失败并出现错误,或者即使在升级pip
后仍然存在“tlsv1 alert protocol version”,则表示操作系统的基础OpenSSL库版本<1.0.1
或Python版本<2.7.9
(或Python 3中的<3.4
)不支持自pip
以来about a year ago需要连接到PyPI的更新的TLS 1.2协议。您可以在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'
AttributeError
(而不是预期的'5')意味着你的Python stdlib ssl
模块,针对旧的openssl lib编译,缺乏对TLSv1.2协议的支持(即使openssl库可以或稍后可以更新)。
幸运的是,它可以在不升级Python(以及整个系统)的情况下通过手动安装额外的Python包来解决 - 详细的分步指南是available here on Stackoverflow。
注意,
curl
和pip
以及wget
都依赖于相同的OpenSSL lib来建立SSL连接(使用$ openssl version
命令)。 libcurl支持TLS 1.2,因为curl版本是7.34,但是如果你有OpenSSL版本1.0.2(或更高版本),那么旧的curl版本should能够连接。
附: 对于Python 3,请在任何地方使用
python3
和pip3
(除非你在venv / virtualenv中),包括来自curl
的above命令:$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user
关于@Anupam对OS X的回答导致我出现以下错误,无论我使用以下权限运行它:
由于EnvironmentError导致无法安装软件包:[Errno 13]权限被拒绝:...
最终工作的是从我的浏览器直接从PyPI下载更新的pip包(9.0.3) - https://pypi.org/simple/pip/,提取内容,然后在本地pip安装包:
pip install ./pip-9.0.3/
这修复了我的[SSL: TLSV1_ALERT_PROTOCOL_VERSION]
错误。
以下解决方案适合我:
brew install python2
它还将pip
升级到版本1.10.1
@Anupam的解决方案对我有用。但是,我不得不使用sudo
并指定我的虚拟Python环境的确切位置:
curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
要升级本地版本,我使用了一个轻微的变体:
curl https://bootstrap.pypa.io/get-pip.py | python - --user
如果您将pip和包保存在主目录下,如this gist中所述,则会出现此问题。
检查您的TLS版本:
python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"
如果您的TLS版本低于1.2,则必须升级它,因为PyPI存储库处于早期TLS的弃用期。
来源 - Time To Upgrade Your Python: TLS v1.2 Will Soon Be Mandatory
您可以使用以下命令升级TLS版本:
sudo apt-get update && sudo apt-get install openssl libssl-dev
这应该可以解决您的问题。祝好运!
编辑:您可以使用自己的私有python包存储库下载包,无论TLS版本如何。 Private Python Package Repository
这对我有用。在python之前添加sudo
curl https://bootstrap.pypa.io/get-pip.py |sudo python
对于Python2 WIN10用户:
1.彻底卸载python,包含所有文件夹。
2.获取并安装最新的python-2.7.msi(版本2.7.15)
3.在第2步之后,您可能会发现已经安装了pip。
4.现在,如果您的系统没有更改,您可以使用pip立即安装软件包。“tlsv1警报协议版本”将不会出现。