树莓派下如何让PyInstaller识别并纳入系统级Python包?
解决PyInstaller无法找到系统级smbus库的问题
问题原因
通过sudo apt install安装的python3-smbus属于系统级Python库,默认存放在系统Python的dist-packages目录下。但激活虚拟环境后,PyInstaller的模块搜索路径仅包含虚拟环境的site-packages和基础Python路径,未覆盖系统级的dist-packages,因此无法定位到smbus。
解决方案
1. 定位系统级smbus的安装路径
执行以下命令找到smbus所在的系统目录:
find /usr/lib/python3* -name smbus.py
通常输出类似/usr/lib/python3.11/dist-packages/smbus.py,记下该文件的父目录(即/usr/lib/python3.11/dist-packages)。
2. 让PyInstaller纳入系统库路径
两种方式任选其一:
- 方式一:临时设置PYTHONPATH环境变量
在运行PyInstaller前,将系统dist-packages路径加入环境变量:PYTHONPATH=/usr/lib/python3.11/dist-packages pyinstaller --onefile nas_script.py - 方式二:使用PyInstaller的
--paths参数
直接在编译命令中指定路径:pyinstaller --onefile --paths=/usr/lib/python3.11/dist-packages nas_script.py
3. 验证编译结果
运行PyInstaller时,检查输出的Module search paths,确认系统dist-packages路径已被纳入。编译完成后,运行dist目录下的最终可执行文件(build目录为临时编译产物):
sudo ./dist/nas_script
额外说明
如果其他系统级依赖(如pyudev、netifaces)也出现找不到的问题,重复上述步骤即可,确保它们所在的系统路径被PyInstaller纳入搜索范围。
内容的提问来源于stack exchange,提问作者Marus Gradinaru
相关产品推荐
相关产品推荐

