Certbot: AttributeError: l'objet 'module' n'a pas d'attribut 'pyopenssl'

Créé le 30 août 2018  ·  35Commentaires  ·  Source: certbot/certbot

Quand je lance certbot comme ça:
sudo certbot --nginx
Je reçois:

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'

ma version python est 2.7.12 et Linux OS: 7.4

fedora / redhat / CentOS help wanted

Commentaire le plus utile

Voici ma solution:

pip install requests==2.6.0
easy_install --upgrade pip

Tous les 35 commentaires

Je soupçonne que cela est dû à un conflit entre les packages Python installés à partir de votre gestionnaire de packages OS et pip comme dans # 6245.

Sur quel système d'exploitation Linux êtes-vous et comment avez-vous installé Certbot?

J'ai la même erreur (ou presque identique):

# 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'

Version du système d'exploitation: CentOS Linux version 7.5.1804 (Core)

Edit2: En ce qui concerne https://github.com/certbot/certbot/issues/6245 , python-urllib3 a été installé en utilisant yum, et la version actuelle (1.10.2-5.el7) n'a pas le lien symbolique mentionné dans packages/ssl_match_hostname mais en tant que répertoire normal contenant des fichiers.

Essayer de reproduire le problème m'amène à ceci:

# 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

Donc, apparemment, il existe une dépendance de version silencieuse pour urllib3.contrib.pyopenssl sur pyOpenSSL v0.14, qui n'est pas fournie par Centos7 à ce stade.

Edit: Après avoir installé une version plus récente (0.15.1) à partir de https://cbs.centos.org/koji/buildinfo?buildID=1500 l'erreur ci-dessus disparaît, mais pas l'erreur générée par certbot.

Quelques essais et erreurs avec usr/lib/python2.7/site-packages/acme/client.py m'amènent à découvrir que lorsque je commente l'importation from requests_toolbelt.adapters.source import SourceAddressAdapter , l'erreur disparaît!
Heureusement, cela n'est utilisé qu'une seule fois, donc tant que je fournis un source_address je peux m'en tirer avec cette solution pas si subtile. :)

@ github-abcde, je vous recommande de publier sur https://community.letsencrypt.org. Sur une nouvelle installation de CentOS 7, les deux:

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

et

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

travaille pour moi.

De plus, après l'installation de python-urllib3 1.10.2-5.el7 , /usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py ne contient pas de code pour lever une exception si la version de pyOpenSSL est inférieure à 0,14.

Je pense que vous avez un mélange de packages provenant de diverses sources. Il existe une communauté plus large sur https://community.letsencrypt.org qui devrait être en mesure de vous aider à localiser le problème.

Vous avez raison. Après une recherche approfondie, il est apparu que quelque chose qui aurait dû installer un module à l'aide de pip3, l'a en fait installé en utilisant python -m pip ... en utilisant python2.7 et en écrasant le urllib3/conrtib/pyopenssl.py ... Merci pour vos pointeurs, ce qui m'a obligé à chercher plus loin :)

Le même problème que j'ai ici.

Fichier "/usr/lib/python2.7/site-packages/acme/client.py", ligne 39, dans
urllib3.contrib.pyopenssl.inject_into_urllib3 ()
AttributeError: l'objet 'module' n'a pas d'attribut 'pyopenssl'

centos 7.3

Voici ma solution:

pip install requests==2.6.0
easy_install --upgrade pip

Je vois ça maintenant aussi. Une nouvelle installation de Centos 7, sans rien d'autre installé via pip, et certbot installé via yum

Linux localhost.localdomain 3.10.0-862.2.3.el7.x86_64 # 1 SMP mer.9 mai 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

Le conseil de

[ vagrant @ localhost ~] $ pip demandes d'installation == 2.6.0
Exigence déjà satisfaite: requêtes == 2.6.0 dans /usr/lib/python2.7/site-packages

