'Module object has no attribute 'get' Python error Requests?
Question:
I just installed the Requests module by using easy_install
and I tried to run the demo code of this tutorial,
import requests
payload = {'username': 'xxxx', 'password': 'xxxxx'}
r = requests.get('https://github.com/timeline.json')
but I get this error:
AttributeError: 'module' object has no attribute 'get'
Answers:
You have to variants of how to fix this.
import requests
or
r = get('https://github.com/timeline.json')
P.S. First one is preferable
You are importing all names from the requests
module into your local namespace, which means you do not need to prefix them anymore with the module name:
>>> from requests import *
>>> get
<function get at 0x107820b18>
If you were to import the module with an import requests
statement instead, you added the module itself to your namespace and you do have to use the full name:
>>> import requests
>>> requests.get
<function get at 0x102e46b18>
Note that the above examples is what I got from my tests in the interpreter. If you get different results, you are importing the wrong module; check if you have an extra requests.py
file in your python package:
>>> import requests
>>> print requests.__file__
/private/tmp/requeststest/lib/python2.7/site-packages/requests/__init__.pyc
You can also test for the name listing provided by the requests
module:
>>> print dir(requests)
['ConnectionError', 'HTTPError', 'Request', 'RequestException', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__build__', '__builtins__', '__copyright__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__title__', '__version__', '_oauth', 'api', 'auth', 'certs', 'codes', 'compat', 'cookies', 'defaults', 'delete', 'exceptions', 'get', 'head', 'hooks', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'safe_mode', 'session', 'sessions', 'status_codes', 'structures', 'utils']
This is the typical symptom of an unrelated requests.py
(or requests.pyc
) file sitting in your current directory, or somewhere else on the PYTHONPATH
. If this is the case, remove or rename it, as it’s shadowing the module you really want to import.
As already stated, the most common problem is that you have a requests.py
file somewhere in your PYTHONPATH
.
But as the requests module internally uses other modules (e.g. from the standard python library), there might be problems with other filenames as well. For example I had the same problem when I named a script http.py
. In that case the output of print dir(requests)
is correct which makes tracking down the error a bit more difficult…
This could be an user error if you’re working with a framework like Django that has request objects as well.
I constantly get confused by Django’s:
request.POST
and request
‘s:
request.post
That was my problem, anyway. Bracing for down votes.
I had the same error.
All I did was save it as requests.py
Then I saved it as some other name.
And problem solved.
I made a mistake of the test file’s name was requests.py.
So, when i import requests.py, it’s not what I want to import.
Then, I renamed the test file’s name. It works!!!
I happened the same issue on Mac and Ubuntu. I want to test the requests command. I used the requests/ folder name and the requests.py filename on Mac.
But Python shows the “ImportError: cannot import name get” message.
Therefore, I have renamed the requests/ folder and the requests.py file to test-requests/ and test-requests.py. It still got the message.
I checked the folder as below:
__pycache__ requests.pyc test-1.py test-requests.py
I saw that the folder has the requests.pyc file. So I deleted the requests.pyc file in the folder. Then, I executed the below test script. it’s working now.
$ python test-requests.py
200
#! /usr/bin/env python
# the content of test-requests.py
import requests
from requests import get
r = requests.get('http://httpbin.org/get')
print (r.status_code)
Please check if there is a python file named requests.py in your parent folder. In that case, it is the wrong package which is getting imported.
This happens when you name your file as requests.py. so please change the name of the file to something else as python do not differentiate between the module file and your code file.
Sometimes it’s easier to delete previous files or directories that are problematic.
If you are using mac use rm
in the terminal.
Here’s a link for more info: https://www.macworld.com/article/2082021/master-the-command-line-deleting-files-and-folders.html
Changing the filename solved my solution.
Previous name was: random.py
and Changed name is: hello.py
I just installed the Requests module by using easy_install
and I tried to run the demo code of this tutorial,
import requests
payload = {'username': 'xxxx', 'password': 'xxxxx'}
r = requests.get('https://github.com/timeline.json')
but I get this error:
AttributeError:
'module' object has no attribute 'get'
You have to variants of how to fix this.
import requests
or
r = get('https://github.com/timeline.json')
P.S. First one is preferable
You are importing all names from the requests
module into your local namespace, which means you do not need to prefix them anymore with the module name:
>>> from requests import *
>>> get
<function get at 0x107820b18>
If you were to import the module with an import requests
statement instead, you added the module itself to your namespace and you do have to use the full name:
>>> import requests
>>> requests.get
<function get at 0x102e46b18>
Note that the above examples is what I got from my tests in the interpreter. If you get different results, you are importing the wrong module; check if you have an extra requests.py
file in your python package:
>>> import requests
>>> print requests.__file__
/private/tmp/requeststest/lib/python2.7/site-packages/requests/__init__.pyc
You can also test for the name listing provided by the requests
module:
>>> print dir(requests)
['ConnectionError', 'HTTPError', 'Request', 'RequestException', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__build__', '__builtins__', '__copyright__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__title__', '__version__', '_oauth', 'api', 'auth', 'certs', 'codes', 'compat', 'cookies', 'defaults', 'delete', 'exceptions', 'get', 'head', 'hooks', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'safe_mode', 'session', 'sessions', 'status_codes', 'structures', 'utils']
This is the typical symptom of an unrelated requests.py
(or requests.pyc
) file sitting in your current directory, or somewhere else on the PYTHONPATH
. If this is the case, remove or rename it, as it’s shadowing the module you really want to import.
As already stated, the most common problem is that you have a requests.py
file somewhere in your PYTHONPATH
.
But as the requests module internally uses other modules (e.g. from the standard python library), there might be problems with other filenames as well. For example I had the same problem when I named a script http.py
. In that case the output of print dir(requests)
is correct which makes tracking down the error a bit more difficult…
This could be an user error if you’re working with a framework like Django that has request objects as well.
I constantly get confused by Django’s:
request.POST
and request
‘s:
request.post
That was my problem, anyway. Bracing for down votes.
I had the same error.
All I did was save it as requests.py
Then I saved it as some other name.
And problem solved.
I made a mistake of the test file’s name was requests.py.
So, when i import requests.py, it’s not what I want to import.
Then, I renamed the test file’s name. It works!!!
I happened the same issue on Mac and Ubuntu. I want to test the requests command. I used the requests/ folder name and the requests.py filename on Mac.
But Python shows the “ImportError: cannot import name get” message.
Therefore, I have renamed the requests/ folder and the requests.py file to test-requests/ and test-requests.py. It still got the message.
I checked the folder as below:
__pycache__ requests.pyc test-1.py test-requests.py
I saw that the folder has the requests.pyc file. So I deleted the requests.pyc file in the folder. Then, I executed the below test script. it’s working now.
$ python test-requests.py
200
#! /usr/bin/env python
# the content of test-requests.py
import requests
from requests import get
r = requests.get('http://httpbin.org/get')
print (r.status_code)
Please check if there is a python file named requests.py in your parent folder. In that case, it is the wrong package which is getting imported.
This happens when you name your file as requests.py. so please change the name of the file to something else as python do not differentiate between the module file and your code file.
Sometimes it’s easier to delete previous files or directories that are problematic.
If you are using mac use rm
in the terminal.
Here’s a link for more info: https://www.macworld.com/article/2082021/master-the-command-line-deleting-files-and-folders.html
Changing the filename solved my solution.
Previous name was: random.py
and Changed name is: hello.py