Certbot: ImportError: Nenhum módulo chamado 'request.packages.urllib3'

Criado em 12 set. 2017  ·  37Comentários  ·  Fonte: certbot/certbot

Eu uso o nginx no centos 7.3, há um erro ao executar certbot --nginx :

ImportError: No module named 'requests.packages.urllib3'

[root<strong i="9">@demo</strong> src]# certbot --nginx
Traceback (most recent call last):
  File "/usr/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.14.1', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 564, 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 2662, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2316, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2322, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 14, in <module>
    from certbot import account
  File "/usr/lib/python2.7/site-packages/certbot/account.py", line 17, in <module>
    from acme import messages
  File "/usr/lib/python2.7/site-packages/acme/messages.py", line 4, in <module>
    from acme import challenges
  File "/usr/lib/python2.7/site-packages/acme/challenges.py", line 10, in <module>
    import requests
  File "/usr/lib/python2.7/site-packages/requests/__init__.py", line 58, in <module>
    from . import utils
  File "/usr/lib/python2.7/site-packages/requests/utils.py", line 32, in <module>
    from .exceptions import InvalidURL
  File "/usr/lib/python2.7/site-packages/requests/exceptions.py", line 10, in <module>
    from .packages.urllib3.exceptions import HTTPError as BaseHTTPError
  File "/usr/lib/python2.7/site-packages/requests/packages/__init__.py", line 95, in load_module
    raise ImportError("No module named '%s'" % (name,))
ImportError: No module named 'requests.packages.urllib3'

pacotes:

[root<strong i="13">@demo</strong> src]# pip list
acme (0.14.1)
backports.ssl-match-hostname (3.4.0.2)
certbot (0.14.1)
certifi (2017.7.27.1)
cffi (1.6.0)
chardet (3.0.4)
Cheetah (2.4.4)
cloud-init (0.7.6)
ConfigArgParse (0.11.0)
configobj (4.7.2)
cryptography (1.3.1)
decorator (3.4.0)
enum34 (1.0.4)
future (0.16.0)
idna (2.6)
iniparse (0.4)
ipaddress (1.0.16)
IPy (0.75)
Jinja2 (2.9.6)
jsonpatch (1.16)
jsonpointer (1.10)
kitchen (1.1.1)
Markdown (2.6.8)
MarkupSafe (1.0)
mock (1.0.1)
ndg-httpsclient (0.3.2)
oauth (1.0.1)
parsedatetime (1.5)
perf (0.1)
pip (9.0.1)
ply (3.4)
policycoreutils-default-encoding (0.1)
prettytable (0.7.2)
psutil (2.2.1)
pyasn1 (0.1.9)
pycparser (2.14)
pycurl (7.19.0)
pygobject (3.14.0)
pygpgme (0.3)
pyliblzma (0.5.3)
pyOpenSSL (0.13.1)
pyparsing (1.5.6)
pyRFC3339 (1.0)
python2-pythondialog (3.3.0)
pytz (2012d)
pyudev (0.15)
pyxattr (0.5.1)
PyYAML (3.12)
requests (2.18.4)
seobject (0.1)
sepolicy (1.1)
setuptools (36.2.7)
six (1.9.0)
slip (0.4.0)
slip.dbus (0.4.0)
urlgrabber (3.10)
urllib3 (1.22)
yum-axelget (1.0.4)
yum-metadata-parser (1.1.4)
zope.component (4.1.0)
zope.event (4.0.3)
zope.interface (4.0.5)

O que devo fazer?

fedora / redhat / CentOS pkging debugging

Comentários muito úteis

Atualizar. Parece que isso corrigiu ...

pip install requests urllib3 pyOpenSSL --force --upgrade

Todos 37 comentários

Como você instalou o certbot?
É provável que o pip instalando o urllib3 conserte isso - mas pode haver uma maneira mais fácil. Por exemplo, está empacotado como rpm, que é provavelmente a maneira preferida de instalá-lo em centos: https://www.rpmfind.net/linux/rpm2html/search.php?query=python-urllib3
Mas é surpreendente que nada tenha instalado isso como uma dependência. Você instalou o certbot do seu gerenciador de pacotes? Você seguiu essas instruções? https://certbot.eff.org/#centosrhel7 -nginx

@SwartzCr Sim, fiz seguindo https://certbot.eff.org/#centosrhel7 -nginx

Você pode tentar atualizar suas versões de solicitações e seis conforme mencionado em # 4886 - Acho que é o mesmo problema. @erikrose é uma situação em que precisamos enviar algo upstream para centOS ou RHEL?

Ele parece já ter a versão mais recente de solicitações, e seis já está lá, então é uma situação diferente de # 4884.

No CentOS 7, a única maneira de obter o urllib3 (1.22) é usando pip install. A versão do yum com epel é muito antiga: python-urllib3.noarch 0: 1.10.2-3.el7 e dispara um erro de versão errada. Mas, depois de instalar o certbot-apache com urllib3 v.1.22 no lugar, você obtém isso ao executar certbot --apache :
ImportError: No module named 'requests.packages.urllib3'
Acho que tenho todos os pacotes mais recentes disponíveis:
certbot (0.18.1) certbot-apache (0.18.1) certifi (2017.7.27.1) pycurl (7.19.0) requests (2.18.4) six (1.11.0) urlgrabber (3.10) urllib3 (1.22)

Atualizar. Parece que isso corrigiu ...

pip install requests urllib3 pyOpenSSL --force --upgrade

Mas você consegue isso ao executar certbot --apache :
AttributeError: 'module' object has no attribute 'rand'

Vendo o mesmo problema em uma nova instalação do centos 7.3. Também tentei instalar python2-certbot , obtendo o mesmo erro de @wardmundy . Estava tentando executar certbot-2 --standalone .

Tentei instalar uma versão mais antiga, 0.14.0, e recebi o mesmo erro. Desci a rota manual, funcionou, tirei meu certificado com sucesso.

@wardmundy e @akosveres, o problema rand foi corrigido em https://github.com/certbot/certbot/commit/7f5f6471fea939c70294c2f31875d90320482861
e será lançado em breve em uma versão de correção de bug com número de versão 0.18.2
Isso foi causado porque o openssl suspendeu seu suporte ao rand antes do previsto, conforme discutido aqui: https://github.com/certbot/certbot/pull/5112#issuecomment -331046450
As pessoas ainda estão tendo problemas com o urllib3?

Tentei instalar o certbot no Centos 7 hoje. Eu sigo este https://certbot.eff.org/#centosrhel7 -outro passo a passo.
quando tento executar sudo certbot certonly ele me diz que o urllib3 não foi encontrado

depois de executar pip install requests urllib3 pyOpenSSL --upgrade
a mensagem de erro muda para
ImportError: módulo 'pyOpenSSL' sem a funcionalidade necessária. Tente atualizar para v0.14 ou mais recente.

Recebi o mesmo erro como @DeronLee .
Alguma coisa nova?

@jcguevara finalmente descobri que a melhor maneira é usar o docker

Pelo menos em alguns desses casos, suspeito de ambientes Python corrompidos onde os pacotes foram pip instalados, substituindo as versões dos pacotes fornecidos pelo seu sistema operacional. Recomendamos fortemente que você não faça isso.

Se você já se encontrou nesta posição, recomendo que use o certbot-auto, que tem uma dependência mínima dos pacotes Python encontrados em seu sistema.

@DeronLee obrigado pelo seu conselho.

Acabei de resolver o problema baixando-o diretamente do GitHub e executando certbot-auto conforme recomendado por @bmw .

@jcguevara Obrigado. Eu vou tentar mais tarde.

cerbot-auto funciona surpreendentemente! por que existem tantas ferramentas extras para fazer isso? (ˇˍˇ)

razão:

  • env: mac osx + Python2.7.13
  • vocês deveriam verificar a versão openssl .
  • a versão do openssl padrão do mac osx é 0.9.8zh 14 Jan 2016 .
  • quando você usa brew install openssl , a versão atual é stable 1.0.2l .
  • mas se você usar brew install [email protected] , esta versão causará No Module Found Urllib3 problema.

Como consertar:


brew uninstall [email protected]

# openssl: stable 1.0.2l
brew install openssl

  • então, você descobrirá que o problema Urllib3 foi corrigido.

Depois de executar este comando
pip install requests urllib3 pyOpenSSL --force --upgrade

Como @DeronLee disse:

a mensagem de erro muda para
ImportError: módulo 'pyOpenSSL' sem a funcionalidade necessária. Tente atualizar para v0.14 ou mais recente.

Eu instalei o pyOpenSSL versão 16.2.0 e funcionou para mim.
pip install pyOpenSSL==16.2.0

Obrigado. Tento instalar a versão mais recente, mas não funciona. Talvez eu
deveria tentar a versão especial

Em 11 de novembro de 2017, 1h04, "Nguyễn Thanh Tiến" [email protected]
escrevi:

Depois de executar este comando
pedidos de instalação pip urllib3 pyOpenSSL --force --upgrade

Como @DeronLee https://github.com/deronlee disse:

a mensagem de erro muda para
ImportError: módulo 'pyOpenSSL' sem a funcionalidade necessária. Experimentar
atualizando para v0.14 ou mais recente.

Eu instalei o pyOpenSSL versão 16.2.0 e funcionou para mim.
pip install pyOpenSSL == 16.2.0

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/certbot/certbot/issues/5104#issuecomment-343529478 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ALj8rHCKhYhwrgCEfvzwVaveagxIVMmtks5s1IIBgaJpZM4PUFnt
.

@ thanhtien522
Obrigado. Tento instalar a versão mais recente, mas não funciona. Talvez eu deva tentar a versão especial

@DeronLee você pode me dizer:

  • Qual versão do seu sistema operacional você está usando?
  • Qual versão do Certbot você instalou?
  • Como você instalou o Certbot
  • A saída de pip freeze ?

@SwartzCr Tenho o mesmo problema com @DeronLee
Então eu executo o comando
pip install requests urllib3 pyOpenSSL --force --upgrade
e recebo um erro como este:
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
Então tentei o que @ thanhtien522 mencionou correr
pip install pyOpenSSL==16.2.0
Mas ainda não funciona para mim, ainda recebo o mesmo erro que diz que pyOpenSSL está faltando.

  • SO: PRETTY_NAME="CentOS Linux 7 (Core)"
  • Versão do Certbot: certbot.noarch 0.19.0-1.el7 @epel
  • Certbot instalado executando yum install certbot-nginx
  • E a saída de pip freeze é mostrada abaixo
acme==0.19.0
asn1crypto==0.23.0
backports.ssl-match-hostname==3.4.0.2
certbot==0.19.0
certbot-nginx==0.19.0
certifi==2017.11.5
cffi==1.11.2
chardet==3.0.4
Cheetah==2.4.4
cloud-init==0.7.6
ConfigArgParse==0.11.0
configobj==4.7.2
cryptography==2.1.4
decorator==3.4.0
enum34==1.1.6
future==0.16.0
idna==2.6
iniparse==0.4
ipaddress==1.0.18
IPy==0.75
Jinja2==2.9.6
jsonpatch==1.16
jsonpointer==1.12
kitchen==1.1.1
Markdown==2.6.9
MarkupSafe==1.0
mock==1.0.1
ndg-httpsclient==0.3.2
oauth==1.0.1
parsedatetime==1.5
perf==0.1
ply==3.4
policycoreutils-default-encoding==0.1
prettytable==0.7.2
psutil==2.2.1
pyasn1==0.1.9
pycparser==2.18
pycurl==7.19.0
pygobject==3.22.0
pygpgme==0.3
pyliblzma==0.5.3
pyOpenSSL==16.2.0
pyparsing==1.5.6
pyRFC3339==1.0
python-linux-procfs==0.4.9
python2-pythondialog==3.3.0
pytz==2016.10
pyudev==0.15
pyxattr==0.5.1
PyYAML==3.12
requests==2.18.4
schedutils==0.4
seobject==0.1
sepolicy==1.1
six==1.11.0
slip==0.4.0
slip.dbus==0.4.0
urlgrabber==3.10
urllib3==1.22
yum-metadata-parser==1.1.4
zope.component==4.1.0
zope.event==4.0.3
zope.interface==4.0.5

