如果我有一个目录结构如下:
将
如果我在
.
└── pkg
├── A.py
├── B.py
├── C.py
├── __init__.py
└── test
└── script.py
在 script.py
中包含以下内容:
import pkg.B
import pkg.A
print pkg.A.test()
A.py
:
import pkg.C
def test():
return pkg.B.test()
B.py
:
def test():
return 'AAAA'
C.py
:
def test3():
return 'C.test3'
__init__.py
文件是空的。
如果A.py
导入pkg.C
,那么代码可以正常工作。如果我注释掉这个导入语句,那么就会出现错误:
Traceback (most recent call last):
File "pkg/test/script.py", line 9, in <module>
print pkg.A.test()
File "/Users/X/Desktop/importtest/pkg/A.py", line 4, in test
return pkg.B.test()
NameError: global name 'pkg' is not defined
将
import pkg.C
改为 import pkg
也可以正常工作,只要在 script.py
中导入了 pkg.B
。如果我在
script.py
中注释掉了对 pkg.B
的导入,则在 A.py
中无论是 import pkg
还是 import pkg.C
都会出错。Traceback (most recent call last):
File "pkg/test/script.py", line 10, in <module>
print pkg.A.test()
File "/Users/X/Desktop/importtest/pkg/A.py", line 4, in test
return pkg.B.test()
AttributeError: 'module' object has no attribute 'B'
我期待的行为是什么。
所以基本问题是,如果在A.py
中没有导入pkg.B
,那么为什么pkg.B.test()
可以在A.py
中访问,如果pkg.B
在script.py
中被导入,并且A.py
导入其他子模块?
我仍然有点不清楚这里的确切机制。对于解释或指向一个描述导入逻辑的好文章的指针,将不胜感激。
python pkg/test/script.py
并始终使用完整的导入import pkg....
等。这应该解决任何导入问题。我也不是完全理解它。 - Simeon Visser