Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中使用imp模块的可传递动态导入_Python_Import_Path - Fatal编程技术网

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()
为什么不接受路径参数?