La instalación de pip falla con "error de conexión: [SSL: CERTIFICATE_VERIFY_FAILED] verificación fallida del certificado (_ssl.c:598)"
Soy muy nuevo en Python y lo intento > pip install linkchecker
en Windows 7. Algunas notas:
- La instalación de pip falla sin importar el paquete. Por ejemplo,
> pip install scrapy
también produce el error SSL. - La instalación básica de Python 3.4.1 incluía pip 1.5.6. Lo primero que intenté hacer fue instalar linkchecker. Python 2.7 ya estaba instalado, venía con ArcGIS.
python
ypip
no estaban disponibles desde la línea de comando hasta que instalé 3.4.1. > pip search linkchecker
obras. Quizás eso se deba a que la búsqueda de pip no verifica el certificado SSL del sitio.- Estoy en la red de una empresa pero no pasamos por un proxy para llegar a Internet.
- Cada computadora de la empresa (incluida la mía) tiene una autoridad de certificación raíz confiable que se utiliza por diversos motivos, incluida la habilitación del monitoreo del tráfico TLS a https://google.com . No estoy seguro si eso tiene algo que ver con eso.
Aquí está el contenido de mi pip.log después de ejecutarlo 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 <class 'http.client.CannotSendRequest'>: 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
ACTUALIZACIÓN: 2023-08: pip.conf no tiene un campo para sslverify false. Es posible que esto haya funcionado hace años, pero no funciona hoy.
utilizar trusted-host
en pip.conf o en el argumento de línea de comando
Puede ignorar los errores de SSL configurando pypi.org
y files.pythonhosted.org
también los pypi.python.org
hosts más antiguos como confiables.
$ pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org <package_name>
Nota : En algún momento durante abril de 2018, el índice de paquetes de Python se migró de pypi.python.org
a pypi.org
. Esto significa que los comandos de "host confiable" que usan el dominio anterior ya no funcionan, pero puedes agregar ambos.
Solución permanente
Desde el lanzamiento de pip 10.0, deberías poder solucionar este problema permanentemente simplemente actualizándote pip
:
$ pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org pip setuptools
O simplemente reinstalándolo para obtener la última versión:
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
(... y luego ejecutar get-pip.py
con el intérprete de Python correspondiente).
pip install <otherpackage>
debería funcionar después de esto. De lo contrario, deberá hacer más, como se explica a continuación.
Es posible que desee agregar los hosts y el proxy de confianza a su archivo de configuración .
pip.ini
(Windows) o pip.conf
(Unix)
[global]
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org
Soluciones alternativas (menos seguras)
La mayoría de las respuestas podrían plantear un problema de seguridad.
Dos de las soluciones que ayudan a instalar la mayoría de los paquetes de Python con facilidad serían:
- Usando easy_install : si eres muy vago y no quieres perder mucho tiempo, usa
easy_install <package_name>
. Tenga en cuenta que algunos paquetes no se encontrarán o darán pequeños errores. - Usando Wheel : descargue el paquete Wheel del python y use el comando pip
pip install wheel_package_name.whl
para instalar el paquete.
Utilice el --cert
argumento:
Puede especificar un certificado con:
pip --cert <path/to/cert>.pem install <package list>
p.ej:
pip --cert /etc/ssl/certs/FOO_Root_CA.pem install linkchecker
Ver: Documentos » Guía de referencia » pip
Si especificar el certificado raíz de su empresa no funciona, tal vez el de cURL funcione: http://curl.haxx.se/ca/cacert.pem
Debe utilizar un archivo PEM y no un archivo CRT. Si tiene un archivo CRT, deberá convertir el archivo a PEM. Hay informes en los comentarios de que esto ahora funciona con un archivo CRT, pero no lo he verificado.
Consulte también: Verificación de certificado SSL .