从脚本导入已安装的软件包会引发“ AttributeError:模块没有属性”或“ ImportError:无法导入名称”

爪子

我有一个名为的脚本requests.py,可以导入请求包。该脚本要么无法访问包中的属性,要么无法导入它们。为什么这不起作用,我该如何解决?

以下代码引发一个AttributeError

import requests

res = requests.get('http://www.google.ca')
print(res)
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'

以下代码引发一个ImportError

from requests import get

res = get('http://www.google.ca')
print(res)
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'

或从requests包中的模块导入的代码

from requests.auth import AuthBase
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
爪子

发生这种情况是因为名为本地模块的requests.py阴影遮盖了requests您要使用的已安装模块。当前目录位于之前sys.path,因此本地名称优先于已安装名称。

出现此问题时,还有一个调试提示是仔细查看Traceback,并意识到所涉及脚本的名称与您要导入的模块匹配:

请注意您在脚本中使用的名称:

File "/Users/me/dev/rough/requests.py", line 1, in <module>

您尝试导入的模块: requests

将模块重命名为其他名称以避免名称冲突。

Python可能会在requests.pyc文件旁边requests.py__pycache__在Python 3中的目录中)生成一个文件重命名后也要删除该文件,因为解释器仍将引用该文件,从而重新产生该错误。但是,如果文件已删除,则pyc文件中文件__pycache__ 不应影响您的代码py

在该示例中,将文件重命名为my_requests.py,删除requests.pyc并再次运行将成功打印<Response [200]>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档