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

如何从内存动态导入Python模块并获取其变量(不生成临时文件)

在内存中导入Python模块并获取变量(无需临时文件)

没问题,这事儿咱们完全可以在内存里搞定,不用创建任何临时文件。Python的标准库就提供了现成的工具,下面给你两种实用的方案:

方案1:直接创建模块对象并执行代码

这种方法简单直接,核心思路是先创建一个空的模块实例,再把内存中的代码字符串执行到这个模块的命名空间里,之后就能像访问普通模块变量一样操作了。

import types

# 你的内存中的模块代码字符串
module_code = """
import smth
aaa = {'mykey1':'myval1','mykey2':'myval2','mykey3':'myval3','mykey4':'myval4'}
bbb = ['mykey1', 'mykey2']
ccc = 'some string'
ddd = 17
#eee = 18
"""

# 给你的内存模块起个名字(随便起,方便识别)
module_name = "my_in_memory_module"
# 创建一个空的模块对象
memory_module = types.ModuleType(module_name)

# 把代码执行到模块的命名空间中
exec(module_code, memory_module.__dict__)

# 现在就可以访问模块里的变量了!
print(memory_module.aaa)  # 输出: {'mykey1':'myval1', ...}
print(memory_module.bbb)  # 输出: ['mykey1', 'mykey2']
print(memory_module.ccc)  # 输出: 'some string'
print(memory_module.ddd)  # 输出: 17

方案2:用importlib规范流程(支持后续导入)

如果你希望这个内存模块能像普通模块一样被import语句引用,可以用importlib模块来实现,更贴近Python的原生导入机制:

import importlib.util
import sys

# 你的内存中的模块代码字符串
module_code = """
import smth
aaa = {'mykey1':'myval1','mykey2':'myval2','mykey3':'myval3','mykey4':'myval4'}
bbb = ['mykey1', 'mykey2']
ccc = 'some string'
ddd = 17
#eee = 18
"""

module_name = "my_in_memory_module"
# 创建模块规范(标记来源为内存)
spec = importlib.util.spec_from_loader(
    module_name,
    None,
    origin='memory'
)
# 从规范创建模块对象
memory_module = importlib.util.module_from_spec(spec)
# 执行代码到模块命名空间
exec(module_code, memory_module.__dict__)

# 把模块注册到sys.modules,这样后续可以用import导入
sys.modules[module_name] = memory_module

# 现在你可以像导入普通模块一样用它了
import my_in_memory_module
print(my_in_memory_module.aaa)

注意事项

  • 代码中如果有import smth这类外部模块导入,确保这些模块已经安装且能被Python找到,否则会抛出导入错误。
  • 用exec执行代码时,要确保代码是可信的,避免执行恶意代码带来安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:24:55