31

我刚刚通过 using 安装了 Requests 模块,easy_install 并尝试运行本教程的演示代码,

import requests
payload = {'username': 'xxxx', 'password': 'xxxxx'}
r = requests.get('https://github.com/timeline.json')

但我收到此错误:

属性错误:'module' object has no attribute 'get'

4

12 回答 12

36

这是当前目录requests.py或. 如果是这种情况,请删除或重命名它,因为它会遮蔽您真正要导入的模块。requests.pycPYTHONPATH

于 2012-09-04T08:49:29.810 回答
19

您正在将requests模块中的所有名称导入本地命名空间,这意味着您不再需要在它们前面加上模块名称:

>>> from requests import *
>>> get
<function get at 0x107820b18>

如果您要使用语句导入模块,import requests则将模块本身添加到命名空间中,并且必须使用全名:

>>> import requests
>>> requests.get
<function get at 0x102e46b18>

请注意,上面的示例是我从解释器中的测试中得到的。如果您得到不同的结果,则说明您导入了错误的模块;requests.py检查你的 python 包中是否有额外的文件:

>>> import requests
>>> print requests.__file__
/private/tmp/requeststest/lib/python2.7/site-packages/requests/__init__.pyc

您还可以测试模块提供的名称列表requests

>>> 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']
于 2012-09-04T07:42:59.163 回答
18

我有同样的错误。

我所做的只是将其另存为requests.py

然后我将它保存为其他名称。并且问题解决了。

于 2015-04-02T14:37:57.800 回答
8

如前所述,最常见的问题是requests.py您的PYTHONPATH.

但由于 requests 模块在内部使用其他模块(例如来自标准 python 库),其他文件名也可能存在问题。例如,我在命名脚本时遇到了同样的问题http.py。在那种情况下,输出print dir(requests)是正确的,这使得追踪错误变得更加困难......

于 2013-05-17T08:49:08.183 回答
4

您必须了解如何解决此问题。

import requests

或者

r = get('https://github.com/timeline.json')

PS 第一个更好

于 2012-09-04T07:39:38.333 回答
4

我弄错了测试文件的名称是requests.py。所以,当我导入 requests.py 时,它不是我想要导入的。然后,我重命名了测试文件的名称。有用!!!

于 2017-01-22T14:18:28.080 回答
3

请检查您的父文件夹中是否有一个名为requests.py的 python 文件。在这种情况下,导入的是错误的包。

于 2019-10-13T15:55:02.943 回答
2

当您将文件命名为 requests.py 时,就会发生这种情况。所以请将文件名更改为其他名称,因为 python 不区分模块文件和您的代码文件。

于 2020-04-02T14:15:52.900 回答
1

如果您正在使用像 Django 这样也具有请求对象的框架,这可能是用户错误。

我经常对 Django 感到困惑:

request.POST

request的:

request.post

无论如何,那是我的问题。支持反对票。

于 2013-08-30T19:07:58.987 回答
1

更改文件名解决了我的解决方案。

以前的名字是:random.py

和更改的名称是:hello.py

于 2021-08-10T19:03:32.733 回答
0

我在 Mac 和 Ubuntu 上遇到了同样的问题。我想测试 requests 命令。我在 Mac 上使用了requests/文件夹名称和requests.py文件名。但 Python 显示“ImportError:无法导入名称获取”消息。因此,我将 requests/ 文件夹和 requests.py 文件重命名为 test-requests/ 和 test-requests.py。它仍然收到了消息。我检查了以下文件夹:

__pycache__     requests.pyc        test-1.py       test-requests.py

我看到该文件夹​​有 requests.pyc 文件。所以我删除了文件夹中的requests.pyc文件。然后,我执行了下面的测试脚本。它现在正在工作。

$ 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)
于 2018-04-22T11:29:37.573 回答
0

有时删除以前有问题的文件或目录会更容易。rm如果您在终端中使用 mac ,请使用。

rm 例子

这是更多信息的链接:https ://www.macworld.com/article/2082021/master-the-command-line-deleting-files-and-folders.html

于 2021-02-24T09:05:04.950 回答