Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
zwl1619 opened this issue Sep 12, 2017 · 34 comments

Comments

@zwl1619
Copy link

commented Sep 12, 2017

I use nginx on centos 7.3,there is an error when running certbot --nginx:

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

[root@demo 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'

packages:

[root@demo 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)

What should I do?

@SwartzCr

This comment has been minimized.

Copy link
Contributor

commented Sep 12, 2017

How did you install certbot?
It's likely that pip installing urllib3 should fix it - but there might be an easier way. For example it's packaged as an rpm, which is likely the preferred way to install it on centos: https://www.rpmfind.net/linux/rpm2html/search.php?query=python-urllib3
But it's surprising that nothing installed this as a dependency. Did you install certbot from your package manager? Did you follow these instructions? https://certbot.eff.org/#centosrhel7-nginx

@zwl1619

This comment has been minimized.

Copy link
Author

commented Sep 13, 2017

@SwartzCr

This comment has been minimized.

Copy link
Contributor

commented Sep 13, 2017

Can you try to update your versions of requests and six as mentioned in #4886 - I think it's the same problem. @erikrose is this a situation where we need to submit something upstream to centOS or RHEL?

@erikrose

This comment has been minimized.

Copy link
Collaborator

commented Sep 15, 2017

He seems to have the latest version of requests already, and six is there, so it's a different situation than #4884.

@wardmundy

This comment has been minimized.

Copy link

commented Sep 21, 2017

On CentOS 7, the only way to get urllib3 (1.22) is using pip install. The yum version with epel is very old: python-urllib3.noarch 0:1.10.2-3.el7 and triggers a wrong version error. But, after installing certbot-apache with urllib3 v.1.22 in place, you get this when running certbot --apache:
ImportError: No module named 'requests.packages.urllib3'
I think I have all the latest packages in place:
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)

@wardmundy

This comment has been minimized.

Copy link

commented Sep 21, 2017

Update. This seems to have fixed it...

pip install requests urllib3 pyOpenSSL --force --upgrade

@wardmundy

This comment has been minimized.

Copy link

commented Sep 21, 2017

But then you get this when running certbot --apache:
AttributeError: 'module' object has no attribute 'rand'

@akosveres

This comment has been minimized.

Copy link

commented Sep 21, 2017

Seeing the same issue on a brand new installation of centos 7.3. Also tried installing python2-certbot, getting the same error as @wardmundy . Was trying to run certbot-2 --standalone.

@akosveres

This comment has been minimized.

Copy link

commented Sep 21, 2017

I've tried installing an older version, 0.14.0, got the same error. I went down the manual route, that worked, I got my cert successfully.

@SwartzCr

This comment has been minimized.

Copy link
Contributor

commented Sep 21, 2017

@wardmundy and @akosveres the rand issue was fixed in 7f5f647
and will be released soon in a bugfix release with version number 0.18.2
This was caused by openssl deprecating it's support of rand ahead of schedule as discussed here: #5112 (comment)
Are people still experiencing urllib3 issues?

@Akagilnc

This comment has been minimized.

Copy link

commented Oct 5, 2017

I tried to install certbot on Centos 7 today. I follow this https://certbot.eff.org/#centosrhel7-other step by step.
when I try to run sudo certbot certonly it told me the urllib3 is not found

after I run pip install requests urllib3 pyOpenSSL --upgrade
the error message change to
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

@jcguevara

This comment has been minimized.

Copy link

commented Oct 9, 2017

I got the same error like @Deronlee .
Anything new?

@Akagilnc

This comment has been minimized.

Copy link

commented Oct 9, 2017

@jcguevara finally I found the best way is use docker

@bmw

This comment has been minimized.

Copy link
Member

commented Oct 10, 2017

At least in some of these cases, I'm suspicious of corrupted Python environments where packages have been pip installed, overriding versions of packages provided by your operating system. We strongly recommend you do not do this.

If you've already found yourself in this position, I recommend you use certbot-auto which has a minimal reliance on the Python packages found on your system.

@jcguevara

This comment has been minimized.

Copy link

commented Oct 11, 2017

@Deronlee thanks for your advice.

I just solve it downloading it directly from GitHub and running certbot-auto as @bmw recommended.

@Akagilnc

This comment has been minimized.

Copy link

commented Oct 11, 2017

@jcguevara Thanks. I will try it later.

@fanglijun

This comment has been minimized.

Copy link

commented Oct 19, 2017

cerbot-auto surprisingly works! why are there so many extra tools to do this? ( ˇˍˇ )

@hhstore

This comment has been minimized.

Copy link

commented Oct 23, 2017

reason:

  • env: mac osx + Python2.7.13
  • you guys should check openssl version.
  • the mac osx default openssl version is 0.9.8zh 14 Jan 2016.
  • when you use brew install openssl, the current version is stable 1.0.2l.
  • but if you use brew install openssl@1.1, this version will Cause No Module Found Urllib3 issue.

How to fix:

brew uninstall openssl@1.1

# openssl: stable 1.0.2l
brew install openssl
  • then, you will find Urllib3 issue is fixed.
@thanhtien522

This comment has been minimized.

Copy link

commented Nov 10, 2017

After run this command
pip install requests urllib3 pyOpenSSL --force --upgrade

As @Deronlee said:

the error message change to
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

I install pyOpenSSL version 16.2.0 and it worked for me.
pip install pyOpenSSL==16.2.0

@Akagilnc

This comment has been minimized.

Copy link

commented Nov 10, 2017

@Akagilnc

This comment has been minimized.

Copy link

commented Nov 10, 2017

@thanhtien522
Thanks. I try to install the lastest version but not working. Maybe I should try the special version

@SwartzCr

This comment has been minimized.

Copy link
Contributor

commented Nov 14, 2017

@Deronlee can you tell me:

  • What version of your OS you're running?
  • What version of Certbot you have installed?
  • How you installed Certbot
  • The output of pip freeze?
@Tamce

This comment has been minimized.

Copy link

commented Dec 5, 2017

@SwartzCr I have the same issue with @Deronlee
So I run command
pip install requests urllib3 pyOpenSSL --force --upgrade
and I got an error like this:
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
Then I tried what @thanhtien522 mentioned running
pip install pyOpenSSL==16.2.0
But it still doesn't work for me, I still got the same error which is telling me that pyOpenSSL is missing.

  • OS: PRETTY_NAME="CentOS Linux 7 (Core)"
  • Certbot version: certbot.noarch 0.19.0-1.el7 @epel
  • Installed Certbot by running yum install certbot-nginx
  • And the output of pip freeze are shown below
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
@SwartzCr

This comment has been minimized.

Copy link
Contributor

commented Dec 5, 2017

It looks like foremost we need to bump the version of pyOpenSSL that we depend on for certbot in centos, here's what I get on a fresh install:

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

Where it should probably be a version over 0.14
Which might mean that someone needs to package it for centos - @bmw is @hogarthj the person I should contact about that?

@bmw

This comment has been minimized.

Copy link
Member

commented Dec 7, 2017

Yes, hogarthj is our Red Hat/Fedora packaging contact but is more responsive over email. I'm happy to introduce you sometime, but I don't think there are any changes needed on his end here.

CentOS 7 is one of our more popular platforms and we regularly test on CentOS 7 without issue. Most of the people in this thread report having requests 2.18.x. Requests 2.6.0 is included in the CentOS 7 repos. If you mix Python packages from your OS and pip, you're going to have a bad time.

People on CentOS 7 having this issue can work around the problem by undoing the changes to their Python packages done through pip or by using certbot-auto which works around the problem by not relying on the Python packages installed on your system.

@smalenfant

This comment has been minimized.

Copy link

commented Jan 3, 2018

I followed these instructions (my version of urllib3 didn't work as well) and then certbot could be executed... Hopefully that helps.

I'm sure these can be collapsed into less commands...

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

@z0x010

This comment has been minimized.

Copy link

commented Jan 8, 2018

I has try it ,use these commands, and it works !

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
@sreezree

This comment has been minimized.

Copy link

commented Jan 31, 2018

do we can use pip later in future after using yum?

@SwartzCr

This comment has been minimized.

Copy link
Contributor

commented Jan 31, 2018

@sreezree you should not use pip to install certbot related packages as they will conflict with the ones that certbot installs

@searene

This comment has been minimized.

Copy link

commented Mar 6, 2018

None of those methods mentioned above work for me, the error message remains the same. ImportError: No module named 'requests.packages.urllib3'

@DukeCaesar

This comment has been minimized.

Copy link

commented Mar 16, 2018

I run into the same error on CentOS 7.4:
ImportError: No module named 'requests.packages.urllib3'
and tried smalenfant's suggested solution. Works beautifully.

@wgqi1126

This comment has been minimized.

Copy link

commented Jul 13, 2018

I got same error.

I found that has an error when install 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

and I try reinstall it then got same error

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

it's failed but final show Complete!, how it Complete!?

so i gg found tianchao friends said it's conflict with pip version

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

and i uninstall pip version and instal yum version

pip uninstall urllib3
yum install python-urllib3

after that i got another error

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

so, what fuck, i'm crying 😭

after that tried

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

and it works .....

so i think is requests version not match urllib3

so it tried in anther same env machine

first remove requests and urllib3

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

install certbot

that OK

@Augustin-FL

This comment has been minimized.

Copy link

commented Apr 24, 2019

This error is actually printed because of a failed try..catch in the internal python code of requests :

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

This issue happens when urllib3 cannot be found, but also when urllib3 cannot be loaded for whatever reason.

@hyliker

This comment has been minimized.

Copy link

commented Jul 12, 2019

You can remove the old cerbot, and then try to install it via pip. which should work.

sudo pip install certbot
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
You can’t perform that action at this time.