Last updated: Apr 8, 2024
Reading time·5 min
The Python "AttributeError module 'requests' has no attribute 'get'" occurs
when we have a local file named requests.py
and try to import from the
requests
module.
To solve the error, make sure to rename any local files named requests.py
.
Here is an example of how the error occurs in a file called requests.py
.
import requests def make_request(): # ⛔️ AttributeError: module 'requests' has no attribute 'get' res = requests.get('https://reqres.in/api/users', timeout=10) parsed = res.json() print(parsed) make_request()
The most likely cause of the error is having a local file named requests.py
which shadows the official
requests module.
requests.py
Make sure to rename your local file to something other than requests.py
to
solve the error.
import requests def make_request(): res = requests.get( 'https://reqres.in/api/users', timeout=10 ) parsed = res.json() print(parsed) # ✅ Works make_request()
You can rename your file to main.py
or any other name that doesn't clash with
another module.
Another thing to look out for is having an incorrect import statement. If you do
import requests
, then access the get
method as requests.get(...)
.
The Python interpreter first looks for the imported module in the built-in modules, then in the current directory, then in the PYTHON PATH, then in the installation-dependent default directory.
You can access the __file__
property on the imported module to see whether it
is shadowed by a local file.
import requests print(requests.__file__) # ⛔️ The result is shadowed by a local file # /home/borislav/Desktop/bobbyhadz_python/requests.py # ✅ The result is pulling in the correct module # /home/borislav/Desktop/bobbyhadz_python/venv/lib/python3.10/site-packages/requests/__init__.py
The first result shows what the output looks like if you have a local file
that's named requests.py
.
The local file shadows the original requests
module and causes the issue.
The second result shows what the output should look like if the correct
requests
module is being pulled.
A good way to start debugging is to print(dir(your_module))
and see what
attributes the imported module has.
Here is what printing the attributes of the requests
module looks like when I
have a file requests.py
in the same directory.
import requests # ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(requests))
If you pass a module object to the dir() function, it returns a list of names of the module's attributes.
We can see that the imported requests
module doesn't have a get
attribute,
which makes it evident that we are shadowing the official requests
module with
our local requests.py
file.
If you try to import the requests
module in a file called requests.py
, you
would get a little different error message that means the same thing.
import requests print(dir(requests)) def make_request(): # ⛔️ AttributeError: partially initialized module 'requests' has no attribute 'get' (most likely due to a circular import) res = requests.get('https://reqres.in/api/users') parsed = res.json() print(parsed) make_request()
Renaming your file solves the error.
The Python "AttributeError module 'requests' has no attribute 'post'" occurs
when we have a local file named requests.py
and try to import from the
requests
module.
To solve the error, make sure to rename any local files named requests.py
.
Here is an example of how the error occurs in a file called requests.py
.
import requests def make_request(): # ⛔️ AttributeError: module 'requests' has no attribute 'post' res = requests.post( 'https://reqres.in/api/users', data={'name': 'Bobby Hadz', 'job': 'programmer'} ) print(res.json()) make_request()
The most likely cause of the error is having a local file named requests.py
which shadows the official requests
module.
requests.py
Make sure to rename your local file to something other than requests.py
to
solve the error.
import requests def make_request(): res = requests.post( 'https://reqres.in/api/users', data={'name': 'Bobby hadz', 'job': 'programmer'} ) print(res.json()) # ✅ Works make_request()
Another thing to look out for is having an incorrect import statement. If you do
import requests
, then access the post
method as requests.post(...)
.
The Python interpreter first looks for the imported module in the built-in modules, then in the current directory, then in the PYTHON PATH, then in the installation-dependent default directory.
You can access the __file__
property on the imported module to see whether it
is shadowed by a local file.
import requests print(requests.__file__) # ⛔️ The result is shadowed by a local file # /home/borislav/Desktop/bobbyhadz_python/requests.py # ✅ The result is pulling in the correct module # /home/borislav/Desktop/bobbyhadz_python/venv/lib/python3.10/site-packages/requests/__init__.py
A good way to start debugging is to print(dir(your_module))
and see what
attributes the imported module has.
Here is what printing the attributes of the requests
module looks like when I
have a file requests.py
in the same directory.
import requests # ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(requests))
If you pass a module object to the dir() function, it returns a list of names of the module's attributes.
We can see that the imported requests
module doesn't have the post
attribute, which makes it evident that we are shadowing the official requests
module with our local requests.py
file.
If you try to import the requests
module in a file called requests.py
, you
would get a little different error message that means the same thing.
import requests def make_request(): # ⛔️ AttributeError: partially initialized module 'requests' has no attribute 'post' (most likely due to a circular import) res = requests.post( 'https://reqres.in/api/users', data={'name': 'Bobby Hadz', 'job': 'programmer'} ) print(res.json()) make_request()
Renaming your file solves the error.
You can learn more about the related topics by checking out the following tutorials: