无法解决 "import as" 情况 ("AttributeError module x has no attribute y")
Cannot resolve "import as" situation ("AttributeError module x has no attribute y")
我有一个结构如下的项目:
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'
这种情况仅在满足两个条件时发生:
- 当我做
import lib.core.common as abc
而不是 import lib.core.common
时。
- 当
project/lib/core/__init__.py
包含 from .util import Worker
导入时。
问题是我想保留 import lib.core.common as abc
导入表格。
有人能解释一下这是怎么回事吗?
您有循环依赖导入。你尝试执行
import lib.core.common as abc
在两个文件中,在 driver.py
和 util.py
中
解决此问题的最简单方法是将路径导入移动到节点模块的末尾,some docs,
或
def dostuff():
from foo import bar
...
或者这也行,
from lib.core import common as abc
当 Python 导入模块时,它会检查模块注册表以查看该模块是否已导入。如果模块已经注册,Python 使用缓存中的现有对象。模块注册表是 table 已按模块名称初始化和索引的模块。这个table可以通过sys.modules
访问。
如果未注册,Python 查找模块,必要时初始化它,并在新模块的命名空间中执行它。
我有一个结构如下的项目:
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'
这种情况仅在满足两个条件时发生:
- 当我做
import lib.core.common as abc
而不是import lib.core.common
时。 - 当
project/lib/core/__init__.py
包含from .util import Worker
导入时。
问题是我想保留 import lib.core.common as abc
导入表格。
有人能解释一下这是怎么回事吗?
您有循环依赖导入。你尝试执行
import lib.core.common as abc
在两个文件中,在 driver.py
和 util.py
解决此问题的最简单方法是将路径导入移动到节点模块的末尾,some docs, 或
def dostuff():
from foo import bar
...
或者这也行,
from lib.core import common as abc
当 Python 导入模块时,它会检查模块注册表以查看该模块是否已导入。如果模块已经注册,Python 使用缓存中的现有对象。模块注册表是 table 已按模块名称初始化和索引的模块。这个table可以通过sys.modules
访问。
如果未注册,Python 查找模块,必要时初始化它,并在新模块的命名空间中执行它。