所以我有一个像这样的目录设置:
some_dir/
foo/
bar/
test.py
src/
__init__.py
data/
__init__.py
utils.py
我想从我的 test.py 模块导入 utils.py
。
import sys.path
sys.path.append("../../")
from src import data
data.utils // this throws an error AttributeError: module 'src.data' has no attribute 'utils'
但是当我这样做的时候:
import sys.path
sys.path.append("../../")
from src.data import utils
一切正常,这是为什么?
最佳答案
a) from src.data import utils
将导入 utils.py
,所以一切正常。
b) from src import data
只会导入数据包
,不会导入utils.py
,如果需要,需要添加显式导入data
文件夹下的__init__.py
,如下所示:
1) 如果需要同时支持python3 & python2:
__init__.py:
import src.data.utils # absolute import
或者:
__init__.py:
from . import utils # relative import
2)如果只是需要支持python2,就简单点:
__init__.py:
import utils
然后,当导入包时,该包下的__init__.py
也会被执行。
关于python - 对 __init__.py 和导入感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52789904/