Home > Mobile >  Python throwing error around API when using requests
Python throwing error around API when using requests

Time:11-04

I'm new to APIs and am following the exact instructions of every website explaining how one is supposed to get help of the APIs in Python using the requests module. However, no matter what API link I define (of course I went for many free API samples just to test if they work), I get this error: ImportError: cannot import name 'b64encode' from 'base64' I have no idea what the problem is, or what I'm not getting right. Here's my snippet, just as a sample:

import requests

words = 30
paragraphs = 1
formats = 'text'

response = requests.get(f"https://v2.jokeapi.dev/")
print(response.text)

The complete error I get is like so:

Traceback (most recent call last):
  File "/home/liana/Desktop/testing.py", line 1, in <module>
    import requests
  File "/usr/lib/python3/dist-packages/requests/__init__.py", line 43, in <module>
    import urllib3
  File "/usr/lib/python3/dist-packages/urllib3/__init__.py", line 11, in <module>
    from . import exceptions
  File "/usr/lib/python3/dist-packages/urllib3/exceptions.py", line 3, in <module>
    from six.moves.http_client import IncompleteRead as httplib_IncompleteRead
  File "/usr/lib/python3/dist-packages/six.py", line 203, in load_module
    mod = mod._resolve()
  File "/usr/lib/python3/dist-packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/usr/lib/python3/dist-packages/six.py", line 82, in _import_module
    __import__(name)
  File "/usr/lib/python3.9/http/client.py", line 71, in <module>
    import email.parser
  File "/usr/lib/python3.9/email/parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "/usr/lib/python3.9/email/feedparser.py", line 27, in <module>
    from email._policybase import compat32
  File "/usr/lib/python3.9/email/_policybase.py", line 7, in <module>
    from email import header
  File "/usr/lib/python3.9/email/header.py", line 17, in <module>
    import email.base64mime
  File "/usr/lib/python3.9/email/base64mime.py", line 37, in <module>
    from base64 import b64encode
ImportError: cannot import name 'b64encode' from 'base64' (/home/liana/Desktop/base64.py)
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 72, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 21, in <module>
    from urllib.request import urlopen
File "/usr/lib/python3.9/urllib/request.py", line 88, in <module>
    import http.client
  File "/usr/lib/python3.9/http/client.py", line 71, in <module>
    import email.parser
  File "/usr/lib/python3.9/email/parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "/usr/lib/python3.9/email/feedparser.py", line 27, in <module>
    from email._policybase import compat32
  File "/usr/lib/python3.9/email/_policybase.py", line 7, in <module>
    from email import header
  File "/usr/lib/python3.9/email/header.py", line 17, in <module>
    import email.base64mime
  File "/usr/lib/python3.9/email/base64mime.py", line 37, in <module>
    from base64 import b64encode
ImportError: cannot import name 'b64encode' from 'base64' (/home/liana/Desktop/base64.py)
Original exception was:
Traceback (most recent call last):
  File "/home/liana/Desktop/testing.py", line 1, in <module>
    import requests
  File "/usr/lib/python3/dist-packages/requests/__init__.py", line 43, in <module>
    import urllib3
  File "/usr/lib/python3/dist-packages/urllib3/__init__.py", line 11, in <module>
    from . import exceptions
  File "/usr/lib/python3/dist-packages/urllib3/exceptions.py", line 3, in <module>
    from six.moves.http_client import IncompleteRead as httplib_IncompleteRead
  File "/usr/lib/python3/dist-packages/six.py", line 203, in load_module
    mod = mod._resolve()
  File "/usr/lib/python3/dist-packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/usr/lib/python3/dist-packages/six.py", line 82, in _import_module
    __import__(name)
  File "/usr/lib/python3.9/http/client.py", line 71, in <module>
    import email.parser
  File "/usr/lib/python3.9/email/parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "/usr/lib/python3.9/email/feedparser.py", line 27, in <module>
    from email._policybase import compat32
  File "/usr/lib/python3.9/email/_policybase.py", line 7, in <module>
    from email import header
  File "/usr/lib/python3.9/email/header.py", line 17, in <module>
    import email.base64mime
  File "/usr/lib/python3.9/email/base64mime.py", line 37, in <module>
    from base64 import b64encode
ImportError: cannot import name 'b64encode' from 'base64' (/home/liana/Desktop/base64.py)

Any help is appreciated.

CodePudding user response:

If you look carefully at the traceback, you will see that it starts with your script, "/home/liana/Desktop/testing.py", goes through a chain of imports, and ends up crashing trying to import b64encode from base64.py.

The file /home/liana/Desktop/base64.py is something you either created or downloaded. Since it's in the current directory, it supersedes the real base64.py that "/usr/lib/python3.9/email/base64mime.py" is looking for. The file in your current directory clearly does not define the name b64encode, which is the immediate cause of the error.

To fix the problem, make sure the names of the files in your current directory don't conflict with the names of other top level modules. So either rename it delete /home/liana/Desktop/base64.py.

  • Related