Python2.7: 将一个目录中的所有模块导入到另一个目录中的文件中
Python2.7: Import all modules from a directory in file in another directory
目录结构:
/dir1
foo.py
bar.py
/dir2
test.py
现在,我想导入 dir1
中存在的所有模块并在 dir2
中存在的 test.py
中使用它。我在 /dir1
中使用了一个 __init__.py
,内容如下:
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')]
但是,当我在 test.py
中执行 from dir1 import *
时,它显示 no module named dir1
。
我确实遇到过很多类似的问题,比如this,但似乎没有什么能解决问题。
我哪里错了?
问题是 Python 仅在当前目录中搜索,并且您可能 运行 从 dir2
中搜索 - 因此 Python 期望 dir1
在 dir2
.
里面
您需要告诉Python在哪里可以找到dir1
,一种方法是将此目录添加到test.py
.
内的系统路径中
import sys
sys.path.append('/path/to/parent/of/dir1')
您需要使用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()
目录结构:
/dir1
foo.py
bar.py
/dir2
test.py
现在,我想导入 dir1
中存在的所有模块并在 dir2
中存在的 test.py
中使用它。我在 /dir1
中使用了一个 __init__.py
,内容如下:
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')]
但是,当我在 test.py
中执行 from dir1 import *
时,它显示 no module named dir1
。
我确实遇到过很多类似的问题,比如this,但似乎没有什么能解决问题。 我哪里错了?
问题是 Python 仅在当前目录中搜索,并且您可能 运行 从 dir2
中搜索 - 因此 Python 期望 dir1
在 dir2
.
您需要告诉Python在哪里可以找到dir1
,一种方法是将此目录添加到test.py
.
import sys
sys.path.append('/path/to/parent/of/dir1')
您需要使用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()