【问题标题】:Iterating over python files in a given directory and importing them?迭代给定目录中的python文件并导入它们?
【发布时间】:2017-04-25 18:44:27
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过使用“__import__”?
  • 尝试使用importlib.import_module,如果你的moduleDir是一个包,使用pkgutil.walk_packages列出所有模块。
  • @hjfitz 如果您对其中一个答案感到满意,请接受他们

标签: python dynamic import module


【解决方案1】:

你可以像这样使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-24
      • 2020-03-21
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      相关资源
      最近更新 更多