Certbot: AttributeError: el objeto 'módulo' no tiene atributo 'pyopenssl'

Creado en 30 ago. 2018  ·  35Comentarios  ·  Fuente: certbot/certbot

Cuando ejecuto certbot así:
sudo certbot --nginx
Yo obtengo:

Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.26.1', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 570, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2751, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2405, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2411, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 39, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'

mi versión de Python es 2.7.12 y Linux OS: 7.4

fedora / redhat / CentOS help wanted

Comentario más útil

Esta es mi solucion:

pip install requests==2.6.0
easy_install --upgrade pip

Todos 35 comentarios

Sospecho que esto se debe a un conflicto entre los paquetes de Python instalados desde el administrador de paquetes de su sistema operativo y pip como en # 6245.

¿Qué sistema operativo Linux tiene y cómo instaló Certbot?

Tengo el mismo (o casi igual) error:

# yum install certbot
...
Running transaction
  Installing : pyOpenSSL-0.13.1-3.el7.x86_64                                                                                                                                                            1/6
  Installing : python2-josepy-1.1.0-1.el7.noarch                                                                                                                                                        2/6
  Installing : python-ndg_httpsclient-0.3.2-1.el7.noarch                                                                                                                                                3/6
  Installing : python2-acme-0.26.1-1.el7.noarch                                                                                                                                                         4/6
  Installing : python2-certbot-0.26.1-2.el7.noarch                                                                                                                                                      5/6
  Installing : certbot-0.26.1-2.el7.noarch                                                                                                                                                              6/6
  Verifying  : pyOpenSSL-0.13.1-3.el7.x86_64                                                                                                                                                            1/6
  Verifying  : python2-josepy-1.1.0-1.el7.noarch                                                                                                                                                        2/6
  Verifying  : python2-acme-0.26.1-1.el7.noarch                                                                                                                                                         3/6
  Verifying  : python2-certbot-0.26.1-2.el7.noarch                                                                                                                                                      4/6
  Verifying  : certbot-0.26.1-2.el7.noarch                                                                                                                                                              5/6
  Verifying  : python-ndg_httpsclient-0.3.2-1.el7.noarch                                                                                                                                                6/6

Installed:
  certbot.noarch 0:0.26.1-2.el7

Dependency Installed:
  pyOpenSSL.x86_64 0:0.13.1-3.el7    python-ndg_httpsclient.noarch 0:0.3.2-1.el7    python2-acme.noarch 0:0.26.1-1.el7    python2-certbot.noarch 0:0.26.1-2.el7    python2-josepy.noarch 0:1.1.0-1.el7     

Complete!
# certbot --version
Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.26.1', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 39, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'

Versión del sistema operativo: CentOS Linux release 7.5.1804 (Core)

Edit2: con respecto a https://github.com/certbot/certbot/issues/6245 , python-urllib3 se ha instalado usando yum, y la versión actual (1.10.2-5.el7) no tiene el enlace simbólico mencionado en packages/ssl_match_hostname pero como un directorio normal con archivos en él.

Intentar reproducir el problema me lleva a esto:

# python
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib3.contrib.pyopenssl
>>> urllib3.contrib.pyopenssl.inject_into_urllib3()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 118, in inject_into_urllib3                                                                                                   
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 153, in _validate_dependencies_met                                                                                            
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
>>>
# yum info pyOpenSSL
...
Installed Packages
Name        : pyOpenSSL
Arch        : x86_64
Version     : 0.13.1
Release     : 3.el7
Size        : 628 k
Repo        : installed

Entonces, aparentemente, hay una dependencia de la versión silenciosa para urllib3.contrib.pyopenssl en pyOpenSSL v0.14, que no es proporcionada por Centos7 en este momento.

Editar: Después de instalar una versión más reciente (0.15.1) de https://cbs.centos.org/koji/buildinfo?buildID=1500, el error anterior desaparece, pero no el error generado por certbot.

Algunas pruebas y errores con usr/lib/python2.7/site-packages/acme/client.py me llevan al descubrimiento de que cuando comento la importación from requests_toolbelt.adapters.source import SourceAddressAdapter , ¡el error desaparece!
Afortunadamente, esto se usa solo una vez, por lo que siempre que proporcione un source_address puedo salirse con la suya con esta solución no tan sutil. :)

@ github-abcde, recomendaría publicar en https://community.letsencrypt.org. En una instalación nueva de CentOS 7, ambos:

python -c 'import requests; requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()'

y

python -c 'import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'

trabaja para mi.

