Python 从脚本导入已安装的包会引发“错误”;AttributeError:模块没有属性";或;ImportError:无法导入名称“;
我有一个名为Python 从脚本导入已安装的包会引发“错误”;AttributeError:模块没有属性";或;ImportError:无法导入名称“;,python,exception,python-module,shadowing,Python,Exception,Python Module,Shadowing,我有一个名为requests.py的脚本,用于导入requests包。脚本无法从包中访问属性,或者无法导入属性。为什么这不起作用?我该如何修复它 以下代码引发了一个属性错误 import requests res = requests.get('http://www.google.ca') print(res) from requests import get res = get('http://www.google.ca') print(res) 回溯(最近一次呼叫最后一次): 文件“
requests.py
的脚本,用于导入requests包。脚本无法从包中访问属性,或者无法导入属性。为什么这不起作用?我该如何修复它
以下代码引发了一个属性错误
import requests
res = requests.get('http://www.google.ca')
print(res)
from requests import get
res = get('http://www.google.ca')
print(res)
回溯(最近一次呼叫最后一次):
文件“/Users/me/dev/rough/requests.py”,第1行,在
导入请求
文件“/Users/me/dev/rough/requests.py”,第3行,在
请求。获取('http://www.google.ca')
AttributeError:模块“requests”没有属性“get”
以下代码引发了一个ImportError
import requests
res = requests.get('http://www.google.ca')
print(res)
from requests import get
res = get('http://www.google.ca')
print(res)
回溯(最近一次呼叫最后一次):
文件“requests.py”,第1行,在
从请求导入获取
文件“/Users/me/dev/rough/requests.py”,第1行,在
从请求导入获取
ImportError:无法导入名称“get”
或从请求
包中的模块导入的代码:
from requests.auth import AuthBase
回溯(最近一次呼叫最后一次):
文件“requests.py”,第1行,在
从requests.auth导入AuthBase
文件“/Users/me/dev/rough/requests.py”,第1行,在
从requests.auth导入AuthBase
ImportError:没有名为“requests.auth”的模块“请求”不是一个包
发生这种情况是因为名为requests.py的本地模块会隐藏您试图使用的已安装的requests
模块。当前目录的前缀是sys.path
,因此本地名称优先于安装的名称
出现这种情况时,一个额外的调试技巧是仔细查看回溯,并意识到您的脚本名称与您尝试导入的模块匹配:
请注意脚本中使用的名称:
File "/Users/me/dev/rough/requests.py", line 1, in <module>
文件“/Users/me/dev/rough/requests.py”,第1行,在
您尝试导入的模块:请求
将模块重命名为其他名称以避免名称冲突
Python可能会在您的requests.py
文件旁边生成一个requests.pyc
文件(在Python3的\uuuuu pycache\uuuu
目录中)。重命名后也删除该文件,因为解释器仍将引用该文件,从而重新生成错误。但是,如果已删除py
文件,则中的pyc
文件不应影响您的代码
在本例中,将文件重命名为my_requests.py
,删除requests.pyc
,然后再次运行,可以为原始问题的作者以及在“AttributeError:module has no attribute”字符串上搜索的人成功打印
,根据公认的答案,常见的解释是,用户创建的脚本的名称与库文件名冲突。但是,请注意,问题可能不在生成错误的脚本的名称中(如上所述),也不在该脚本显式导入的库模块的任何名称中。可能需要一些侦查工作来找出是哪个文件导致了问题
作为说明问题的示例,假设您正在创建一个脚本,该脚本使用“decimal”库对十进制数进行精确的浮点计算,并将脚本命名为“mydecimal.py
”,其中包含行“import decimal
”。这些都没有问题,但您发现它会引发以下错误:
AttributeError: 'module' object has no attribute 'Number'
如果您以前编写过名为“numbers.py
”的脚本,则会发生这种情况,因为“decimal”库调用标准库“numbers”,但会找到旧脚本。即使您删除了它,也可能无法解决问题,因为python可能已将其转换为字节码并将其作为“numbers.pyc
”存储在缓存中,因此您也必须查找它。python正在您的requests.py
模块中查找requests对象
将该文件重命名为其他文件或使用
from __future__ import absolute_import
在requests.py
模块的顶部,请注意,这是一个常见问题的规范答案。。。除非你确定另一个问题有更好、更完整的答案,否则请不要重复。