64位Python+PyInstaller打包pysqlcipher应用DLL加载失败求助
解决64位PyInstaller打包pysqlcipher3的DLL缺失问题
确认依赖的DLL文件
用Dependency Walker或Process Monitor工具打开你编译的_sqlite3.cp39-win_amd64.pyd,查看它依赖的所有DLL文件。pysqlcipher3编译后通常依赖64位的sqlcipher.dll以及OpenSSL相关的DLL(如libcrypto-*.dll),这些文件在开发机上存在,但目标机没有,且PyInstaller未自动收集。注意必须使用编译pysqlcipher3时配套的64位版本DLL,不能用系统自带的sqlite.dll。强制PyInstaller包含缺失的DLL
- 方式一:修改spec文件
- 生成spec文件:执行
pyinstaller test.py得到test.spec - 打开spec文件,在
Analysis的binaries字段中添加DLL路径,示例:a = Analysis( ['test.py'], pathex=[], binaries=[('你的DLL路径/sqlcipher.dll', '.')], # 将DLL复制到输出根目录 datas=[], # 其他原有内容保持不变 ) - 用spec文件重新打包:
pyinstaller test.spec
- 生成spec文件:执行
- 方式二:命令行直接指定
打包时添加--add-binary参数:pyinstaller --add-binary "你的DLL路径/sqlcipher.dll;." test.py
- 方式一:修改spec文件
验证打包后的文件结构
打包完成后,检查dist目录下的程序文件夹,确保添加的DLL文件和pysqlcipher3目录下的_sqlite3.cp39-win_amd64.pyd处于同一层级目录。检查环境一致性
确保编译pysqlcipher3使用的Python 3.9.4 x64和PyInstaller打包使用的是同一个Python环境,避免版本不匹配导致的依赖异常;同时确认编译pysqlcipher3时使用的是纯64位的sqlcipher库,未混用32位组件。Inno Setup打包注意事项
在Inno Setup脚本中,确保将dist目录下的所有文件(包括新增的DLL)完整打包,脚本示例:[Files] Source: "dist\test\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs
内容的提问来源于stack exchange,提问作者Andrew Smith
相关产品推荐
相关产品推荐

