Вопрос или проблема
pyav не распознается после установки скрипта с помощью pyinstaller
Я пытаюсь создать скрипт с использованием pyav, чтобы собрать его в исполняемый файл.
(строка представляет собой простое import av
в основном скрипте)
Исполняемый файл не запускается из-за типичной ошибки «модуль не найден»: Нет модуля с именем ‘av’
Мой импорт не скрыт, он находится в основном скрипте. (я также пытался установить с помощью pyinstaller с опцией –hidden-import=av. Это не дало никаких изменений)
Я использую последнюю версию pyinstaller и версию python 3.9
Я добавил это, когда запускал мой bash-скрипт. При выполнении команды freeze я вижу, что pyav установлен.
pyinstaller.exe myscript.py --onefile
pip freeze
Есть идеи, что здесь не так?
Вот мой spec файл
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['myscript.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name="myscript",
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
Ответ или решение
Проблема, с которой вы столкнулись, связана с тем, что PyInstaller не может найти модуль PyAV при сборке вашего исполняемого файла. Хотя вы провели установку и видите модуль в списке установленных пакетов, PyInstaller может не правильно обработать некоторые зависимости. Давайте рассмотрим шаги, которые могут помочь в решении этой проблемы.
1. Убедитесь, что PyAV установлен корректно
Прежде всего, убедитесь, что вы установили PyAV правильно. Выполните команду:
pip install av
Убедитесь, что у вас установлена последняя версия, совместимая с вашей версией Python.
2. Проверьте зависимости PyAV
PyAV зависит от библиотек FFmpeg. Убедитесь, что FFmpeg установлен и доступен в вашей системе. Вы можете проверить это, выполнив команду:
ffmpeg -version
Если команда не распознается, вам нужно установить FFmpeg и добавить его в переменную окружения PATH.
3. Добавьте явный импорт в ваш исполняемый файл
Вы правильно attempted использовать флаг --hidden-import
. Однако иногда необходимо указать дополнительные зависимости в вашем .spec файле. В вашем случае добавьте av
в секцию hiddenimports
, вот так:
hiddenimports=['av'],
Ваш обновленный .spec файл должен выглядеть так:
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['myscript.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=['av'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name="myscript",
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
4. Пересоберите ваш исполняемый файл
После внесения всех изменений пересоберите ваш исполняемый файл, используя следующую команду:
pyinstaller myscript.spec
5. Путем отладки
Если проблема остается нерешенной, попробуйте следующее:
- Запустите вашу основную программу (не в виде исполняемого файла), чтобы убедиться, что нет других ошибок.
- Пересоздайте виртуальную среду, чтобы исключить конфликты версий библиотек.
- Попробуйте собрать исполняемый файл без флага
--onefile
, чтобы увидеть, будут ли какие-либо дополнительные файлы или библиотеки недоступны.
6. Проверка успешной сборки
После успешной сборки и запуска исполняемого файла проверьте наличие ошибок. Если ошибки продолжат возникать, предоставьте стек вызовов и дополнительные сведения для дальнейшего анализа.
Следуя этим шагам, вы сможете решить проблему с отсутствующим модулем PyAV и успешно собрать ваш исполняемый файл с помощью PyInstaller. Если у вас остались вопросы, не стесняйтесь их задавать!