【发布时间】:2012-04-20 19:43:04
【问题描述】:
假设如下代码结构:
#### 1/hhh/__init__.py: empty
#### 1/hhh/foo/__init__.py:
from hhh.foo.baz import *
#### 1/hhh/foo/bar.py:
xyzzy = 4
#### 1/hhh/foo/baz.py:
import hhh.foo.bar as bar
qux = bar.xyzzy + 10
我在1/ 中运行python 并执行import hhh.foo.baz。它失败了:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "hhh/foo/__init__.py", line 1, in <module>
from hhh.foo.baz import *
File "hhh/foo/baz.py", line 1, in <module>
import hhh.foo.bar as bar
AttributeError: 'module' object has no attribute 'foo'
现在我将baz.py 替换为:
# 1/hhh/foo/baz.py:
from hhh.foo.bar import xyzzy
qux = xyzzy + 10
再做一次import hhh.foo.baz。现在它可以工作了,虽然我加载的是同一个模块,只是绑定了一个不同的名称。
这是否意味着import module 和from module import name 之间的区别不仅仅是标识符?这里到底发生了什么?
(我知道我可以使用相对导入来解决所有这些问题,但我仍然想了解其中的机制。另外,我不喜欢相对导入,PEP 8 也不喜欢。)
【问题讨论】:
标签: python import module package