J'utilisais très bien certbot jusqu'à il y a quelques jours lorsque je ne peux pas le faire fonctionner du tout sur l'une de mes nouvelles versions 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.

Des problèmes comme celui-ci sont causés par l'installation de packages globalement à partir de yum et pip . Malheureusement, je ne peux pas vous aider à nettoyer l'environnement Python sur votre système, mais si vous publiez sur https://community.letsencrypt.org, il y a une grande base d'utilisateurs qui pourra vous aider.

J'ai eu une installation propre de Centos 7.6 et ajouté Certbot à partir du dépôt Epel a causé le même problème. Problème résolu en exécutant
pip install requests==2.6.0

Je vois que c'est toujours un problème.

Même.
CentOS Linux version 7.6.1810 (Core)
Installer:

sudo yum install certbot python2-certbot-nginx

Et courir:

# 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'

Voici ma solution:

pip install requests==2.6.0
easy_install --upgrade pip

A travaillé pour moi sur Centos 7

D'accord. L'installation par défaut avec yum ne fonctionne pas. Besoin de le réparer après
installation initiale. On voudrait qu'il s'installe dans un état de fonctionnement.

Le dimanche 14 avril 2019, 07:54 Michael Lindner, [email protected]
a écrit:

Voici ma solution:

demandes d'installation pip == 2.6.0
easy_install --upgrade pip

A travaillé pour moi sur Centos 7

-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-482922170 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AMsov79Wu4KJJLs0jJUN-fhs6WO2YROuks5vgsKzgaJpZM4WS5Gq
.

Si quelqu'un peut fournir des instructions sur la façon de reproduire cela, idéalement dans quelque chose comme Docker, je serais heureux de jeter un autre coup d'œil, mais je pense toujours que cela ne se produit que si vous avez installé des packages Python à partir de plusieurs sources.

Cela est généralement dû à l'installation de packages à partir de yum et pip et en supprimant les packages que vous avez installés avec pip et en les réinstallant avec yum devrait résoudre le problème problème.

Je peux confirmer que cela se produit avec une installation propre de Centos 7.6 en utilisant le
Dépôt EPEL pour ajouter certbot.

Le lundi 15 avril 2019, 19:35 Brad Warren, [email protected] a écrit:

Si quelqu'un peut fournir des instructions sur la façon de reproduire cela, idéalement
quelque chose comme Docker, je serais heureux de jeter un autre coup d'œil, mais je
pense que cela ne se produit que si vous avez installé des packages Python à partir de plusieurs
sources.

Cela est généralement dû à l'installation de packages à partir de yum et pip et
supprimer les packages que vous avez installés avec pip et les réinstaller
avec yum devrait résoudre le problème.

-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-483346939 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AMsovzeRLjz2j0odmgWGxyyAVy9VBp3Tks5vhLhLgaJpZM4WS5Gq
.

J'ai eu ce problème (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'
et pip n'est pas installé
[bob<strong i="10">@bla</strong> ~]# pip install requests==2.6.0 -bash: pip: command not found

Je peux confirmer que cela se produit avec une installation propre de Centos 7.6 en utilisant le repo EPEL pour ajouter certbot.

Malheureusement, je ne peux pas le reproduire dans Docker ou un VPS.

J'adorerais toujours voir quelqu'un réussir à reproduire cela dans quelque chose de facilement répétable comme Docker, mais en attendant, pour quelqu'un qui rencontre le problème, quelle est la sortie des commandes suivantes

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

Intéressant. C'est la deuxième installation propre que j'ai faite pour Centos 7.

Cette fois-ci, j'ai fait une installation propre en utilisant l'ISO minimale et cela fonctionne. Je vois que le package de requêtes Centos installé est également 2.6. Il est possible que les demandes aient été mises à jour depuis le problème.
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.

Ce problème se produit pour moi sur centos 7.6 avec ovirt 4.3. Les versions de package sont

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

Il semble que quelque chose de bizarre se passe avec l'espace urllib3.contrib noms

>>> 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']

