PyInstaller打包含configparser程序在其他设备报NoSectionError怎么解决
问题根因
你收到的configparser.NoSectionError报错核心是程序运行时未正确加载到settings.ini配置文件,空配置对象自然找不到指定的settings节点。你写的resource_path适配逻辑本身没有问题,问题出在遗漏了两个必要操作。
解决方案
- 步骤1:调用路径读取配置
你当前的代码仅生成了配置文件的路径,没有实际让ConfigParser对象加载该路径的文件,需要补充read调用,建议同时指定编码避免乱码:
parser = ConfigParser() settings_file = resource_path('settings.ini') # 补充这行代码 parser.read(settings_file, encoding='utf-8')
- 步骤2:打包时绑定资源文件
使用PyInstaller打包时需要通过参数指定把settings.ini作为资源文件打包进程序:- 命令行打包时添加参数:
pyinstaller -F app.py --add-data "settings.ini;."(Windows环境,分号后.表示资源释放到临时目录根路径) - 若使用spec文件打包,修改
datas配置项为datas=[('settings.ini', '.')]即可
- 命令行打包时添加参数:
可选场景适配
如果你希望用户可以直接修改配置文件,不需要每次改配置都重新打包,可以不把settings.ini打包进程序,打包时不要加上面的--add-data参数,分发时把生成的exe和settings.ini放在同一个文件夹下拷贝到其他电脑即可正常运行。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

