3

所以我一直在尝试制作一个简单的程序,它将动态导入具有特定名称的文件夹中的模块。我 cdos到目录并module = __import__(module_name)在 for 循环中运行,所有描述的文件名都被迭代到变量 module_name 中。

我唯一的问题是我遇到了一个问题:

ImportError: No module named "module_name" 

(说我作为字符串给出的变量的名称)。该文件存在,它位于提到的目录中,并且import在同一目录中工作正常。但是正常的即使导入也不适用于 cd 目录中的模块。代码如下所示。如果这是一个明显的问题,我很抱歉。

import os

class Book():
    def __init__(self):
        self.name = "Book of Imps"
        self.moduleNames = []

    # configure path
    def initialize(self):
        path = os.getcwd() + '/Imp-pit'
        os.chdir(path)
        cwd = os.walk(os.getcwd())
        x, y, z = next(cwd)
        # Build Modules
        for name in z:
            if name[:3] == 'Imp':
                module_name = name[:len(name) - 3]
                module = __import__(module_name)

def start_sim():
    s = Book()
    s.initialize()

if __name__ == '__main__':
    start_sim()
4

2 回答 2

3

sys.path如果您只是使用os.chdir. 您必须手动将path变量插入到sys.path列表中才能正常工作,即:

sys.path.insert(0, path)  

Python 通常sys.path在查找模块时进行搜索,因此如果您在此处指定它就会找到它。

附加说明;不使用__import__,而是使用importlib.import_module。界面完全相同,但文档中通常建议使用第二个。

于 2016-06-30T23:01:35.473 回答
0

您应该使用 try-except 概念,例如:

try:
    import csv            
except ImportError:
    raise ImportError('<error message>')

如果我确实理解你是正确的

try:
    module = __import__(module_name)
except ImportError:
    raise ImportError('<error message>')
于 2016-06-30T23:04:30.243 回答