如何在 PyInstaller 中包含系统范围的包?

问题描述 投票:0回答:1

我正在 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
以及如何将其包含在我的独立可执行文件中?

python python-3.x raspberry-pi pyinstaller
1个回答
0
投票

首先找到 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

© www.soinside.com 2019 - 2024. All rights reserved.