python中使用imp模块的可传递动态导入
我正在使用python中使用imp模块的可传递动态导入,python,import,path,Python,Import,Path,我正在使用imp模块动态导入Python模块。效果很好 但是我的一个同事想将一些模块重构到同一目录下的另一个模块中,这就破坏了一切。我怎样才能让它工作?我正在将正确的路径传递到find_模块;对bar的动态导入工作正常,但当bar尝试从同一目录中拉入baz时,它失败。源代码在下面和上面复制 b/bar.py: import baz def tweedledee(): return 42 import baz def tweedledee(): return 42 twee
imp
模块动态导入Python模块。效果很好
但是我的一个同事想将一些模块重构到同一目录下的另一个模块中,这就破坏了一切。我怎样才能让它工作?我正在将正确的路径传递到find_模块
;对bar
的动态导入工作正常,但当bar
尝试从同一目录中拉入baz
时,它失败。源代码在下面和上面复制
b/bar.py:
import baz
def tweedledee():
return 42
import baz
def tweedledee():
return 42
tweedledum = baz.tweedledum
b/baz.py:
def tweedledum():
return 24
抱怨。通过修改sys.path找到了一个临时解决方法,尽管我不喜欢它。似乎应该有一种方法可以做到这一点,而不会弄乱sys.path。我试图捕获
ImportError
,但它只包含一个字符串,而不是试图导入的模块的名称(是的,我可以解析该字符串,但这完全是错误的)
a/foo.py:
import imp
def find_and_load(module, path):
file, pathname, description = imp.find_module(module, path)
return imp.load_module(module, file, pathname, description)
m = find_and_load('bar',['../b'])
import imp
import sys
def find_and_load(module, path):
file, pathname, description = imp.find_module(module, path)
try:
n = len(sys.path)
sys.path += path
return imp.load_module(module, file, pathname, description)
finally:
del sys.path[n:]
file.close()
m = find_and_load('bar',['../b'])
print m.tweedledee() + m.tweedledum()
b/bar.py:
import baz
def tweedledee():
return 42
import baz
def tweedledee():
return 42
tweedledum = baz.tweedledum
换句话说:
imp.load\u module()
为什么不接受路径参数?