我正在编写一个脚本,它将从目录(plugins)加载插件,这些插件文件应该包含一个来自基类(BaseClass)的子类。我不知道插件文件或子类的名称,但我计划用BaseClass.__subclasses__()查找所有插件类。
在我的main.py中,我遍历plugins文件夹并加载每个模块如下:
pluginlist = []
for pluginfile in pluginfiles :
pluginlist.append(importlib.import_module(pluginfile))但是,当我以这种方式导入它们时,它们无法找到BaseClass
class CustomPlugin(BaseClass) :
NameError: name 'BaseClass' is not defined我已经尝试过在BaseClass中定义main.py并在此之前导入它,我也尝试过在插件文件中导入它,但是还没有弄清楚如何导入它。
导入依赖于其他python模块的动态python模块的最佳方法是什么?
编辑:
main.py
import importlib
import os
plugindir="plugins"
pluginfiles = os.listdir(plugindir)
for pluginfile in pluginfiles :
testfile = importlib.import_module("plugins."+pluginfile)
print(dir())在plugins文件夹中:
baseclass.py
class BaseClass() :
def __init__(self) :
print("I am a base class")customplugin.py
from .baseclass import BaseClass
class CustomPlugin(BaseClass) :
def __init__(self) :
print("I am a custom subclass of BaseClass")发布于 2019-12-04 16:49:20
看起来,我在我的.py语句中包含了‘importlib.import_module()’,更改如下:
for pluginfile in pluginfiles :
testfile = importlib.import_module("plugins."+pluginfile)对此:
for pluginfile in pluginfiles :
testfile = importlib.import_module("plugins."+pluginfile.split('.')[0])解决了进口问题。将baseclass.py与main.py放在主文件夹中解决了子类问题。
https://stackoverflow.com/questions/59148602
复制相似问题