迭代给定目录中的python文件并导入它们?

时间:2016-12-10 11:04:11

标签: python dynamic import module

我正在使用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,但这只会产生语法错误。

2 个答案:

答案 0 :(得分:3)

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

a

示例:

假设我们有一个包含以下函数的模块def fn(): print("Hello World")

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

以下是结果:

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

答案 1 :(得分: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