Python 编译exe配置项保存

1、前提条件

        将编写的python打包成exe文件,但是需要保存用户的配置可读写

2、分析过程

def get_config_path():
    # 获取当前脚本所在的目录
    base_path = os.path.dirname(os.path.abspath(__file__))
    # 配置文件的路径
    config_path = os.path.join(base_path, "config.ini")
    return config_path

config_path = C:\Users\MAO~1.ZHA\AppData\Local\Temp\_MEI169842\config.ini

config_path = C:\Users\MAO~1.ZHA\AppData\Local\Temp\_MEI169842\config.ini
2025-04-22 11:49:46 14488 11488 save_module_path_config
2025-04-22 11:49:46 14488 11488 save_config C:\Users\MAO~1.ZHA\AppData\Local\Temp\_MEI169842\config.ini

Log中看,用户设置后都保存在C:\Users\MAO~1.ZHA\AppData\Local\Temp\_MEI169842\config.ini 临时目录中

关闭exe后再次启动配置文件出现在另外的目录,导致用户设置不生效

config_path = C:\Users\MAO~1.ZHA\AppData\Local\Temp\_MEI201242\config.ini

3、解决方案

 修改代码如下

def get_config_path():
    if getattr(sys, 'frozen', False):
        base_dir = os.path.dirname(sys.executable)
        tprint(f"get_config_path base_dir = {base_dir}")
    else:
        base_dir = os.path.dirname(os.path.abspath(__file__))
    return os.path.join(base_dir, 'config.ini')

其中判断条件 getattr(sys, 'frozen', False)

  • 如果直接运行脚本(如 python script.py),sys.frozen 为 False。
  • 如果脚本被打包为 .exe 文件并运行,sys.frozen 为 True。

该判断当前脚本是否被打包为可执行文件,从而在开发环境和打包环境中正确处理路径、资源加载等问题。

这样config.ini会和exe文件在同一个目录生成。关闭程序后,再次打开依然生效。

Python 编译exe配置项保存_第1张图片

你可能感兴趣的:(Python,python)