首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态导入需要其他模块的Python模块

动态导入需要其他模块的Python模块
EN

Stack Overflow用户
提问于 2019-12-03 00:29:59
回答 1查看 2.7K关注 0票数 0

我正在编写一个脚本,它将从目录(plugins)加载插件,这些插件文件应该包含一个来自基类(BaseClass)的子类。我不知道插件文件或子类的名称,但我计划用BaseClass.__subclasses__()查找所有插件类。

在我的main.py中,我遍历plugins文件夹并加载每个模块如下:

代码语言:javascript
运行
复制
pluginlist = []
for pluginfile in pluginfiles :
        pluginlist.append(importlib.import_module(pluginfile))

但是,当我以这种方式导入它们时,它们无法找到BaseClass

代码语言:javascript
运行
复制
    class CustomPlugin(BaseClass) :
NameError: name 'BaseClass' is not defined

我已经尝试过在BaseClass中定义main.py并在此之前导入它,我也尝试过在插件文件中导入它,但是还没有弄清楚如何导入它。

导入依赖于其他python模块的动态python模块的最佳方法是什么?

编辑:

main.py

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
class BaseClass() :
    def __init__(self) :
        print("I am a base class")

customplugin.py

代码语言:javascript
运行
复制
from .baseclass import BaseClass

class CustomPlugin(BaseClass) :
    def __init__(self) :
        print("I am a custom subclass of BaseClass")
EN

回答 1

Stack Overflow用户

发布于 2019-12-04 16:49:20

看起来,我在我的.py语句中包含了‘importlib.import_module()’,更改如下:

代码语言:javascript
运行
复制
for pluginfile in pluginfiles :
    testfile = importlib.import_module("plugins."+pluginfile)

对此:

代码语言:javascript
运行
复制
for pluginfile in pluginfiles :
    testfile = importlib.import_module("plugins."+pluginfile.split('.')[0])

解决了进口问题。将baseclass.pymain.py放在主文件夹中解决了子类问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59148602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档