You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中能否在运行时导入由字符串变量指定的模块?

Python 动态导入字符串变量指定模块的实现方案

完全可以实现这类动态导入需求,使用Python标准库importlib的相关接口即可,不需要硬编码模块标识符,效果和静态写from xxx import xxx完全一致。

具体实现方法

核心是用importlib.import_module()方法加载动态指定的模块,再从返回的模块对象中取出需要的属性即可,对应你举的场景代码如下:

import importlib
import argparse

# 命令行参数解析逻辑,执行完后daily为存储模块名的字符串变量
parser = argparse.ArgumentParser()
parser.add_argument("--module", required=True, help="指定要导入的模块名")
args = parser.parse_args()
daily = args.module

# 动态导入对应模块,等效于静态写 import 对应模块名
loaded_module = importlib.import_module(daily)
# 从模块中取出目标变量,等效于静态写 from daily import dailyList
dailyList = loaded_module.dailyList

扩展用法与注意事项

  • 如果待导入的变量名也是动态生成的字符串,可以搭配内置函数getattr()取值,比如变量名存在变量target_attr中,可以写成dailyList = getattr(loaded_module, target_attr),还可以给getattr传入第三个参数作为属性不存在时的默认值,避免直接抛出AttributeError。
  • import_module()接收的模块名字符串规则和静态import完全一致:同目录下的模块直接传模块名字符串即可,跨包导入时传"包名.子包名.模块名"格式的路径即可。
  • 不推荐直接使用底层内置方法__import__()实现动态导入,这个方法是Python解释器实现import语法的内部接口,日常业务场景使用importlib.import_module()是官方推荐的标准做法,行为和静态导入一致性更高,不会出现子模块加载的异常问题。

简单验证示例

你可以快速写个demo验证效果:

  1. 同目录下新建workday.py,写入内容:
dailyList = ["站会", "需求评审", "代码提交"]
  1. 主程序写入前面的动态导入逻辑,执行命令:
python main.py --module workday

程序就能正常加载workday.py里的dailyList变量,和静态写from workday import dailyList的运行效果没有区别。

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 15:06:08