Я запускаю PyInstaller
на устройстве Raspberry Pi, чтобы скомпилировать автономный скрипт 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 есть инструменты для тестирования кода, такие как библиотека unittest.
Сначала найдите библиотеку 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.