Certbot: AttributeError: o objeto 'módulo' não tem atributo 'pyopenssl'

Criado em 30 ago. 2018  ·  35Comentários  ·  Fonte: certbot/certbot

Quando executo o certbot assim:
sudo certbot --nginx
Eu recebo:

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'

minha versão python é 2.7.12 e linux os: 7.4

fedora / redhat / CentOS help wanted

Comentários muito úteis

Esta é a minha solução:

pip install requests==2.6.0
easy_install --upgrade pip

Todos 35 comentários

Suspeito que isso seja devido a um conflito entre os pacotes Python instalados do gerenciador de pacotes do seu sistema operacional e pip como em # 6245.

Em qual sistema operacional Linux você está e como instalou o Certbot?

Eu tenho o mesmo (ou quase igual) erro:

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

Versão do sistema operacional: CentOS Linux versão 7.5.1804 (Core)

Edit2: Com relação a https://github.com/certbot/certbot/issues/6245 , python-urllib3 foi instalado usando yum, e a versão atual (1.10.2-5.el7) não tem o link simbólico mencionado em packages/ssl_match_hostname mas como um diretório regular com arquivos nele.

Tentar reproduzir o problema me leva a isto:

# 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

Portanto, aparentemente há uma dependência de versão silenciosa para urllib3.contrib.pyopenssl em pyOpenSSL v0.14, que não é fornecida pelo Centos7 neste ponto.

Edit: Depois de instalar uma versão mais recente (0.15.1) de https://cbs.centos.org/koji/buildinfo?buildID=1500 o erro acima vai embora, mas não o erro gerado pelo certbot.

Algumas tentativas e erros com usr/lib/python2.7/site-packages/acme/client.py me levaram a descobrir que quando eu comento a importação de from requests_toolbelt.adapters.source import SourceAddressAdapter , o erro desaparece!
Felizmente, isso é usado apenas uma vez, portanto, desde que eu forneça source_address , posso me safar com essa correção não tão sutil. :)

@ github-abcde, recomendo postar em https://community.letsencrypt.org. Em uma nova instalação do CentOS 7, ambos:

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

e

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

trabalhe para mim.

Além disso, depois de instalar python-urllib3 1.10.2-5.el7 , /usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py não contém código para gerar uma exceção se a versão pyOpenSSL for menor que 0,14.

Acho que você tem uma mistura de pacotes de várias fontes. Existe uma comunidade maior em https://community.letsencrypt.org que deve ser capaz de ajudá-lo a rastrear o problema.

Você está certo. Após uma pesquisa aprofundada, parecia que algo que deveria estar instalando um módulo usando pip3, na verdade o instalou usando python -m pip ... usando python2.7 e substituindo o urllib3/conrtib/pyopenssl.py ... Obrigado por suas dicas, que me forçaram a procurar mais :)

O mesmo problema que tenho aqui.

Arquivo "/usr/lib/python2.7/site-packages/acme/client.py", linha 39, em
urllib3.contrib.pyopenssl.inject_into_urllib3 ()
AttributeError: o objeto 'módulo' não tem atributo 'pyopenssl'

centos 7.3

Esta é a minha solução:

pip install requests==2.6.0
easy_install --upgrade pip

Também estou vendo isso agora. Uma nova instalação do Centos 7, sem nada mais instalado via pip, e certbot instalado via yum

Linux localhost.localdomain 3.10.0-862.2.3.el7.x86_64 # 1 SMP Quarta, 9 de maio 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

A dica de @monkeyWie não funcionou para mim

[ vagrant @ localhost ~] solicitações de instalação $ pip == 2.6.0
Requisito já satisfeito: solicitações == 2.6.0 em /usr/lib/python2.7/site-packages

Eu estava usando certbot muito bem até alguns dias atrás, quando não consigo fazê-lo funcionar em nenhuma das minhas novas compilações do 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 são causados ​​pela instalação de pacotes globalmente de yum e pip . Infelizmente, não posso ajudá-lo a limpar o ambiente Python em seu sistema, mas se você postar em https://community.letsencrypt.org, há uma grande base de usuários lá que poderá ajudar.

Eu tinha uma instalação limpa do Centos 7.6 e adicionei o Certbot do repositório Epel que causou o mesmo problema. Corrigido o problema ao executar
pip install requests==2.6.0

Vejo que isso ainda é um problema.

Mesmo.
CentOS Linux versão 7.6.1810 (Core)
Instalar:

sudo yum install certbot python2-certbot-nginx

E corra:

# 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 é a minha solução:

pip install requests==2.6.0
easy_install --upgrade pip

Trabalhou para mim no Centos 7

Acordado. A instalação padrão usando yum não está funcionando. Precisa consertar depois
instalação inicial. Seria desejável que ele fosse instalado em um estado de funcionamento.

No domingo, 14 de abril de 2019, 07:54 Michael Lindner, [email protected]
escrevi:

Esta é a minha solução:

