我是Python的新手,并试图> pip install linkchecker
在Windows 7上.一些说明:
无论封装,pip安装都失败了.例如,> pip install scrapy
也会导致SSL错误.
Python 3.4.1的Vanilla安装包括pip 1.5.6.我尝试做的第一件事是安装linkchecker.Python 2.7已经安装,它随ArcGIS一起提供.python
而pip
直到我安装3.4.1中不具备的命令行.
> pip search linkchecker
作品.也许这是因为pip搜索不会验证网站的SSL证书.
我在公司网络中,但我们没有通过代理来访问互联网.
每台公司计算机(包括我的计算机)都有一个受信任的根证书颁发机构,其使用原因有多种,包括支持监控TLS流量到https://google.com.不确定这是否与它有关.
以下是运行后我的pip.log的内容pip install linkchecker
:
Downloading/unpacking linkchecker Getting page https://pypi.python.org/simple/linkchecker/ Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598) Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker Getting page https://pypi.python.org/simple/ Could not fetch URL https://pypi.python.org/simple/: connection error: HTTPSConnectionPool(host='pypi.python.org', port=443): Max retries exceeded with url: /simple/ (Caused by: Request-sent) Will skip URL https://pypi.python.org/simple/ when looking for download links for linkchecker Cannot fetch index base URL https://pypi.python.org/simple/ URLs to search for versions for linkchecker: * https://pypi.python.org/simple/linkchecker/ Getting page https://pypi.python.org/simple/linkchecker/ Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598) Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker Could not find any downloads that satisfy the requirement linkchecker Cleaning up... Removing temporary dir C:\Users\jcook\AppData\Local\Temp\pip_build_jcook... No distributions at all found for linkchecker Exception information: Traceback (most recent call last): File "C:\Python34\lib\site-packages\pip\basecommand.py", line 122, in main status = self.run(options, args) File "C:\Python34\lib\site-packages\pip\commands\install.py", line 278, in run requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) File "C:\Python34\lib\site-packages\pip\req.py", line 1177, in prepare_files url = finder.find_requirement(req_to_install, upgrade=self.upgrade) File "C:\Python34\lib\site-packages\pip\index.py", line 277, in find_requirement raise DistributionNotFound('No distributions at all found for %s' % req) pip.exceptions.DistributionNotFound: No distributions at all found for linkchecker
Vaulstein.. 566
您可以通过设置pypi.org
和files.pythonhosted.org
作为可信主机来忽略SSL错误.
$ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org
注意:在2018年4月的某个时间,Python Package Index已迁移pypi.python.org
到pypi.org
.这意味着使用旧域的"trusted-host"命令不再起作用.
自从pip 10.0发布以来,你应该能够通过pip
自我升级来永久修复它:
$ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org pip setuptools
或者只是重新安装它以获得最新版本:
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
(...然后get-pip.py
使用相关的Python解释器运行).
pip install
应该在此之后工作.如果没有,那么您将需要做更多,如下所述.
您可能希望将可信主机和代理添加到配置文件中.
pip.ini
(Windows)或pip.conf
(unix)
[global] trusted-host = pypi.python.org pypi.org files.pythonhosted.org
替代解决方案(不太安全)
大多数答案可能会带来安全问题.
有助于轻松安装大多数python包的两个解决方法是:
使用easy_install:如果你真的很懒,不想浪费太多时间,请使用easy_install
.请注意,找不到某些包或会出现小错误.
使用Wheel:下载python包的Wheel并使用pip命令pip install wheel_package_name.whl
安装包.
是不是使用HTTP版本(然后甚至信任它)也存在安全风险? (12认同)
太棒了,谢谢!可信主机似乎已足够,即.`pip install --trusted-host pypi.python.org pypi_package`.使用`--verbose`表示没有`--trusted-host`,HTTPS连接失败,而使用`--trusted-host`尝试(而不是HTTP)相同的HTTPS连接,但它成功. (11认同)
你的更新让我有所作为.在我的情况下,企业防火墙将自身插入SSL连接的可信主机.我认为代理设置错误,但添加详细显示问题是SSL.index-url更改解决了这个问题. (7认同)
它对我不起作用.在macbookpro上运行mac os high sierra 15"Python 2.7 pip 9.0.1我试过这两个:sudo -H pip install --trusted-host pypi.python.org numpy和sudo pip install --trusted-host pypi.python.org numpy它总是给我同样的错误:"确认ssl证书时出现问题:[SSL:TLSV1_ALERT_PROTOCOL_VERSION] tlsv1警报协议版本(_ssl.c:661) - 跳过无法找到满足要求的版本" (7认同)
你可以把它缩短为忽略--index-url参数,尝试这个命令也应该没问题:`pip install --trusted-host pypi.python.org pythonPackage` (3认同)
在CentOS 7.4上,我不得不将所有以下主机添加为受信任的,因为pypi.python.org请求显然会导致对其他两个请求的访问: - keep-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org (2认同)
`pip install --trusted-host pypi.python.org --trusted-host pypi.org
Steve Tauber.. 113
您可以使用此参数指定证书:
pip --cert /etc/ssl/certs/FOO_Root_CA.pem install linkchecker
请参阅:文档»参考指南»pip
如果指定您公司的根证书不起作用,则cURL可能会起作用:http://curl.haxx.se/ca/cacert.pem
您必须使用PEM文件而不是CRT文件.如果你有一个CRT文件,你需要将文件转换为PEM.评论中有报告说这现在适用于CRT文件,但我还没有验证.
另请检查:SSL证书验证.
我使用easy_install安装了pip 1.2.1并升级到最新版本的pip(当时为6.0.7),它可以在我的情况下安装软件包.
easy_install pip==1.2.1 pip install --upgrade pip
使用的答案
pip install --trusted-host pypi.python.org <package>
工作.但是你必须检查是否有重定向或缓存pip
.在Windows 7上pip 9.0.1
,我不得不运行
pip install \ --trusted-host pypi.python.org \ --trusted-host pypi.org \ --trusted-host files.pythonhosted.org \ <package>
您可以使用详细标记找到这些.
答案非常相似,有点令人困惑.就我而言,我公司网络中的证书就是问题所在.我能够使用以下方法解决问题:
pip install --trusted-host files.pythonhosted.org --trusted-host pypi.org --trusted-host pypi.python.org oauthlib -vvv
如此处所见.如果不需要详细输出,则可以省略-vvv参数
你有4个选择:
$ pip install --cert /path/to/mycertificate.crt linkchecker
pip.conf
创建此文件:
$HOME/.pip/pip.conf (Linux) %HOME%\pip\pip.ini (Windows)
并添加以下行:
[global] cert = /path/to/mycertificate.crt
$ pip install --trusted-host pypi.python.org linkchecker
创建此文件:
$HOME/.pip/pip.conf (Linux) %HOME%\pip\pip.ini (Windows)
并添加以下行:
[global] trusted-host = pypi.python.org
https://pip.pypa.io/en/latest/user_guide/#configuration
您有以下可能性来解决问题CERTIFICATE_VERIFY_FAILED
:
使用HTTP而不是HTTPS.
使用--cert <trusted.pem>
或CA_BUNDLE
变量指定备用CA包.
例如,您可以从Web浏览器转到失败的URL并将根证书导入您的系统.
运行python -c "import ssl; print(ssl.get_default_verify_paths())"
以检查当前的(验证是否存在).
OpenSSL有一对环境(SSL_CERT_DIR
,SSL_CERT_FILE
),可用于指定不同的证书数据库PEP-476.
用于--trusted-host <hostname>
将主机标记为受信任.
在Python中使用verify=False
的requests.get
(参见:SSL证书验证).
使用--proxy <proxy>
以避免证书检查.
阅读更多信息:套接字对象的TLS/SSL包装器 - 验证证书.
您可以使用此参数指定证书:
pip --cert /etc/ssl/certs/FOO_Root_CA.pem install linkchecker
请参阅:文档»参考指南»pip
如果指定您公司的根证书不起作用,则cURL可能会起作用:http://curl.haxx.se/ca/cacert.pem
您必须使用PEM文件而不是CRT文件.如果你有一个CRT文件,你需要将文件转换为PEM.评论中有报告说这现在适用于CRT文件,但我还没有验证.
另请检查:SSL证书验证.
Mabey我回答得有点迟了
对我而言,我的日期和时间在Raspberry Pi上配置错误.结果是所有SSL和HTTPS连接都失败了,使用https://files.pythonhosted.org/服务器.
像这样更新它:
sudo date -s "Wed Thu 23 11:12:00 GMT+1 2018"
sudo dpkg-reconfigure tzdata
首先,
pip install --trusted-host pypi.python.org <package name>
不适合我.我一直收到CERTIFICATE_VERIFY_FAILED错误.但是,我在错误消息中注意到他们引用了"pypi.org"网站.所以,我使用它作为可信主机名而不是pypi.python.org.那几乎让我在那里; 使用CERTIFICATE_VERIFY_FAILED,负载仍然失败,但稍后.找到对失败的网站的引用,我将其作为可信主机包含在内.最终对我有用的是:
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package name>
kenorb的回答非常有用(太棒了!).
在他的解决方案中,也许这是最简单的解决方案:
--trusted-host
例如,在这种情况下,您可以这样做
pip install --trusted-host pypi.python.org linkchecker
pem文件(或其他任何东西)是不必要的.
永久修复
pip install --upgrade pip --trusted-host pypi.org --trusted-host files.pythonhosted.org
例如:
pip install <package name> --trusted-host pypi.org --trusted-host files.pythonhosted.org
您可以通过设置pypi.org
和files.pythonhosted.org
作为可信主机来忽略SSL错误.
$ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package_name>
注意:在2018年4月的某个时间,Python Package Index已迁移pypi.python.org
到pypi.org
.这意味着使用旧域的"trusted-host"命令不再起作用.
自从pip 10.0发布以来,你应该能够通过pip
自我升级来永久修复它:
$ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org pip setuptools
或者只是重新安装它以获得最新版本:
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
(...然后get-pip.py
使用相关的Python解释器运行).
pip install <otherpackage>
应该在此之后工作.如果没有,那么您将需要做更多,如下所述.
您可能希望将可信主机和代理添加到配置文件中.
pip.ini
(Windows)或pip.conf
(unix)
[global] trusted-host = pypi.python.org pypi.org files.pythonhosted.org
替代解决方案(不太安全)
大多数答案可能会带来安全问题.
有助于轻松安装大多数python包的两个解决方法是:
使用easy_install:如果你真的很懒,不想浪费太多时间,请使用easy_install <package_name>
.请注意,找不到某些包或会出现小错误.
使用Wheel:下载python包的Wheel并使用pip命令pip install wheel_package_name.whl
安装包.
要一劳永逸地解决此问题,您可以验证您是否有pip.conf
文件.
pip.conf
根据文档,这是你应该的地方:
在Unix上,默认配置文件是:
$HOME/.config/pip/pip.conf
它尊重XDG_CONFIG_HOME环境变量.在macOS上,配置文件
$HOME/Library/Application Support/pip/pip.conf
是否$HOME/Library/Application Support/pip
存在目录$HOME/.config/pip/pip.conf
在Windows上,配置文件是
%APPDATA%\pip\pip.ini
.
在virtualenv里面:
在Unix和macOS上的文件是
$VIRTUAL_ENV/pip.conf
在Windows上,该文件是:
%VIRTUAL_ENV%\pip.ini
你pip.conf
应该看起来像:
[global] trusted-host = pypi.python.org
pip install linkchecker
linkchecker
我创建pip.conf
文件后没有抱怨安装.
我发现最直接的方法是从DigiCert下载并使用"DigiCert High Assurance EV Root CA",网址为https://www.digicert.com/digicert-root-certificates.htm#roots
您可以访问https://pypi.python.org/以通过单击地址栏中的锁定图标来验证证书颁发者,或使用openssl增加您的极客信誉:
$ openssl s_client -connect pypi.python.org:443 CONNECTED(00000003) depth=1 /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/businessCategory=Private Organization/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/serialNumber=3359300/street=16 Allen Rd/postalCode=03894-4801/C=US/ST=NH/L=Wolfeboro,/O=Python Software Foundation/CN=www.python.org i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
证书链中的最后一个CN值是您需要下载的CA的名称.
对于一次性工作,请执行以下操作:
从DigiCert 下载CRT
将CRT转换为PEM格式
将PIP_CERT环境变量导出到PEM文件的路径
(在运行pip之前,最后一行假定您使用的是bash shell).
curl -sO http://cacerts.digicert.com/DigiCertHighAssuranceEVRootCA.crt openssl x509 -inform DES -in DigiCertHighAssuranceEVRootCA.crt -out DigiCertHighAssuranceEVRootCA.pem -text export PIP_CERT=`pwd`/DigiCertHighAssuranceEVRootCA.pem
为了使其可重复使用,将DigiCertHighAssuranceEVRootCA.crt置于常用位置,并在〜/ .bashrc中相应地导出PIP_CERT.
您可以尝试使用http而不是https来绕过SSL错误.当然,这在安全性方面并不是最优的,但是如果你赶时间应该可以做到这一点:
pip install --index-url=http://pypi.python.org/simple/ linkchecker
对我来说,问题的解决,创建一个文件夹
pip
,一个文件:pip.ini
在
C:\Users\<username>\AppData\Roaming\
例如:
C:\Users\<username>\AppData\Roaming\pip\pip.ini
在里面我写道:
[global] trusted-host = pypi.python.org pypi.org files.pythonhosted.org
我重新启动了python,然后pip永久信任这些网站,并用它们从中下载包.
我最近遇到了这个问题,因为我公司的Web内容过滤器使用自己的证书颁发机构,因此它可以过滤SSL流量.在我的情况下,PIP似乎没有使用系统的CA证书,产生您提到的错误.将PIP降级到版本1.2.1后面会出现一系列问题,所以我回到了Python 3.4附带的原始版本.
我的解决方法很简单:使用easy_install
.要么它不检查证书(如旧的PIP版本),要么它知道使用系统证书,因为它每次都适用于我,我仍然可以使用PIP卸载使用easy_install安装的软件包.
如果这不起作用并且您可以访问没有问题的网络或计算机,您可以随时设置自己的个人PyPI服务器:如何在没有镜像的情况下创建本地自己的pypi存储库索引?
我几乎这样做,直到我尝试使用easy_install
作为最后的努力.