Le problème disparaît lorsque je fais cela dans 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

Voici ma solution:

pip install requests==2.6.0
easy_install --upgrade pip

a travaillé pour moi sur CentOS 7

Merci @monkeyWie - a travaillé pour moi sur CentOS7

Voici ma solution:

pip install requests==2.6.0
easy_install --upgrade pip

pip install acme
a travaillé pour moi sur Centos 7 après avoir vu cette erreur

ERREUR: certbot 1.0.0 nécessite acme> = 0.40.0, qui n'est pas installé.

PS Installez tout à partir de pip, plutôt que des packages Centos, ils sont parfois vieux

Je peux confirmer que cela se produit avec une installation propre de Centos 7.6 en utilisant le repo EPEL pour ajouter certbot.

Malheureusement, je ne peux pas le reproduire dans Docker ou un VPS.

J'adorerais toujours voir quelqu'un réussir à reproduire cela dans quelque chose de facilement répétable comme Docker, mais en attendant, pour quelqu'un qui rencontre le problème, quelle est la sortie des commandes suivantes

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 mes résultats sont les suivants:

('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

ce qui me semble bien. mais ces autres tests semblent échouer:

$ 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 version de urllib3 empaquetée dans les systèmes basés sur RHEL 7 est 1.10.2 mais vous avez 1.25.7. Cela a probablement été installé via pip . Supprimer urllib3 et le réinstaller via yum devrait résoudre ce problème.

Si vous avez besoin d'aide supplémentaire à ce sujet, je vous recommande de publier sur https://community.letsencrypt.org où il y a un grand groupe de personnes familiarisées avec Certbot et l'administration des serveurs qui devraient être en mesure de vous aider.

JFYI. J'ai eu le même problème mais je n'ai pas pip / pip2 ou aucun package pip installé manuellement.

Dans mon cas, j'avais centos-release-opstools qui a amené python2-urllib3 1.21.1-1.el7 and python2-requests 2.19.1-4.el7`.

Après avoir désactivé ce dépôt et réinstallé les packages pertinents (ils sont renommés en python-urllib3 1.10.2-7.el7 et python-requests 2.6.0-8.el7_7 partir de CentOS 7.7), le problème a disparu.

@grossws , merci pour l'info. Vous souvenez-vous de votre message d'erreur?

Lorsque j'essaye de recréer cette configuration, Certbot plante avec:

# 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'))

En effet, le package python2-pyOpenSSL 17.3.0-3.el7 prétend qu'il nécessite python-cryptography >= 1.3.0 , mais la dépendance spécifiée dans Python est cryptography>=1.9 qui n'est pas installée.

@bmw , j'avais un stacktrace similaire à celui de https://github.com/certbot/certbot/issues/6328#issuecomment -482531925

J'ai essayé de le reproduire dans un conteneur avec juste epel-release + centos-release-opstools mais j'ai le même conflit de version à propos de cryptography . J'ai regardé le système d'origine où j'ai eu une erreur et j'ai trouvé que j'avais plus récent python2-cryptography de centos-release-ovirt42 repo.

Donc, pour reproduire, vous pouvez exécuter le conteneur docker avec centos:7 et faire

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

C'est amusant (selon votre définition du plaisir).

Sur l'image Docker centos:7 , si vous exécutez:

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()'

La première commande Python réussira tandis que la seconde échouera. La seule différence est l'importation from requests_toolbelt.adapters.source import SourceAddressAdapter .

Nous prévoyons d'abandonner le support de Python 2 dans les prochains mois, date à laquelle nous pourrons supprimer ce code. Pour cette raison, la petite équipe qui gère Certbot ne passera probablement pas beaucoup de temps sur cela nous-mêmes, mais si quelqu'un veut creuser dedans, je pense qu'il serait bon de faire rapporter ce qui cause ce problème aux responsables du paquet. .

Je rouvre ça pour l'instant.

Je pense que la supposition d'une forme de corruption est correcte. Je n'avais pas installé de pip python2, donc je ne suis pas sûr de ce que j'ai cassé. Cependant, cela a réglé les choses:

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

J'espère que cela aide quelqu'un.

Cela a fonctionné dans mon environnement (centos 7 avec urllib3 mis à jour de pip comme @bmw décrit ci-dessus .. ma commande "pip"

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

Responsable Fedora / CentOS certbot ici: Veuillez NE JAMAIS installer de modules sur /usr/lib utilisant pip . Certains packages CentOS sont modifiés pour ne pas dupliquer le code existant ou pour renforcer les paramètres de sécurité. Les conditionneurs de distribution doivent s'assurer que tous les packages requis sont installés.

Vous pouvez vérifier votre installation pour les packages Python non gérés avec cette commande:

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

Vous ne devriez pas obtenir de sortie.

L'ajout d'autres dépôts yum peut également être problématique. Fedora EPEL devrait fonctionner à 100% avec les dépôts de base de Red Hat / CentOS mais nous ne pouvons prendre en compte aucun autre dépôt.

Si vous avez uniquement activé les dépôts CentOS par défaut (+ EPEL) et que vous plantez toujours, veuillez nous en informer. La meilleure méthode est de créer un problème Bugzilla mais @ -mentioning me ici fonctionne également (pour l'instant - les responsables de certbot dans Fedora / EPEL peuvent changer).

@FelixSchwarz , qu'en est-il des packages de repo CentOS SIG comme centos-release-opstools ? J'utilise habituellement des dépôts standard + epel mais fluentd n'est disponible que dans opstools (

Dans certains cas, je viens de terminer la création d'environnement virtuel en utilisant python3 -mvenv /path/to/new/venv et en y installant le logiciel requis (disons certbot + vérificateur DNS requis). Heureusement, cela ne pollue pas /usr/lib .

@grossws Fedora EPEL devrait fonctionner avec tout ce qui se trouve à partir de RHEL Base (il peut donc y avoir d'autres produits Red Hat en couches qui provoquent des conflits). Toutes les autres sources peuvent être incompatibles à moins que ces dépôts soient très prudents afin de ne pas expédier les mêmes éléments que RHEL / EPEL.

Je viens de vérifier les dépôts de j'ai immédiatement remarqué quelques conflits avec Fedora EPEL:

  • python2-msgpack: EPEL 7 a 0.5.6-5.el7 , opstools 0.4.6-3.el7 (non pertinent pour certbot mais pour borgbackup que je maintiens également dans Fedora / EPEL.
  • requêtes python2: EPEL 7 a 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 expédie 2.4-1.el7 , opstools 2.5-1.el7 ( python2-idna )

Cela ne signifie pas que le repo centos-opstools ne fonctionne pas avec les packages certbot d'EPEL, mais il y a des conflits et c'est définitivement une configuration non testée. De plus, centos-opstools remplace un paquet dans la base RHEL, ce qui signifie que vous devriez faire très attention car cela pourrait aussi casser beaucoup de choses dans la distribution principale.

tl; dr: Si vous utilisez les packages certbot d'EPEL, vous ne devez pas utiliser d'autres dépôts yum / dnf car ils sont probablement incompatibles. Demandez au fournisseur de pension la compatibilité avec RHEL base et Fedora EPEL.

De plus, j'ai trouvé qu'il n'était pas si difficile de contribuer à Fedora EPEL, donc s'il vous manque un paquet, envisagez de devenir un responsable de paquet (envoyez-moi un ping si vous avez besoin de conseils).

Je pense que la supposition d'une forme de corruption est correcte. Je n'avais pas installé de pip python2, donc je ne suis pas sûr de ce que j'ai cassé. Cependant, cela a réglé les choses:

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

J'espère que cela aide quelqu'un.

Cela a aidé dans mon cas (d'autres solutions de ce sujet ne l'ont pas fait). Je vous remercie.

Cette page vous a été utile?
0 / 5 - 0 notes