导入使用importlib导入另一个模块的模块

时间:2019-01-19 12:47:34

标签: python

我研究了许多其他解决方案,但它们似乎无法直接解决我的问题。

我的目录结构如下:

main
main.py
  plugins
    plugin1
      a.py
      b.py

b.py有第一行

import a

我想要的是main.py能够从plugins目录动态加载插件

因此我已经将其设置为

import importlib

plugin = "plugin1" #the hope is that this will be defined dynamically eventually

plugin_name = ".b"
plugin_module = importlib.import_module(plugin_name, "Plugins." + plugin1)

我希望通过在plugin_module importlib命令中添加一个相对引用,使“ b”在运行时可以成功找到“ a”,但出现错误

ModuleNotFoundError:没有名为“ a”的模块。

我假设在尝试运行b时,它找不到-,但是如果有一种解决方法可以使用importlib的话,那会很棒(因为能够动态定义我使用的是我必不可少的

谢谢!

1 个答案:

答案 0 :(得分:1)

这与importlib无关;如果您像from plugins.plugin1 import b那样显式导入模块,则会看到相同的问题。这是因为a不是一个模块,实际的模块名称是plugins.plugin1.a

您必须在插件中使用相对导入。将import a更改为from . import a