Importing installed package from script raises “AttributeError: module has no attribute” or “ImportError: cannot import name”
我有一个名为
以下代码引发一个
1 2 3 4 | import requests res = requests.get('http://www.google.ca') print(res) |
1 2 3 4 5 6 | Traceback (most recent call last): File"/Users/me/dev/rough/requests.py", line 1, in <module> import requests File"/Users/me/dev/rough/requests.py", line 3, in <module> requests.get('http://www.google.ca') AttributeError: module 'requests' has no attribute 'get' |
下面的代码引发一个
1 2 3 4 | from requests import get res = get('http://www.google.ca') print(res) |
1 2 3 4 5 6 | Traceback (most recent call last): File"requests.py", line 1, in <module> from requests import get File"/Users/me/dev/rough/requests.py", line 1, in <module> from requests import get ImportError: cannot import name 'get' |
或从
1 | from requests.auth import AuthBase |
1 2 3 4 5 6 | Traceback (most recent call last): File"requests.py", line 1, in <module> from requests.auth import AuthBase File"/Users/me/dev/rough/requests.py", line 1, in <module> from requests.auth import AuthBase ImportError: No module named 'requests.auth'; 'requests' is not a package |
这是因为名为
当出现这种情况时,一个额外的调试提示是仔细查看回溯,并意识到所讨论的脚本的名称与您试图导入的模块相匹配:
注意脚本中使用的名称:
1 | File"/Users/me/dev/rough/requests.py", line 1, in <module> |
您要导入的模块:
将模块重命名为其他名称以避免名称冲突。
python可以在你的
在本例中,将文件重命名为
对于原始问题的编写者,以及那些搜索"attributeError:module has no attribute"字符串的人,根据接受的答案,常见的解释是,用户创建的脚本的名称与库文件名冲突。但是,请注意,问题可能不在生成错误的脚本的名称中(与上面的情况一样),也不在该脚本显式导入的库模块的任何名称中。可能需要做一些侦查工作来找出是哪个文件导致了这个问题。
举个例子来说明这个问题,假设您正在创建一个脚本,它使用"decimal"库使用十进制数字进行精确的浮点计算,并将脚本命名为"EDOCX1"(13),其中包含行"EDOCX1"(14)。这些都没有问题,但您会发现它引发了这个错误:
1 | AttributeError: 'module' object has no attribute 'Number' |
如果您以前编写了一个名为"