Parece que, acima de tudo, precisamos alterar a versão do pyOpenSSL da qual dependemos para o certbot em centos. Aqui está o que obtenho em uma nova instalação:

Dependencies Resolved

==================================================================================================
 Package                        Arch           Version                      Repository       Size
==================================================================================================
Installing:
 python2-certbot-nginx          noarch         0.19.0-1.el7                 epel             53 k
Installing for dependencies:
 certbot                        noarch         0.19.0-1.el7                 epel             20 k
 dialog                         x86_64         1.2-4.20130523.el7           base            208 k
 pyOpenSSL                      x86_64         0.13.1-3.el7                 base            133 k
 pyparsing                      noarch         1.5.6-9.el7                  base             94 k
 python-cffi                    x86_64         1.6.0-5.el7                  base            218 k
 python-enum34                  noarch         1.0.4-1.el7                  base             52 k
 python-idna                    noarch         2.4-1.el7                    base             94 k
 python-ipaddress               noarch         1.0.16-2.el7                 base             34 k
 python-ndg_httpsclient         noarch         0.3.2-1.el7                  epel             43 k
 python-parsedatetime           noarch         1.5-3.el7                    epel             61 k
 python-ply                     noarch         3.4-11.el7                   base            123 k
 python-pycparser               noarch         2.14-1.el7                   base            104 k
 python-zope-component          noarch         1:4.1.0-3.el7                epel            227 k
 python-zope-event              noarch         4.0.3-2.el7                  epel             79 k
 python-zope-interface          x86_64         4.0.5-4.el7                  base            138 k
 python2-acme                   noarch         0.19.0-1.el7                 epel            176 k
 python2-certbot                noarch         0.19.0-1.el7                 epel            471 k
 python2-configargparse         noarch         0.11.0-1.el7                 epel             30 k
 python2-cryptography           x86_64         1.7.2-1.el7_4.1              updates         502 k
 python2-dialog                 noarch         3.3.0-6.el7                  epel             94 k
 python2-future                 noarch         0.16.0-2.el7                 epel            799 k
 python2-mock                   noarch         1.0.1-9.el7                  epel             92 k
 python2-psutil                 x86_64         2.2.1-3.el7                  epel            116 k
 python2-pyasn1                 noarch         0.1.9-7.el7                  base            100 k
 python2-pyrfc3339              noarch         1.0-2.el7                    epel             13 k
 pytz                           noarch         2016.10-2.el7                base             46 k

Onde provavelmente deveria haver uma versão acima de 0,14
O que pode significar que alguém precisa empacotá-lo para centos - @bmw é @hogarthj a pessoa que devo contatar sobre isso?

Sim, hogarthj é nosso contato de empacotamento do Red Hat / Fedora, mas responde melhor por e-mail. Estou feliz em apresentá-lo algum dia, mas não acho que haja qualquer mudança necessária em sua extremidade aqui.

CentOS 7 é uma das nossas plataformas mais populares e testamos regularmente no CentOS 7 sem problemas. A maioria das pessoas neste tópico relata ter solicitações 2.18.x. Os pedidos 2.6.0 estão incluídos nos repos do CentOS 7. Se você misturar pacotes Python do seu sistema operacional e pip , você vai se divertir.

Pessoas no CentOS 7 com esse problema podem contornar o problema desfazendo as alterações em seus pacotes Python feitas por meio de pip ou usando certbot-auto que resolve o problema por não depender dos pacotes Python instalados em seu sistema .

Segui essas instruções (minha versão do urllib3 não funcionou tão bem) e então o certbot pôde ser executado ... Espero que ajude.

Tenho certeza que eles podem ser reduzidos em menos comandos ...

pedidos de desinstalação pip
pip desinstalação urllib3
yum remove python-urllib3
yum remove python-requests
yum install python-urllib3
yum install python-requests
yum install certbot

Tentei, use esses comandos e funciona!

pip uninstall requests
pip uninstall urllib3
yum remove python-urllib3
yum remove python-requests
yum install python-urllib3
yum install python-requests
yum install certbot
yum install docker-compose

podemos usar pip mais tarde no futuro, depois de usar o yum?

@sreezree, você não deve usar o pip para instalar pacotes relacionados ao certbot, pois eles entrarão em conflito com aqueles que o certbot instala

Nenhum dos métodos mencionados acima funciona para mim, a mensagem de erro permanece a mesma. ImportError: No module named 'requests.packages.urllib3'

Encontro o mesmo erro no CentOS 7.4:
ImportError: Nenhum módulo chamado 'request.packages.urllib3'
e tentei a solução sugerida por smalenfant. Funciona lindamente.

Eu tenho o mesmo erro.

Descobri que há um erro ao instalar o certbot

  Installing : pytz-2016.10-2.el7.noarch                                                                                                                  12/55
  Installing : python2-parsedatetime-2.4-5.el7.noarch                                                                                                     13/55
  Installing : python-urllib3-1.10.2-5.el7.noarch                                                                                                         14/55
Error unpacking rpm package python-urllib3-1.10.2-5.el7.noarch
error: unpacking of archive failed on file /usr/lib/python2.7/site-packages/urllib3/packages/ssl_match_hostname: cpio: rename
  Installing : libsemanage-python-2.5-11.el7.x86_64                                                                                                       15/55
error: python-urllib3-1.10.2-5.el7.noarch: install failed
  Installing : python-ndg_httpsclient-0.3.2-1.el7.noarch                                                                                                  16/55
  Installing : python2-six-1.9.0-0.el7.noarch                                                                                                             17/55

error: unpacking of archive failed on file /usr/lib/python2.7/site-packages/urllib3/packages/ssl_match_hostname: cpio: rename

error: python-urllib3-1.10.2-5.el7.noarch: install failed

e eu tento reinstalá-lo, então tenho o mesmo erro

# yum install python-urllib3
Error unpacking rpm package python-urllib3-1.10.2-5.el7.noarch
error: unpacking of archive failed on file /usr/lib/python2.7/site-packages/urllib3/packages/ssl_match_hostname: cpio: rename
  Verifying  : python-urllib3-1.10.2-5.el7.noarch                                                                                                           1/1

Failed:
  python-urllib3.noarch 0:1.10.2-5.el7

Complete!

falhou, mas o show final Complete! , como é que Complete! ?

então eu encontrei tianchao amigos disseram que está em conflito com a versão pip

https://blog.csdn.net/u013614281/article/details/76832818

e eu desinstalo a versão pip e instalo a versão yum

pip uninstall urllib3
yum install python-urllib3

depois disso eu tive outro erro

pkg_resources.DistributionNotFound: The 'urllib3<1.23,>=1.21.1' distribution was not found and is required by requests

então, que porra, estou chorando 😭

depois disso tentei

pip uninstall requests
yum remove python-requests
yum install python-requests
yum install certbot

e funciona .....

então eu acho que a versão do request não corresponde ao urllib3

então tentei em outra mesma máquina env

primeiro remova os pedidos e urllib3

pip uninstall requests
pip uninstall urllib3
yum remove python-urllib3
yum remove python-requests

instalar certbot

está ok

Na verdade, esse erro foi impresso devido a uma falha no try..catch no código interno de solicitações do Python:

try: 
   import urllib3
except: 
   import requests.packages.urllib3

Esse problema ocorre quando o urllib3 não pode ser encontrado, mas também quando o urllib3 não pode ser carregado por algum motivo.

Você pode remover o cerbot antigo e, em seguida, tentar instalá-lo via pip. que deve funcionar.

sudo pip install certbot

Tentei, use esses comandos e funciona!

pip uninstall requests
pip uninstall urllib3
yum remove python-urllib3
yum remove python-requests
yum install python-urllib3
yum install python-requests
yum install certbot
yum install docker-compose

Ótimo, problema resolvido!

Recomenda-se a instalação por

Para esclarecer, o método de instalação recomendado em sistemas baseados em RHEL 7 é usar EPEL .

Os problemas neste tópico são geralmente causados ​​por uma instalação interrompida do Python causada por pacotes instalados de pip conflito com os instalados de yum . Remover os pacotes que você instalou por meio de pip deve resolver o problema.

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