如何通过Python动态导入模块实现模块热更新的长尾?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1256个文字,预计阅读时间需要6分钟。
最近有个部署需求,需要读取py文件格式的配置项。我的实现思路是将配置文件解析到内存中。主要使用两种方法:1. 使用importlib.import_module和types.ModuleType方法;2. 使用import_module动态导入包,先来“
最近有个部署需求,需要读取py文件格式的配置项,我的实现思路是把配置文件解析到内存中。主要使用两种方法:
- importlib.import_module
- types.ModuleType
方法1、使用 import_module 动态导包
先来看看import module使用方法。
- 主要有两个参数:
- package:包名
- name:模块名
- 返回 module 对象
现在开始实现动态导包,成功读取到配置项。
import importlib settings = importlib.import_module("remote_settings")
这样子就能初步实现动态倒入了,但是我有个需求,就是我的系统好些个模块,用FOR循环导包,然后处理业务。然后问题来了,对同一个“包”导入多次,python并不会重新导入,而是返回内存缓存中该模块的地址。
下面验证一下,第一次写入a = 123,第二次写入a = "hello"。
输出结果,两次都是打印旧版本的变量,可见对同一个模块进行多次import_module,并不能实现热更新。
本文共计1256个文字,预计阅读时间需要6分钟。
最近有个部署需求,需要读取py文件格式的配置项。我的实现思路是将配置文件解析到内存中。主要使用两种方法:1. 使用importlib.import_module和types.ModuleType方法;2. 使用import_module动态导入包,先来“
最近有个部署需求,需要读取py文件格式的配置项,我的实现思路是把配置文件解析到内存中。主要使用两种方法:
- importlib.import_module
- types.ModuleType
方法1、使用 import_module 动态导包
先来看看import module使用方法。
- 主要有两个参数:
- package:包名
- name:模块名
- 返回 module 对象
现在开始实现动态导包,成功读取到配置项。
import importlib settings = importlib.import_module("remote_settings")
这样子就能初步实现动态倒入了,但是我有个需求,就是我的系统好些个模块,用FOR循环导包,然后处理业务。然后问题来了,对同一个“包”导入多次,python并不会重新导入,而是返回内存缓存中该模块的地址。
下面验证一下,第一次写入a = 123,第二次写入a = "hello"。
输出结果,两次都是打印旧版本的变量,可见对同一个模块进行多次import_module,并不能实现热更新。

