Python中能否修改本地模块变量并将修改保存至模块文件?
问题解答:修改导入模块的变量无法保存到原文件
首先直接给结论:你这样的操作是没办法把修改保存到config.py文件里的,下面给你解释原因和解决办法。
为什么修改没生效?
当你执行import config的时候,Python其实是把config.py里的代码跑了一遍,把里面定义的cfg_x、cfg_y这些变量加载到内存里的config模块对象中。你后续执行cfg_x['example'] = 'different value',只是修改了内存中那个字典对象的内容,完全没有对磁盘上的config.py文件做任何写入操作。
等你退出Python控制台,内存里的所有数据都会被销毁,下次重新运行程序时,Python会再次读取原config.py的内容,自然还是原来的空字典{}。
怎么才能持久化保存配置修改?
如果你需要把修改后的配置存下来,别直接改Python模块里的变量,推荐用下面几种更靠谱的方式:
1. 使用JSON配置文件(最常用、易上手)
把配置从config.py转移到config.json文件里:
{ "cfg_x": {}, "cfg_y": 1031, "cfg_z": "Hello!" }
然后在myproj.py里这样读写配置:
import json # 读取配置到内存 with open('config.json', 'r', encoding='utf-8') as f: config = json.load(f) # 修改配置内容 config['cfg_x']['example'] = 'different value' # 把修改后的配置写回文件 with open('config.json', 'w', encoding='utf-8') as f: json.dump(config, f, indent=4, ensure_ascii=False)
2. 使用INI配置文件(适合结构化的多段配置)
如果你的配置有不同的分组,可以用configparser模块处理INI格式的config.ini:
[Settings] cfg_y = 1031 cfg_z = Hello! [CustomData] ; 这里存cfg_x的键值对
对应的读写代码:
from configparser import ConfigParser # 初始化配置解析器并读取文件 config = ConfigParser() config.read('config.ini', encoding='utf-8') # 修改配置(把cfg_x的内容对应到CustomData段) config['CustomData']['example'] = 'different value' # 保存修改到文件 with open('config.ini', 'w', encoding='utf-8') as f: config.write(f)
3. 非要用Python文件当配置?(不推荐)
如果你坚持要保留config.py作为配置文件,那只能手动把修改后的变量值写成Python代码写入文件,比如:
import config # 修改内存中的变量 config.cfg_x['example'] = 'different value' # 生成要写入config.py的内容 config_code = f"""cfg_x = {repr(config.cfg_x)} cfg_y = {repr(config.cfg_y)} cfg_z = {repr(config.cfg_z)} """ # 写入原文件 with open('config.py', 'w', encoding='utf-8') as f: f.write(config_code)
⚠️ 注意:这种方式风险很高,比如如果变量里有复杂对象(比如自定义类实例),repr()可能无法正确序列化,而且会覆盖原文件里的注释或其他代码,除非你有特别的需求,否则不建议这么做。
内容的提问来源于stack exchange,提问作者violetsg
相关产品推荐
相关产品推荐