solicitações de instalação pip == 2.6.0
easy_install --upgrade pip

Trabalhou para mim no Centos 7

-
Você está recebendo isto porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-482922170 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AMsov79Wu4KJJLs0jJUN-fhs6WO2YROuks5vgsKzgaJpZM4WS5Gq
.

Se alguém puder fornecer instruções sobre como reproduzir isso, idealmente em algo como o Docker, ficaria feliz em dar uma outra olhada, mas ainda acredito que isso só ocorre se você instalou pacotes Python de várias fontes.

Isso geralmente é causado pela instalação de pacotes de yum e pip e pela remoção dos pacotes que você instalou com pip e reinstalá-los com yum deve resolver o questão.

Posso confirmar que isso acontece com uma instalação limpa do Centos 7.6 usando o
Repo EPEL para adicionar certbot.

Na segunda-feira, 15 de abril de 2019, 19:35, Brad Warren, [email protected] escreveu:

Se alguém puder fornecer instruções sobre como reproduzir isso, idealmente em
algo como Docker, ficaria feliz em dar uma outra olhada, mas ainda
acredito que isso só ocorre se você instalou pacotes Python de vários
fontes.

Isso geralmente é causado pela instalação de pacotes do yum e pip e
removendo os pacotes que você instalou com pip e reinstalando-os
com o yum deve resolver o problema.

-
Você está recebendo isto porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-483346939 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AMsovzeRLjz2j0odmgWGxyyAVy9VBp3Tks5vhLhLgaJpZM4WS5Gq
.

Eu tive esse 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'
e pip não está instalado
[bob<strong i="10">@bla</strong> ~]# pip install requests==2.6.0 -bash: pip: command not found

Posso confirmar que isso acontece com uma instalação limpa do Centos 7.6 usando o repositório EPEL para adicionar o certbot.

Infelizmente, não posso reproduzi-lo no Docker ou em um VPS.

Eu ainda adoraria ver alguém conseguir reproduzir isso em algo facilmente repetível como o Docker, mas enquanto isso, para alguém que está resolvendo o problema, qual é a saída dos seguintes 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

Interessante. Esta é a segunda instalação limpa que fiz para o Centos 7.

Desta vez, fiz uma instalação limpa usando o ISO mínimo e está funcionando. Vejo que o pacote de solicitações Centos instalado também é 2.6. Possível que as solicitações tenham sido atualizadas porque originalmente apresentavam 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 acontece comigo no centos 7.6 junto com ovirt 4.3. As versões do pacote são

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 algo estranho aconteceu com o namespace urllib3.contrib ou algo assim?

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

O problema desaparece quando eu faço isso em 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 é a minha solução:

pip install requests==2.6.0
easy_install --upgrade pip

funcionou para mim no CentOS 7

Obrigado @monkeyWie - funcionou para mim no CentOS7

Esta é a minha solução:

pip install requests==2.6.0
easy_install --upgrade pip

pip install acme
funcionou para mim no Centos 7 depois que vi este erro

ERRO: o certbot 1.0.0 requer acme> = 0.40.0, que não está instalado.

PS Instale tudo do pip, ao invés de pacotes Centos, eles são antigos às vezes

Posso confirmar que isso acontece com uma instalação limpa do Centos 7.6 usando o repositório EPEL para adicionar o certbot.

Infelizmente, não posso reproduzi-lo no Docker ou em um VPS.

Eu ainda adoraria ver alguém conseguir reproduzir isso em algo facilmente repetível como o Docker, mas enquanto isso, para alguém que está resolvendo o problema, qual é a saída dos seguintes 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 meus resultados são os seguintes:

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

o que parece certo para mim. mas esses outros testes parecem falhar:

$ 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.

A versão de urllib3 empacotada em sistemas baseados em RHEL 7 é 1.10.2, mas você tem 1.25.7. Provavelmente foi instalado por meio de pip . Remover urllib3 e reinstalá-lo por meio de yum deve resolver esse problema.

Se você precisar de ajuda adicional com isso, recomendo postar em https://community.letsencrypt.org, onde há um grande grupo de pessoas familiarizadas com Certbot e administração de servidor que devem ser capazes de ajudá-lo.

JFYI. Eu tive o mesmo problema, mas não tenho pip / pip2 ou qualquer pacote pip instalado manualmente.

