2016-12-10 58 views
1

我正在研究python中的一个小型项目,我希望能够编写外部模块并动态地导入它们。到目前为止,我有这样的事情:遍历给定目录中的python文件并导入它们?

def getModules(self): 
    os.chdir(moduleDir) 
    for module in os.listdir(): 
      #code goes here to import 
      #also append to a list for use later on 

我会用import module,但只是给出了一个语法错误。

+0

您是否尝试使用“\ _ \ _ import \ _ \ _”? – martianwars

+1

尝试使用'importlib.import_module',如果您的moduleDir是一个包,请使用'pkgutil.walk_packages'来列出所有模块。 –

+0

@hjfitz如果您对其中一个答案感到满意,请接受他们 – martianwars

回答

3

您可以使用importlib.import_module()这样的:

import importlib 

my_modules = [] 

def getModules(self): 
    os.chdir(moduleDir) 
    for module in os.listdir(): 
      my_module = importlib.import_module(module[:-3]) # Or: module.split('.')[0] 
      my_modules.append(my_module) 

例子:

比方说,我们有一个模块a,包含以下功能:

def fn(): 
    print("Hello World") 

以下是结果:

>>> import importlib 
>>> 
>>> my_module = importlib.import_module('a') # Note: 'a' without '.py' 
>>> 
>>> my_module.fn() 
Hello World 
2

您应该使用__import__函数。像这样的东西会有帮助,

def getModules(self): 
    modules = [] 
    os.chdir(moduleDir) 
    for module in os.listdir('.'): 
      m = __import__(module.split('.')[0]) # Assuming your listdir() gives .py files 
      modules.append(m) 

一个还是更好的选择将是importlib.import_module()是围绕__import__的包装。它有一个类似于__import__的语法。当然,你需要import importlib

相关问题