Además, después de instalar python-urllib3 1.10.2-5.el7 , /usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py no contiene código para generar una excepción si la versión de pyOpenSSL es menor que 0.14.

Creo que tiene una combinación de paquetes de varias fuentes. Hay una comunidad más grande en https://community.letsencrypt.org que debería poder ayudarlo a localizar el problema.

Tienes razón. Después de una búsqueda en profundidad, pareció que algo que debería haber estado instalando un módulo usando pip3, en realidad lo instaló usando python -m pip ... usando python2.7 y sobrescribiendo el urllib3/conrtib/pyopenssl.py ... Gracias por sus consejos, lo que me obligó a buscar más :)

El mismo problema que tengo aquí.

Archivo "/usr/lib/python2.7/site-packages/acme/client.py", línea 39, en
urllib3.contrib.pyopenssl.inject_into_urllib3 ()
AttributeError: el objeto 'módulo' no tiene atributo 'pyopenssl'

centos 7.3

Esta es mi solucion:

pip install requests==2.6.0
easy_install --upgrade pip

Yo también estoy viendo esto ahora. Una nueva instalación de Centos 7, sin nada más instalado a través de pip, y certbot instalado a través de yum

Linux localhost.localdomain 3.10.0-862.2.3.el7.x86_64 # 1 SMP Mié 9 de mayo 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

El consejo de @monkeyWie no funcionó para mí

[ vagrant @ localhost ~] $ solicitudes de instalación de pip == 2.6.0
Requisito ya satisfecho: solicitudes == 2.6.0 en /usr/lib/python2.7/site-packages

Estaba usando certbot bien hasta hace unos días cuando no puedo hacer que funcione en ninguna de mis nuevas compilaciones de centos 7.

vagrant<strong i="14">@localhost</strong> ~]$ sudo certbot --nginx
Traceback (most recent call last):
  File "/usr/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.27.1', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 484, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2714, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2332, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2338, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 36, in <module>
    requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()  # type: ignore
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 118, in inject_into_urllib3
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 153, in _validate_dependencies_met
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

Problemas como este son causados ​​por la instalación de paquetes globalmente desde yum y pip . Desafortunadamente, no puedo ayudarlo a limpiar el entorno de Python en su sistema, pero si publica en https://community.letsencrypt.org, hay una gran base de usuarios que podrá ayudarlo.

Tuve una instalación limpia de Centos 7.6 y agregué Certbot desde el repositorio de Epel causó el mismo problema. Problema solucionado ejecutando
pip install requests==2.6.0

Veo que esto sigue siendo un problema.

Mismo.
Lanzamiento de CentOS Linux 7.6.1810 (Core)
Instalar en pc:

sudo yum install certbot python2-certbot-nginx

Y correr:

# certbot --help
Traceback (most recent call last):
  File "/usr/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.31.0', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 40, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'

Esta es mi solucion:

pip install requests==2.6.0
easy_install --upgrade pip

Funcionó para mí en Centos 7

Convenido. La instalación predeterminada con yum no funciona. Necesito arreglarlo después
instalación inicial. Uno querría que se instalara en un estado de trabajo.

El domingo 14 de abril de 2019 a las 07:54 Michael Lindner, [email protected]
escribió:

Esta es mi solucion:

solicitudes de instalación de pip == 2.6.0
easy_install: actualizar pip

Funcionó para mí en Centos 7

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-482922170 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AMsov79Wu4KJJLs0jJUN-fhs6WO2YROuks5vgsKzgaJpZM4WS5Gq
.

Si alguien puede proporcionar instrucciones sobre cómo reproducir esto, idealmente en algo como Docker, estaría feliz de echar otro vistazo, pero sigo creyendo que esto solo ocurre si ha instalado paquetes de Python de múltiples fuentes.

Esto generalmente se debe a la instalación de paquetes de yum y pip y la eliminación de los paquetes que ha instalado con pip y reinstalarlos con yum debería resolver el problema.

Puedo confirmar que sucede con una instalación limpia de Centos 7.6 usando el
Repo EPEL para agregar certbot.

El lunes, 15 de abril de 2019, 19:35 Brad Warren, [email protected] escribió:

Si alguien puede proporcionar instrucciones sobre cómo reproducir esto, idealmente en
algo como Docker, estaría feliz de echar otro vistazo, pero todavía
creo que esto solo ocurre si ha instalado paquetes de Python desde múltiples
fuentes.

