Python2.7:从另一个目录中的文件目录导入所有模块
目录结构:Python2.7:从另一个目录中的文件目录导入所有模块,python,python-2.7,import,Python,Python 2.7,Import,目录结构: /dir1 foo.py bar.py /dir2 test.py 现在,我想导入dir1中存在的所有模块,并在test.py中使用它。我在/dir1中使用了一个\uu init\uuuuuuuuuuupy,内容如下: from os.path import dirname, basename, isfile import glob modules = glob.glob(dirname(__file__)+"/*.py") __all__ = [ bas
/dir1
foo.py
bar.py
/dir2
test.py
现在,我想导入dir1
中存在的所有模块,并在test.py
中使用它。我在/dir1
中使用了一个\uu init\uuuuuuuuuuupy
,内容如下:
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
中从dir1 import*执行时,它会显示没有名为dir1的模块
我确实遇到了很多类似的问题,比如,但似乎没有什么能解决问题。
我哪里出错了?问题是Python只在当前目录中搜索,而您大概是在dir2
中运行此操作-因此Python希望dir1
在dir2
中
您需要告诉Python在哪里可以找到dir1
,一种方法是将此目录添加到test.py
中的系统路径中
import sys
sys.path.append('/path/to/parent/of/dir1')
您需要使用importlib
以下内容在Python 3.3+中使用
从importlib.machine导入SourceFileLoader
path='../dir1/foo.py'
模块名称='foo'
loader=SourceFileLoader(模块名称、路径)
module=loader.load_module()
是我做的,@Martin,但我还是得到了同样的错误。你把它添加到test.py
文件了吗?是的。当我从test.py
文件内部打印sys.path
时,我实际上可以看到'/path/to/parent/of/dir1'
存在。但是,它仍然给了我同样的错误。你能确认dir1
实际上不在路径中吗。它正好以父目录的名字结尾。非常感谢,马丁。我犯的错误是我将路径添加到了dir1
,而不是dir1的父级:)它现在可以工作了谢谢,但是我需要一个python 2.7的解决方案。我刚刚编辑了我的问题,以便更清楚地说明这一点。:)在Fabric代码中查看这个函数:如果你想从dir1导入*我想你必须在dir1中编辑init.py是的,我已经这样做了。问题中提到了这一点。
from importlib.machinery import SourceFileLoader
path = '../dir1/foo.py'
module_name = 'foo'
loader = SourceFileLoader(module_name, path)
module = loader.load_module()