No meu caso, eu tinha centos-release-opstools que trouxe python2-urllib3 1.21.1-1.el7 and python2-requests 2.19.1-4.el7`.

Depois de desabilitar aquele repo e reinstalar os pacotes relevantes (eles foram renomeados para python-urllib3 1.10.2-7.el7 e python-requests 2.6.0-8.el7_7 partir do CentOS 7.7), o problema desapareceu.

@grossws , obrigado pela informação. Você se lembra qual foi a sua mensagem de erro?

Quando tento recriar essa configuração, o Certbot falha com:

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

Isso ocorre porque o pacote python2-pyOpenSSL 17.3.0-3.el7 alega que requer python-cryptography >= 1.3.0 , mas a dependência especificada em Python é cryptography>=1.9 que não está instalada.

@bmw , tive https://github.com/certbot/certbot/issues/6328#issuecomment -482531925

Tentei reproduzi-lo em um contêiner com apenas epel-release + centos-release-opstools mas obtive o mesmo conflito de versão sobre cryptography . Eu olhei no sistema original onde encontrei um erro e descobri que tenho um repo python2-cryptography mais recente de centos-release-ovirt42 .

Portanto, para reproduzir você pode executar o docker container com centos:7 e fazer

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

Isso é divertido (dependendo da sua definição de diversão).

Na imagem centos:7 Docker, se você executar:

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

O primeiro comando Python terá êxito, enquanto o segundo falhará. A única diferença é a importação de from requests_toolbelt.adapters.source import SourceAddressAdapter .

Estamos planejando descartar o suporte ao Python 2 nos próximos meses, momento em que podemos excluir este código. Por causa disso, a pequena equipe que mantém o Certbot provavelmente não vai gastar muito tempo nisso, mas se alguém quiser se aprofundar, acho que seria bom fazer com que o que quer que esteja causando esse problema seja relatado aos mantenedores do pacote .

Estou reabrindo isso por agora.

Acho que a suposição de alguma forma de corrupção está correta. Eu não tinha um pip python2 instalado, então não tenho certeza do que quebrei. No entanto, isso resolveu as coisas:

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 ajude alguém.

Isso funcionou no meu ambiente (centos 7 com urllib3 atualizado de pip como @bmw descrito acima .. meu comando "pip" também estava retornando erros, então precisei reinstalar):

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

Mantenedor do certbot do Fedora / CentOS aqui: NUNCA instale módulos em /usr/lib usando pip . Alguns pacotes CentOS são modificados para não duplicar o código existente ou para fortalecer as configurações de segurança. Os empacotadores da distribuição devem se certificar de que todos os pacotes necessários estão instalados.

Você pode verificar a instalação de pacotes Python não gerenciados com este comando:

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

Você não deve obter nenhuma saída.

Além disso, adicionar outros repositórios yum pode ser problemático. O Fedora EPEL deve funcionar 100% com os repositórios básicos da Red Hat / CentOS, mas não podemos levar em consideração nenhum outro repositório.

Se você apenas tiver os repositórios CentOS padrão (+ EPEL) habilitados e ainda assim travar, informe-nos. O melhor método é criar um problema no Bugzilla, mas @ -mentioning me aqui funciona bem (por enquanto - os mantenedores do certbot no Fedora / EPEL podem mudar).

@FelixSchwarz , e os pacotes de repo do CentOS SIG como centos-release-opstools ? Normalmente uso repos + epel padrão, mas fluentd está disponível apenas em opstools (

Em alguns casos, acabei de criar env virtual usando python3 -mvenv /path/to/new/venv e instalando o software necessário lá (digamos, certbot + verificador de dns obrigatório). Felizmente, ele não polui /usr/lib .

@grossws Fedora EPEL deve funcionar com tudo do RHEL Base (então pode haver outros produtos Red Hat em camadas que causam conflitos). Todas as outras fontes podem ser incompatíveis, a menos que esses repositórios sejam muito cuidadosos para não enviarem o mesmo material que o RHEL / EPEL.

Acabei de verificar os repositórios de

  • python2-msgpack: EPEL 7 tem 0.5.6-5.el7 , opstools 0.4.6-3.el7 (não é relevante para certbot mas para borgbackup que também mantenho no Fedora / EPEL.
  • python2-requests: EPEL 7 tem 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 envia 2.4-1.el7 , opstools 2.5-1.el7 ( python2-idna )

Isso não significa que o centos-opstools repo não funcione com os pacotes certbot da EPEL, mas existem alguns conflitos e esta é definitivamente uma configuração não testada. Além disso, centos-opstools substitui um pacote na base do RHEL, o que significa que você deve ser extremamente cuidadoso, pois isso também pode quebrar muitas coisas na distro principal.

tl; dr: Se você usa os pacotes certbot da EPEL, não deve usar outros repositórios yum / dnf, pois eles são provavelmente incompatíveis. Peça ao provedor de repo a compatibilidade com a base RHEL e Fedora EPEL.

Além disso, descobri que não foi tão difícil contribuir para o Fedora EPEL, então se você estiver perdendo um pacote, considere se tornar um mantenedor do pacote (envie um ping se precisar de orientação).

Acho que a suposição de alguma forma de corrupção está correta. Eu não tinha um pip python2 instalado, então não tenho certeza do que quebrei. No entanto, isso resolveu as coisas:

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 ajude alguém.

Isso ajudou no meu caso (outras soluções deste tópico não ajudaram). Obrigado.

Esta página foi útil?
0 / 5 - 0 avaliações