Esto generalmente se debe a la instalación de paquetes de yum y pip y
eliminar los paquetes que ha instalado con pip y reinstalarlos
con yum debería resolver el problema.

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-483346939 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AMsovzeRLjz2j0odmgWGxyyAVy9VBp3Tks5vhLhLgaJpZM4WS5Gq
.

Tuve este problema (centos)
[bob<strong i="6">@bla</strong> ~]# certbot renew 2>&1 | tail -2 urllib3.contrib.pyopenssl.inject_into_urllib3() AttributeError: 'module' object has no attribute 'pyopenssl'
y pip no está instalado
[bob<strong i="10">@bla</strong> ~]# pip install requests==2.6.0 -bash: pip: command not found

Puedo confirmar que sucede con una instalación limpia de Centos 7.6 usando el repositorio de EPEL para agregar certbot.

Desafortunadamente, no puedo reproducirlo en Docker o en un VPS.

Todavía me encantaría ver a alguien lograr reproducir esto en algo fácilmente repetible como Docker, pero mientras tanto, para alguien que tiene el problema, ¿cuál es el resultado de los siguientes comandos?

python -c 'import certbot, requests, urllib3, OpenSSL; print("certbot :", certbot.__version__); print("requests: ", requests.__version__); print("urllib3 :", urllib3.__version__); print("OpenSSL :", OpenSSL.__version__)'
ls /usr/lib/python2.7/site-packages/urllib3/contrib

Interesante. Esta es la segunda instalación limpia que hice para Centos 7.

Esta vez hice una instalación limpia usando el ISO mínimo y está funcionando. Veo que el paquete de solicitudes Centos instalado también es 2.6. Es posible que las solicitudes se hayan actualizado ya que originalmente tenían este problema.
python2-requests-2.6.0-0.el7.noarch

[root<strong i="9">@centos7</strong> ~]# python -c 'import certbot, requests, urllib3, OpenSSL; print("certbot :", certbot.__version__); print("requests: ", requests.__version__); print("urllib3 :", urllib3.__version__); print("OpenSSL :", OpenSSL.__version__)'
('certbot :', '0.31.0')
('requests: ', '2.6.0')
('urllib3 :', '1.10.2')
('OpenSSL :', '0.13.1')
[root<strong i="10">@centos7</strong> ~]# ls /usr/lib/python2.7/site-packages/urllib3/contrib
__init__.py  __init__.pyc  __init__.pyo  ntlmpool.py  ntlmpool.pyc  ntlmpool.pyo  pyopenssl.py  pyopenssl.pyc  pyopenssl.pyo
[root<strong i="11">@centos7</strong> ~]# certbot
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Certbot doesn't know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run "certbot certonly" to do so. You'll need to manually configure your web server to use the resulting certificate.

Este problema me ocurre en centos 7.6 junto con ovirt 4.3. Las versiones del paquete son

from EPEL:
certbot-0.31.0-2.el7.noarch

from ovirt-4.3-centos-opstools:
python2-requests-2.19.1-4.el7.noarch 
python2-pyOpenSSL-17.3.0-3.el7.noarch

¿Parece que sucede algo extraño con el espacio urllib3.contrib nombres

>>> import requests
>>> requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'pyopenssl'
>>> import urllib3.contrib.pyopenssl
>>> urllib3.contrib.pyopenssl.inject_into_urllib3()
>>> dir(urllib3.contrib)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'pyopenssl', 'socks']
>>> from acme import client as acme_client
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/acme/client.py", line 40, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'
>>> dir(urllib3.contrib)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'appengine']

El problema desaparece cuando hago esto en acme/client.py :

if sys.version_info < (2, 7, 9):  # pragma: no cover
    import requests.packages.urllib3.contrib.pyopenssl  # pylint: disable=import-error
    requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()  # type: ignore

Esta es mi solucion:

pip install requests==2.6.0
easy_install --upgrade pip

funcionó para mí en CentOS 7

Gracias @monkeyWie - funcionó para mí en CentOS7

Esta es mi solucion:

pip install requests==2.6.0
easy_install --upgrade pip

pip install acme
funcionó para mí en Centos 7 después de que vi este error

ERROR: certbot 1.0.0 requiere acme> = 0.40.0, que no está instalado.

PD Instale todo, desde pip, en lugar de paquetes Centos, a veces son viejos

Puedo confirmar que sucede con una instalación limpia de Centos 7.6 usando el repositorio de EPEL para agregar certbot.

Desafortunadamente, no puedo reproducirlo en Docker o en un VPS.

