使用PyInstaller生成跨平台可执行文件时遇文件找不到错误
问题解决与相关说明
一、修复FileNotFoundError的正式方案
错误根源是PyInstaller打包时未自动包含ssqueezepy库的configs.ini配置文件,导致运行时无法找到该文件。以下是两种可靠修复方式:
1. 命令行直接指定打包文件
先找到Python环境中ssqueezepy/configs.ini的实际路径:
- 虚拟环境下路径示例:
venv/lib/pythonX.X/site-packages/ssqueezepy/configs.ini - 系统环境下路径示例:
/usr/local/lib/pythonX.X/dist-packages/ssqueezepy/configs.ini
然后执行打包命令,通过--add-data参数指定要打包的文件:
pyinstaller --debug=all --add-data "/实际路径/ssqueezepy/configs.ini:ssqueezepy" gui.py
这里的冒号是Linux系统的路径分隔符,作用是将源文件打包到可执行文件目录下的ssqueezepy子文件夹中,保持和原库一致的目录结构。
2. 编辑PyInstaller的spec文件
先生成spec配置文件:
pyinstaller --debug=all gui.py
打开生成的gui.spec,找到datas=[]行,修改为:
datas=[('/实际路径/ssqueezepy/configs.ini', 'ssqueezepy')],
最后重新执行打包:
pyinstaller gui.spec
二、关于configs.ini
这是ssqueezepy库的全局配置文件,用来存储该库的默认运行参数,比如小波变换的默认小波基、输出格式、计算精度等设置。库在初始化阶段会读取该文件加载默认配置,因此必须和库代码一同打包。
三、其他生成跨平台可执行文件的方法
1. Ubuntu下生成Windows可执行文件
PyInstaller本身不支持跨系统直接打包,要在Ubuntu上生成Windows可执行文件,可采用以下两种方式:
- Wine运行Windows版PyInstaller:在Ubuntu上安装Wine,下载Windows版Python和PyInstaller,通过Wine调用Windows环境的PyInstaller完成打包。
- Docker容器打包:拉取包含Windows环境、Python和PyInstaller的Docker镜像,在容器内完成打包操作,Ubuntu本地通过Docker运行该容器即可。
2. 替代PyInstaller的工具
- Nuitka:将Python代码编译为C代码后生成可执行文件,性能更优,同样可通过Wine在Ubuntu下编译Windows可执行文件。
- cx_Freeze:和PyInstaller功能类似的打包工具,需对应系统环境,或通过Wine/Docker实现跨系统打包。
内容的提问来源于stack exchange,提问作者PiEmmeC
相关产品推荐
相关产品推荐

