Python2.7:从另一个目录中的文件目录中导入所有模块

时间:2016-01-06 05:57:27

标签: python python-2.7 import

目录结构:

/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这样的类似问题,但似乎没有解决问题。 我哪里错了?

2 个答案:

答案 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()