Todavía me encantaría ver a alguien lograr reproducir esto en algo fácilmente repetible como Docker, pero mientras tanto, para alguien que tiene el problema, ¿cuál es el resultado de los siguientes comandos?

python -c 'import certbot, requests, urllib3, OpenSSL; print("certbot :", certbot.__version__); print("requests: ", requests.__version__); print("urllib3 :", urllib3.__version__); print("OpenSSL :", OpenSSL.__version__)'
ls /usr/lib/python2.7/site-packages/urllib3/contrib

@bmw mis resultados son los siguientes:

('certbot :', '1.0.0')
('requests: ', '2.6.0')
('urllib3 :', '1.25.7')
('OpenSSL :', '0.13.1')

_appengine_environ.py   appengine.py   __init__.py   ntlmpool.py   pyopenssl.py   _securetransport    securetransport.pyc  socks.pyc
_appengine_environ.pyc  appengine.pyc  __init__.pyc  ntlmpool.pyc  pyopenssl.pyc  securetransport.py  socks.py

lo que me parece bien. pero estas otras pruebas parecen fallar:

$ python -c 'import requests; requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute 'packages'

$ python -c 'import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 118, in inject_into_urllib3
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 160, in _validate_dependencies_met
    "'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

La versión de urllib3 empaquetada en sistemas basados ​​en RHEL 7 es 1.10.2 pero tiene 1.25.7. Probablemente se instaló a través de pip . Eliminar urllib3 y reinstalarlo a través de yum debería resolver este problema.

Si necesita ayuda adicional con esto, le recomiendo publicar en https://community.letsencrypt.org donde hay un gran grupo de personas familiarizadas con Certbot y la administración del servidor que deberían poder ayudarlo.

JFYI. Tuve el mismo problema pero no tengo pip / pip2 ni ningún paquete de pip instalado manualmente.

En mi caso, tenía centos-release-opstools que trajo python2-urllib3 1.21.1-1.el7 and python2-request 2.19.1-4.el7`.

Después de que desactivé ese repositorio y reinstalé los paquetes relevantes (se les cambió el nombre a python-urllib3 1.10.2-7.el7 y python-requests 2.6.0-8.el7_7 partir de CentOS 7.7), el problema desapareció.

@grossws , gracias por la información. ¿Recuerda cuál fue su mensaje de error?

Cuando intento recrear esa configuración, Certbot se bloquea con:

# certbot --help
Traceback (most recent call last):
  File "/usr/bin/certbot", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 3011, in <module>
    parse_requirements(__requires__), Environment()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 630, in resolve
    raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (cryptography 1.7.2 (/usr/lib64/python2.7/site-packages), Requirement.parse('cryptography>=1.9'))

Esto se debe a que el paquete python2-pyOpenSSL 17.3.0-3.el7 afirma que requiere python-cryptography >= 1.3.0 , pero la dependencia especificada en Python es cryptography>=1.9 que no está instalada.

@bmw , tenía un stacktrace similar a uno en https://github.com/certbot/certbot/issues/6328#issuecomment -482531925

Intenté reproducirlo en un contenedor con solo epel-release + centos-release-opstools pero obtengo el mismo conflicto de versión sobre cryptography . Miré el sistema original donde obtuve un error y descubrí que tengo un python2-cryptography de centos-release-ovirt42 repo.

Entonces, para reproducir, puede ejecutar el contenedor de la ventana acoplable con centos:7 y hacer

yum install -y epel-release centos-release-opstools centos-release-ovirt42
yum install -y certbot
certbot --help`

Eso es divertido (dependiendo de su definición de diversión).

En la imagen de Docker centos:7 , si ejecuta:

yum install -y epel-release centos-release-opstools centos-release-ovirt42
yum install -y python-requests-toolbelt python2-urllib3
python -c 'import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'
python -c 'from requests_toolbelt.adapters.source import SourceAddressAdapter; import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'

El primer comando de Python tendrá éxito mientras que el segundo fallará. La única diferencia es la importación from requests_toolbelt.adapters.source import SourceAddressAdapter .

Estamos planeando eliminar el soporte de Python 2 en los próximos meses, momento en el que podemos eliminar este código. Debido a eso, el pequeño equipo que mantiene Certbot probablemente no dedicará mucho tiempo a esto nosotros mismos, pero si alguien quiere profundizar, creo que sería bueno informar a los mantenedores de paquetes de lo que está causando este problema. .

Estoy reabriendo esto por ahora.

Creo que la suposición de alguna forma de corrupción es correcta. No tenía un pip de python2 instalado, así que no estoy seguro de qué rompí. Sin embargo, esto solucionó las cosas:

