我正在尝试使用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
如何解决此错误?
答案 0 :(得分:414)
升级点数如下:
curl https://bootstrap.pypa.io/get-pip.py | python
注意:如果不在虚拟环境中,您可能需要使用上面的sudo python
。
(请注意,使用pip
升级pip
即pip install --upgrade pip
也无法正确升级。这只是一个鸡与蛋的问题。pip
除非使用TLS> = 1.2,否则不会工作。)
如this detailed answer中所述,这是由于最近对pip的TLS弃用。对于TLS版本1.0和1.1,Python.org站点有stopped support。
从Python状态页面:
已完成 - 滚动限制已完成,TLSv1.0和 TLSv1.1已被禁用。 4月11日,15:37 UTC
对于PyCharm(virtualenv)用户:
使用shell运行虚拟环境。 (替换" ./ venv / bin / activate"到你自己的路径)
source ./venv/bin/activate
运行升级
curl https://bootstrap.pypa.io/get-pip.py | python
重新启动PyCharm实例,并在 Preference 中检查您的Python解释器。
答案 1 :(得分:22)
但是如果curl
命令本身失败并出现错误,或者“tlsv1 alert protocol version”即使在升级pip
后仍然存在,则表示您的操作系统的基础OpenSSL库版本< ; 1.0.1
或Python版本< 2.7.9
(或Python 3中的< 3.4
)不支持pip
需要连接到PyPI的更新的TLS 1.2协议{{ 3}}。您可以在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 (以及整个系统) - 详细的分步指南是about a year ago。< / p>
注意,
curl
和pip
以及wget
都依赖于相同的OpenSSL lib来建立SSL连接(使用$ openssl version
命令)。 libcurl支持TLS 1.2,因为curl版本available here on Stackoverflow,但是旧的curl版本7.34能够连接如果你有OpenSSL版本1.0.2(或更高版本)。<强> P.S。强>
对于 Python 3 ,请在任何地方使用python3
和pip3
(除非您使用的是venv / virtualenv),包括来自should的curl
命令:
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user
答案 2 :(得分:9)
关于@ 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]
错误。
答案 3 :(得分:5)
@Anupam的解决方案对我有用。但是,我必须使用sudo
并指定我的虚拟Python环境的确切位置:
curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
答案 4 :(得分:5)
要升级本地版本,我使用了一个轻微的变体:
curl https://bootstrap.pypa.io/get-pip.py | python - --user
如果您按照this gist中的说明将pip和包保留在主目录下,则会出现此问题。
答案 5 :(得分:5)
以下解决方案对我有用:
brew install python2
它还将pip
升级到版本1.10.1
答案 6 :(得分:3)
检查您的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
答案 7 :(得分:2)
通过以下方式安装点子的答案:
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
答案 8 :(得分:2)
我也遇到了这个问题。潜在的问题是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。
答案 9 :(得分:2)
我尝试了所有现有修补程序,但对我不起作用
我通过在https://www.python.org/downloads/mac-osx/下载.pkg重新安装python 2.7(还将安装pip)
在安装后下载pkg对我有用
答案 10 :(得分:2)
这对我有用。在python之前添加sudo
curl https://bootstrap.pypa.io/get-pip.py |sudo python
答案 11 :(得分:2)
对于Python2 WIN10用户:
1。彻底卸载python,包括所有文件夹。
2。获取并安装最新的python-2.7.msi(版本2.7.15)
3。步骤2之后,您可能还会发现pip也已安装。
4。现在,如果尚未更改系统的环境,则可以立即使用pip安装软件包。“ tlsv1警报协议版本”将不会出现。
答案 12 :(得分:1)
我也在Windows10上遇到了这个问题,并尝试了所有答案,但没有解决我的问题。
C:\ python367 \ Scripts> pip安装Flask
收集烧瓶找不到满足以下条件的版本 需求烧瓶(来自版本:)找不到与之匹配的分布 烧瓶
之后,我发现pip配置文件已被修改。因此,我将pip.ini
设置为原始默认配置,重新运行pip命令,它对我有用!
我的解决方案摘要:
检查pip.ini(通常在路径C:\ProgramData\pip
下)已被修改;
如果在步骤1中为是,请尝试将其重置为默认配置。
答案 13 :(得分:1)
myenv:
python 2.7.14
点9.0.1
mac osx 10.9.4
mysolution:
从https://packaging.python.org/tutorials/installing-packages/手动下载python get-pip.py
运行python -m pip install --upgrade pip setuptools wheel
参考:
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]这将安装或升级点子。此外,如果尚未安装setuptools和wheel,则会安装它们。
确保点子,设置工具和滚轮是最新的
仅使用pip就可以从预构建的二进制归档文件进行安装,而最新的setuptools和wheel项目副本对于确保您也可以从源归档文件进行安装非常有用:
UPDATE overallCounts SET (total, totalC, totalL, iic, il) = (SELECT count(*) as total, sum(case when source=0 then 1 else 0 end) as totalC, sum(case when source=2 then 1 else 0 end) as totalL, case when source=0 then 1 else 0 end as iic, case when source=2 then 1 else 0 end as il FROM widgets WHERE joinId=1234) WHERE joinId=1234;
答案 14 :(得分:1)
这对我有用,我安装了最新版本的pip,然后安装了库( ciscoconfparse )。
升级pip:
curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
答案 15 :(得分:0)
或者只是所需的库不在仓库中。我是Python新手,关于升级pip的所有建议最终都被误导了。我只需要查看latest version that is supported by alpine linux,发现该库(在我的情况下为气流)停在某个旧版本上,然后将其重命名。是的,愚蠢的解决方案也是可能的:-)。
答案 16 :(得分:0)
对于所有python3
和pip3
用户来说:
curl https://bootstrap.pypa.io/get-pip.py | sudo python3
然后假设您要安装熊猫
pip3 install pandas --user