使用auto-py-to-exe打包单文件EXE后SQLite无法打开数据库文件
解决单文件打包EXE后sqlite数据库无法打开的问题
问题原因
使用auto-py-to-exe单文件模式打包时,PyInstaller会将所有依赖资源解压到系统临时目录,而非EXE所在目录。你的代码中使用相对路径config\\data.sqlite,运行打包后的EXE时,这个路径指向的是当前工作目录,而非临时目录中的数据库文件,因此报错sqlite3.OperationalError: unable to open database file。
解决步骤
1. 修改数据库连接代码
在config/assets.py中,调整数据库路径的获取逻辑,适配脚本运行和打包后两种场景:
import os import sys import sqlite3 class getImages(): def __init__(self) -> None: '''Creates a dictionary of dictionaries containing image data. Attributes: images: list of image data ''' # 获取基准路径:打包后用临时目录,脚本运行时用当前文件所在目录 base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) # 拼接数据库文件的完整路径 db_file_path = os.path.join(base_path, 'data.sqlite') self.connection = sqlite3.connect(db_file_path) self.cursor = self.connection.cursor()
2. 正确配置auto-py-to-exe的资源添加规则
打开auto-py-to-exe,按以下步骤配置:
- 确认选择One File模式
- 在Additional Files区域,点击
Add Files,选择项目中的config/data.sqlite - 在该文件对应的
Destination输入框中填写config/,确保打包后数据库文件被放到临时目录的config子目录下 - 若项目中还有其他资源(如
assets/fonts/inpin.ttf),按同样方式添加:选择文件,Destination填写对应目录(如assets/fonts/) - 重新执行打包操作
验证
打包完成后运行EXE文件,此时程序会正确找到临时目录中的数据库文件,连接错误即可解决。
内容的提问来源于stack exchange,提问作者N4GR
相关产品推荐
相关产品推荐