yum remove python-urllib3
rm -rf /usr/lib/python2.7/site-packages/urllib3 # yes, you need this too
yum reinstall $(yum list installed | grep python | grep -v python3 | awk '{print $1}')
yum install python-urllib3
yum install certbot

Espero que ayude a alguien.

Esto funcionó en mi entorno (centos 7 con urllib3 actualizado de pip como @bmw descrito anteriormente ... mi comando "pip" también estaba devolviendo errores, por lo que necesitaba reinstalarlo):

sudo yum install -y python2-pip
sudo pip uninstall urllib3
sudo yum install -y python-urllib3

Responsable del certbot de Fedora / CentOS aquí: NUNCA instale módulos en /usr/lib usando pip . Algunos paquetes de CentOS se modifican para que no dupliquen el código existente o para fortalecer la configuración de seguridad. Los empaquetadores de distribuciones deben asegurarse de que estén instalados todos los paquetes necesarios.

Puede verificar su instalación en busca de paquetes de Python no administrados con este comando:

LANG=C rpm -qf /usr/lib/python2.7/site-packages/* | grep 'is not owned by any package'

No debería obtener ningún resultado.

Además, agregar otros repositorios de yum puede ser problemático. Fedora EPEL debería funcionar al 100% con los repositorios base de Red Hat / CentOS pero no podemos tener en cuenta ningún otro repositorio.

Si solo tiene habilitados los repositorios CentOS predeterminados (+ EPEL) y aún falla, háganoslo saber. El mejor método es crear un problema de Bugzilla, pero @ -mencionarme aquí también funciona (por ahora, los mantenedores de certbot en Fedora / EPEL pueden cambiar).

@FelixSchwarz , ¿qué pasa con los paquetes de repositorios CentOS SIG como centos-release-opstools ? Usualmente uso repositorios estándar + epel pero fluentd solo está disponible en opstools (

En algunos casos, acabo de terminar de crear un entorno virtual usando python3 -mvenv /path/to/new/venv e instalar el software requerido allí (digamos certbot + el verificador de DNS requerido). Afortunadamente, no contamina /usr/lib .

@grossws Fedora EPEL debería funcionar con todo, desde RHEL Base (por lo que puede haber otros productos Red Hat en capas que causen conflictos). Todas las demás fuentes pueden ser incompatibles a menos que estos repositorios sean muy cuidadosos para que no envíen lo mismo que RHEL / EPEL.

Solo revisé los repositorios de

  • python2-msgpack: EPEL 7 tiene 0.5.6-5.el7 , opstools 0.4.6-3.el7 (no es relevante para certbot pero para borgbackup que también mantengo en Fedora / EPEL.
  • python2-solicitudes: EPEL 7 tiene 2.6.0-0.el7 , opstools 2.19.1-4.el7
  • python2-urllib3: EPEL 7 1.10.2-7.el7 ( python-urllib3 ), opstools 1.21.1-1.el7
  • python-idna: RHEL Base envía 2.4-1.el7 , opstools 2.5-1.el7 ( python2-idna )

Eso no significa que el repositorio centos-opstools no funcione con los paquetes certbot EPEL, pero hay algunos conflictos y esta es definitivamente una configuración no probada. Además, centos-opstools reemplaza un paquete en la base RHEL, lo que significa que debe tener mucho cuidado, ya que esto también podría romper muchas cosas en la distribución principal.

tl; dr: Si usa los paquetes certbot de EPEL, no debe usar otros repositorios yum / dnf, ya que probablemente sean incompatibles. Pregunte al proveedor de repositorios sobre compatibilidad con RHEL base y Fedora EPEL.

También descubrí que no era tan difícil contribuir a Fedora EPEL, así que si le falta un paquete, considere convertirse en un mantenedor de paquetes (envíeme un mensaje si necesita orientación).

Creo que la suposición de alguna forma de corrupción es correcta. No tenía un pip de python2 instalado, así que no estoy seguro de qué rompí. Sin embargo, esto solucionó las cosas:

yum remove python-urllib3
rm -rf /usr/lib/python2.7/site-packages/urllib3 # yes, you need this too
yum reinstall $(yum list installed | grep python | grep -v python3 | awk '{print $1}')
yum install python-urllib3
yum install certbot

Espero que ayude a alguien.

Esto ayudó en mi caso (otras soluciones de este tema no lo hicieron). Gracias.

¿Fue útil esta página
0 / 5 - 0 calificaciones