所以我有一个像这样的目录设置:
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
一切正常,这为什么呢?
答案 0 :(得分:1)
a)from src.data import utils
将导入utils.py
,所以一切正常。
b)from src import data
只会导入data package
,从不导入utils.py
,如果需要,您需要在__init__.py
的文件夹{{1}下添加显式导入},如下所示:
1)如果需要同时支持python3和python2:
__ init __。py:
data
或者:
__ init __。py:
import src.data.utils # absolute import
2)如果仅需要支持python2,请使其简单:
__ init __。py:
from . import utils # relative import
然后,在导入软件包时,该软件包下的import utils
也将被执行。