无法安装 Python 包 [SSL: TLSV1_ALERT_PROTOCOL_VERSION]
Posted
技术标签:
【中文标题】无法安装 Python 包 [SSL: TLSV1_ALERT_PROTOCOL_VERSION]【英文标题】:Not able to install Python packages [SSL: TLSV1_ALERT_PROTOCOL_VERSION] 【发布时间】:2018-09-20 23:12:15 【问题描述】:我正在尝试使用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 版本:pip 9.0.1
如何解决这个错误?
【问题讨论】:
关注这个答案***.com/a/46808948/2419644 Unable to install python libraries的可能重复 确保您拥有正确的 openssl 版本。然后用 openssl 路径重新编译 Python。 确保您拥有正确的 openssl 版本。 【参考方案1】:通过pip安装的答案:
curl https://bootstrap.pypa.io/get-pip.py |sudo python
或
curl https://bootstrap.pypa.io/get-pip.py | python
对我不起作用,因为我不断收到错误:
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
ERROR: Could not find a version that satisfies the requirement pip (from versions: none)
ERROR: No matching distribution found for pip
我必须通过以下方式手动安装pip
:
-
转到
pip
分发website
下载tar.gz
版本
本地解压文件,cd
进入目录
运行python setup.py install
【讨论】:
【参考方案2】:对于所有python3
和pip3
用户:
curl https://bootstrap.pypa.io/get-pip.py | sudo python3
然后假设您要安装 pandas
pip3 install pandas --user
【讨论】:
【参考方案3】:或者只是所需的库不在 repo 中。我是 Python 新手,所有关于升级 pip 的建议最终都被证明是误导性的。我只需要查看 https://pypi.org/ ,发现库(在我的情况下为气流)在某个旧版本处停止,之后它被重命名。是的,这种愚蠢的解决方案也是可能的:-)。
【讨论】:
【参考方案4】:我也在我的 windows10 上遇到了这个问题,并尝试了所有答案,但没有解决我的问题。
C:\python367\Scripts>pip install Flask
Collecting Flask 找不到满足 要求 Flask(来自版本:)没有找到匹配的分布 烧瓶
之后,我发现 pip 配置文件被修改了。所以,我将pip.ini
设置为原来的默认配置,重新运行pip命令就可以了!
总结一下我的解决方案:
检查pip.ini(通常在C:\ProgramData\pip
路径下)是否被修改;
如果在步骤 1 中是,请尝试将其重置为默认配置。
【讨论】:
【参考方案5】:但是如果curl
命令本身失败并报错,或者"tlsv1 alert protocol version"在升级pip
后仍然存在,这意味着你的操作系统底层OpenSSL库版本1.0.1或 Python 版本2.7.9(或 Python 3 中的 3.4)不支持 pip
需要连接到 PyPI 的较新的 TLS 1.2 协议,因为 about a year ago。您可以在 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 库编译,缺乏对 TLSv1.2 协议的支持(即使可以或可以更新 openssl 库稍后)。
幸运的是,无需升级 Python(以及整个系统),通过手动安装额外的 Python 包即可解决 - 详细的分步指南是 available here on ***。
注意,
curl
和pip
和wget
都依赖同一个 OpenSSL 库来建立 SSL 连接(使用$ openssl version
命令)。 libcurl 自 curl 版本 7.34 起支持 TLS 1.2,但较旧的 curl 版本 should 能够连接 如果您有 OpenSSL 版本 1.0.2(或更高版本)。
附言 对于Python 3,请在任何地方使用
python3
和pip3
(除非您在venv/virtualenv 中),包括来自above 的curl
命令:$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user
【讨论】:
我还意识到我必须运行pip3
,而不仅仅是pip
— 使用命令-V
检查版本以确保您运行的是正确的点子!!【参考方案6】:
我的环境:
python 2.7.14
点 9.0.1
mac osx 10.9.4
我的解决方案:
从https://packaging.python.org/tutorials/installing-packages/手动下载get-pip.py
运行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
【讨论】:
【参考方案7】:检查您的 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
这应该可以解决您的问题。 祝你好运!
编辑: 无论 TLS 版本如何,您都可以使用自己的私有 python 包存储库下载包。 Private Python Package Repository
【讨论】:
【参考方案8】:升级pip如下:
curl https://bootstrap.pypa.io/get-pip.py | python
注意:如果不在虚拟环境中,您可能需要使用上述sudo python
。
(请注意,使用pip
即pip install --upgrade pip
升级pip
也不会正确升级它。这只是一个先有鸡还是先有蛋的问题。除非使用TLS >= 1.2,否则pip
将不起作用。)
正如this detailed answer 中所述,这是由于最近 TLS 弃用了 pip。 Python.org 网站有 stopped support 用于 TLS 版本 1.0 和 1.1。
从 Python 状态页面:
已完成 - 滚动限电已完成,TLSv1.0 和 TLSv1.1 已被禁用。世界标准时间 4 月 11 日 15:37
对于 PyCharm(虚拟环境)用户:
使用 shell 运行虚拟环境。 (把“./venv/bin/activate”换成你自己的路径)
source ./venv/bin/activate
运行升级
curl https://bootstrap.pypa.io/get-pip.py | python
重新启动您的 PyCharm 实例,并在 Preference 中检查您的 Python 解释器。
【讨论】:
这对我有用!由于权限被拒绝错误,我不得不在前面添加sudo
。谢谢!
需要 sudo 才能工作:curl https://bootstrap.pypa.io/get-pip.py | sudo python
@Simar @Wallace 是的,如果不在虚拟环境中,可能需要sudo
。现在在答案中也添加了这一点。
如果您不在虚拟环境中,您可能需要指定 python 二进制文件的路径,如下 Ilya 所述
在 OSX 上这对我来说效果更好curl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
【参考方案9】:
我也遇到了这个问题。根本问题是 Python 2.7 版本
如果您在 Windows 上运行,并且您(像我们一样)无法轻松地从不兼容的 2.7 版本升级,FWIW,我发现如果您从另一个最新版本的 Python 安装中复制以下文件(例如Python 2.7.15) 在另一台机器上安装:
Lib\ssl.py
libs\_ssl.lib
DLLs\_ssl.dll
它将有效地将您的 SSL 层“升级”到受支持的层;然后我们可以再次使用 pip,甚至可以升级 pip。
【讨论】:
【参考方案10】:我尝试了所有现有的修复程序,但对我不起作用
我通过在https://www.python.org/downloads/mac-osx/ 下载 .pkg 来重新安装 python 2.7(还将安装 pip)
安装下载 pkg 后为我工作
【讨论】:
【参考方案11】:对于 Python2 WIN10 用户:
1.彻底卸载python,包括所有文件夹。
2.获取并安装最新的python-2.7.msi (ver 2.7.15)
3.在第2步之后,你可能会发现pip已经安装了。
4.现在,如果你的系统'env没有改变,你现在可以使用pip安装包。不会出现“tlsv1警报协议版本”。
【讨论】:
【参考方案12】:这对我有用。在 python 之前添加 sudo
curl https://bootstrap.pypa.io/get-pip.py |sudo python
【讨论】:
【参考方案13】:这对我有用,我安装了最新版本的 pip,然后安装了库 (ciscoconfparse)。
升级点子:
curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/your user name/path to python/bin/python
【讨论】:
【参考方案14】:为了升级本地版本,我使用了一个轻微的变体:
curl https://bootstrap.pypa.io/get-pip.py | python - --user
如果您按照this gist 中的说明将 pip 和包保存在主目录下,则会出现此问题。
【讨论】:
【参考方案15】:遵循@Anupam 在 OS X 上的回答对我来说导致以下错误,无论我使用何种权限运行它:
由于 EnvironmentError 无法安装软件包:[Errno 13] Permission denied: ...
最终奏效的是直接从我的浏览器-https://pypi.org/simple/pip/ 从 PyPI 下载更新的 pip 包 (9.0.3),提取内容,然后在本地 pip 安装包:
pip install ./pip-9.0.3/
这修复了我的[SSL: TLSV1_ALERT_PROTOCOL_VERSION]
错误。
【讨论】:
【参考方案16】:@Anupam 的解决方案对我有用。但是,我必须使用 sudo
并指定我的虚拟 Python 环境的确切位置:
curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/your user name/path to python/bin/python
【讨论】:
【参考方案17】:以下解决方案对我有用:
brew install python2
它还将pip
升级到1.10.1版
【讨论】:
^ 这个是为我们这些不使用 OSX 上的默认 python 的人准备的。我想这个问题不是特定于 OSX 的,但无论如何,如果你没有运行 Linux,这可行 --- 除非你在系统安装的 Python 上编写内容。 这个对我有用,我在 OSX 上使用 python。我的情况我花了一周时间尝试安装任何 pip 包,但它失败了。我卸载了 pip,从那时起我什么都做不了,直到我得到这个为我安装 pip 的命令。谢谢!以上是关于无法安装 Python 包 [SSL: TLSV1_ALERT_PROTOCOL_VERSION]的主要内容,如果未能解决你的问题,请参考以下文章
Python 3.6 SSL - 使用TLSv1.0而不是TLSv1.2密码 - (2路身份验证和自签名证书)
mac下python环境pip报错[SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) 的解决方法
cURL 错误 (35):错误:14077458:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 无法识别的名称
centos7 apache配置ssl支持tlsv1.0 1.1 1.2
OpenSSL: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version