博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python实现插件机制——自动import一个目录下的所有.py文件
阅读量:5093 次
发布时间:2019-06-13

本文共 917 字,大约阅读时间需要 3 分钟。

假设有这样一个目录结构:

    /src

          main.py
          /plugins
                __init__.py
                a.py
                b.py
                c.py
                d.py

要在执行import plugins语句时,自动import放在plugins目录下的所有.py文件。

可以在plugins目录下创建这样的一个__init__.py,遍历当前目录、并import找到的.py文件。

方案一

from glob import globfrom keyword import iskeywordfrom os.path import dirname, join, split, splitextbasedir = dirname(__file__)for name in glob(join(basedir, '*.py')):    module = splitext(split(name)[-1])[0]    if not module.startswith('_') and \       module.isidentifier() and \       not iskeyword(module):       __import__(__name__+'.'+module)

但是上述代码并不适用被打包的程序。在被zipapp打包时,globl()、os.walk()等函数在这里会失灵。

 

在使用zipapp时,我们需要模块的帮助。把__init__.py换成这个就可以了,同样是遍历当前目录、并import找到的.py文件。

方案二

import osimport pkgutilpkgpath = os.path.dirname(__file__)pkgname = os.path.basename(pkgpath)for _, file, _ in pkgutil.iter_modules([pkgpath]):    __import__(pkgname+'.'+file)

代码更简洁、又能适用zipapp,这个方案不错。

转载于:https://www.cnblogs.com/animalize/p/5642495.html

你可能感兴趣的文章
Animations介绍及实例
查看>>
判断请求是否为ajax请求
查看>>
【POJ2699】The Maximum Number of Strong Kings(网络流)
查看>>
spring boot配置跨域
查看>>
BZOJ 1996 合唱队(DP)
查看>>
进击吧!阶乘——大数乘法
查看>>
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>
关于退出当前页面在火狐的一些问题
查看>>
【项目实施】项目考核标准
查看>>
spring-aop AnnotationAwareAspectJAutoProxyCreator类
查看>>
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
@Column标记持久化详细说明
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>
站立会议08(冲刺2)
查看>>