目录结构:
/dir1
foo.py
bar.py
/dir2
test.py
现在,我想要导入dir1
中的所有模块,并在test.py
中的dir2
中使用它。我在__init__.py
中使用了/dir1
,内容如下:
from os.path import dirname, basename, isfile
import glob
modules = glob.glob(dirname(__file__)+"/*.py")
__all__ = [ basename(f)[:-3] for f in modules if isfile(f) if not f.endswith('__init__.py')]
但是,当我在from dir1 import *
中执行test.py
时,会显示no module named dir1
。
我确实遇到过很多像this这样的类似问题,但似乎没有解决问题。 我哪里错了?
答案 0 :(得分:1)
问题是Python只搜索当前目录,并且可能是从dir2
内部运行 - 因此Python期望dir1
内部dir2
。
您需要告诉Python在哪里找到dir1
,一种方法是将此目录添加到test.py
内的系统路径。
import sys
sys.path.append('/path/to/parent/of/dir1')
答案 1 :(得分:1)
您需要使用importlib
以下内容适用于Python 3.3 + See Documentation
from importlib.machinery import SourceFileLoader path = '../dir1/foo.py' module_name = 'foo' loader = SourceFileLoader(module_name, path) module = loader.load_module()