gpt4 book ai didi

python - 无法解析 "import as"情况 ("AttributeError module x has no attribute y")

转载 作者:太空狗 更新时间:2023-10-30 00:18:33 25 4
gpt4 key购买 nike

我有一个具有以下结构的项目:

project/
driver.py
lib/
__init__.py
core/
util.py
common.py
__init__.py

# project/driver.py

import lib.core.common as abc
pass

# project/lib/core/__init__.py

from .util import Worker

# project/lib/core/util.py

import lib.core.common as abc

class Worker:
pass

# project/lib/core/common.py

def stuff():
pass

现在,当我运行 python3 driver.py(从项目目录)时,出现以下错误:

Traceback (most recent call last):
File "driver.py", line 1, in <module>
import lib.core.common as abc
File "/home/user/project/lib/core/__init__.py", line 1, in <module>
from .util import Worker
File "/home/user/project/lib/core/util.py", line 1, in <module>
import lib.core.common as abc
AttributeError: module 'lib' has no attribute 'core'

在满足两个条件时发生:

  1. 当我执行 import lib.core.common as abc 而不是 import lib.core.common 时。
  2. project/lib/core/__init__.py 包含 from .util import Worker 导入时。

问题是我想保留 import lib.core.common as abc 导入表单。

有人能解释一下这是怎么回事吗?

最佳答案

您有循环依赖导入。你尝试执行

import lib.core.common as abc

在两个文件中,driver.pyutil.py

解决此问题的最简单方法是将路径导入移动到节点模块的末尾,some docs ,或

def dostuff():
from foo import bar
...

或者这也行,

from lib.core import common as abc

当 Python 导入模块时,它会检查模块注册表以查看该模块是否已经导入。如果模块已经注册,Python 会使用缓存中的现有对象。模块注册表是一个模块表,这些模块已按模块名称进行了初始化和索引。可以通过 sys.modules 访问此表。

如果未注册,Python 会找到该模块,必要时对其进行初始化,并在新模块的命名空间中执行。

关于python - 无法解析 "import as"情况 ("AttributeError module x has no attribute y"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50727428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com