我正在 Raspberry Pi 设备上运行
PyInstaller
来编译独立的 Python 脚本。我的脚本旨在始终以 sudo
运行。它需要使用 smbus, psutil, pyudev, netifaces
在系统范围内安装 sudo apt install python3-...
库。
现在要使用
PyInstaller
,我创建了一个虚拟环境,激活它,并使用pyinstaller --onefile nas_script.py
进行编译。但是当我尝试执行它时 /home/marus/NAS_script/build/nas_script
我收到一个异常,说它找不到 smbus
库。
无论是
smbus
还是pip show smbus
都找不到sudo pip show smbus
。它只能被 dpkg -l | grep smbus
发现为 python3-smbus:arm64
。
当我运行 PyInstaller 时,它显示:
314 INFO: Module search paths (PYTHONPATH):
['/usr/lib/python311.zip',
'/usr/lib/python3.11',
'/usr/lib/python3.11/lib-dynload',
'/home/marus/.env/lib/python3.11/site-packages',
'/home/marus/NAS_script']
那么我如何告诉 PyInstaller 在哪里可以找到
smbus
以及如何将其包含在我的独立可执行文件中?
首先找到 smbus 库,然后将 smbus 模块复制到您的 venv 现在 smbus 模块在您的虚拟环境中可用,您可以重建可执行文件:
或者,您可以修改 PyInstaller 规范文件以包含这些库所在的特定路径:
a = Analysis(['nas_script.py'],
pathex=['/usr/lib/python3/dist-packages'],
...
)
如果 PyInstaller 没有自动检测到这些模块,请尝试 --hidden-import 选项:
pyinstaller --onefile --hidden-import=smbus nas_script.py
我建议你使用Auto PY to EXE:它或多或少是一个pyinstaller UI