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

Python中如何在map()调用里用__import__动态导入子目录模块?

动态导入子目录模块的实现方案

问题场景

正在学习《Dive Into Python》16.15节的动态导入示例,现有代码如下:

modulenames = ['my_module']
modules = list(map(__import__, modulenames))
modules[0].process()

但目标模块位于modules子目录中,常规导入写法为:

from modules import my_module

已知__import__支持fromlist参数,但不清楚如何在map()调用中适配该语法。

解决方案

理解__import__的参数对应关系

from modules import my_module等价于__import__('modules', fromlist=['my_module']),此调用会直接返回my_module对象,而非顶层的modules包。

在map()中传递额外参数

通过lambda函数包装__import__,即可在map()中传入fromlist等额外参数,有两种常用写法:

写法1:指定完整模块路径

modulenames = ['my_module']
modules = list(map(lambda name: __import__(f'modules.{name}', fromlist=['']), modulenames))
modules[0].process()

这里fromlist=['']用于确保__import__返回子模块modules.my_module,而非父包modules。

写法2:模拟from ... import ...语法

modulenames = ['my_module']
modules = list(map(lambda name: __import__('modules', fromlist=[name]), modulenames))
modules[0].process()

此写法直接从modules包中导入指定子模块,返回的就是目标子模块对象。

注意事项

子目录modules下需存在__init__.py文件(Python 3.3+支持命名空间包,但添加该文件更符合规范且兼容性更好),否则Python无法将其识别为可导入的包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:50:04