使用子目录中的imp.find_module导入ImportError

时间:2017-03-28 12:23:11

标签: python python-2.7 import

我有一个项目:

main
|---src.py
|---frame_select.py
|-----shellsdir
      |---script_select.py
      |------scriptsdir
             |---test.py

Main有一个脚本,它将参数传递给frame_select.py,然后根据传递的参数在shelldir内查找相应的脚本。它返回并使用:

import imp, sys

sys.path.insert(0, '/path/to/shellsdir/')

def module_import(mod_name):
   fp, p, d = imp.find_module(mod_name)
   py_mod = imp.load_module(mod_name,
                            fp,
                            p,
                            d)

def pick(value, window):
   if value == 'name_passed':
      c_mod = module_import('specific_name')
      c_mod.populate(window)

shellsdir中大约有16个脚本,因此根据传递的参数选择在查看shellsdir时要加载的脚本。在shellsdir内是另一个名为scriptsdir的目录和一个文件script_selector。该文件如下所示:

import imp, sys

sys.path.insert(0, '/path/to/scriptsdir/')

def module_import(mod_name):
   fp, p, d = imp.find_module(mod_name)
   py_mod = imp.load_module(mod_name,
                            fp,
                            p,
                            d)

基本上只是重用代码,但现在我指向scriptsdir程序将参数传递给module_import()函数。但是,我没有得到ImportError: No module named 'name_passed'

我已完成print sys.path/path/to/shellsdir//path/to/scriptsdir都在那里。模块名称匹配,所以我不确定为什么会出错。

1 个答案:

答案 0 :(得分:0)

for frame_select.py : 更新了src.py文件的相对路径。

import imp, sys

sys.path.insert(0, './shellsdir')

def module_import(mod_name):
   fp, p, d = imp.find_module(mod_name)
   py_mod = imp.load_module(mod_name,
                            fp,
                            p,
                            d)

def pick(value, window):
   if value == 'name_passed':
      c_mod = module_import('specific_name')
      c_mod.populate(window)
对于script_select.py ,

: 更新了src.py文件的相对路径。

import imp, sys

sys.path.insert(0, './shellsdir/scriptsdir/')

def module_import(mod_name):
   fp, p, d = imp.find_module(mod_name)
   py_mod = imp.load_module(mod_name,
                            fp,
                            p,
                            d)

值得注意的是../scriptsdir/不起作用。但是,我之前已经想到了这一点,但由于进口时间很长,我认为它没有用。忘了我在test.py文件中有大约20个模块(用于测试)以及导致延迟的原因。