Отсутствие файлов зависимости в исполняемом файле Python, упакованном с помощью auto-py-to-exe

Вопросы и ответы

Я получаю следующую ошибку, когда пытаюсь запустить исполняемый файл. Программа использует библиотеку browserforge.

C:\Users\jacob\Documents\output>main.exe
browser-helper-file.json ----------------------------------------   0% 0/? bytes ?
header-network.json      ----------------------------------------   0% 0/? bytes ?
headers-order.json       ----------------------------------------   0% 0/? bytes ?
input-network.json       ----------------------------------------   0% 0/? bytes ?
fingerprint-network.json ----------------------------------------   0% 0/? bytes ?
Traceback (most recent call last):
  File "main.py", line 4, in <module>
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "browserforge\injectors\__init__.py", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "browserforge\injectors\utils.py", line 8, in <module>
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "browserforge\fingerprints\__init__.py", line 3, in <module>
  File "browserforge\download.py", line 159, in DownloadIfNotExists
  File "browserforge\download.py", line 150, in Download
  File "asyncio\runners.py", line 194, in run
  File "asyncio\runners.py", line 118, in run
  File "asyncio\base_events.py", line 687, in run_until_complete
  File "browserforge\download.py", line 145, in AsyncDownload
  File "browserforge\download.py", line 137, in download
  File "browserforge\download.py", line 111, in _download_and_extract
  File "browserforge\download.py", line 75, in _download_file
  File "aiofiles\base.py", line 63, in __aenter__
  File "aiofiles\base.py", line 59, in __await__
  File "aiofiles\threadpool\__init__.py", line 92, in _open
  File "concurrent\futures\thread.py", line 58, in run
FileNotFoundError: [Errno 2] Нет такого файла или каталога: 'C:\\Users\\jacob\\AppData\\Local\\Temp\\_MEI64042\\browserforge\\headers\\data\\browser-helper-file.json'
[PYI-7868:ERROR] Не удалось выполнить скрипт 'main' из-за необработанного исключения!

Я пробовал включить отсутствующий файл через auto-py-to-exe, но это не дало результата. Я убедился, что все библиотеки установлены в виртуальном окружении, и я также запускаю auto-py-to-exe в виртуальном окружении. Как мне убедиться, что исполняемый файл включает файлы, используемые библиотекой browserforge?

В библиотеке отсутствует файл, который вызывает это исключение при запуске, я использую pyinstaller вместо auto-py-to-exe.

У pyinstaller много возможностей, таких как:

  • Очень просто
  • Совместимость с большинством библиотек
  • Совместимость с GUI

Просто установите pyinstaller pip install pyinstaller
Затем перейдите к пути к файлу и откройте cmd, затем выполните pyinstaller pyinstaller <имя_главного_файла.py>

Если вы хотите, чтобы проект был в одном файле с расширением ‘exe’, добавьте --onefile

Если хотите убрать первое черное окно, добавьте ‘–noconsole’

Если хотите конвертировать GUI-приложение в exe, просто добавьте ‘-w’

Надеюсь, это поможет вам.

Мне удалось решить эту проблему. В auto-py-to-exe включите browserforge в разделе “–collect-data”.

Ответ

Чтобы решить проблему с отсутствующими файлами зависимостей при упаковке вашего Python приложения с помощью auto-py-to-exe, выполните следующие шаги:

  1. Проверьте наличие файлов: Убедитесь, что необходимые файлы, такие как browser-helper-file.json, на самом деле присутствуют в соответствующих директориях библиотеки browserforge. Если вы не уверены, вы можете найти их в установленной библиотеке в вашей виртуальной среде.

  2. Используйте параметры для сбора данных: В auto-py-to-exe есть возможность указать, какие дополнительные данные следует включить в исполняемый файл. Вам нужно найти опцию --collect-data (или аналогичную в графическом интерфейсе) и добавить browserforge в список собираемых данных. Обычно это делается следующим образом:

    • Запустите auto-py-to-exe.
    • В разделе "Дополнительные параметры" найдите опцию для сбора данных (может называться что-то вроде "Сбор данных").
    • В поле введите browserforge или путь к папке, где находятся отсутствующие файлы.
  3. Проверка путей: Если проблема не исчезнет, проверьте, как ваш код обращается к файлам. Убедитесь, что используете os.path.join или аналогичные методы для формирования путей к файлам данных. Это поможет гарантировать, что пути будут корректными на разных системах.

  4. Пересоберите приложение: После внесения изменений пересоберите ваше приложение с помощью auto-py-to-exe.

  5. Тестирование: После сборки, протестируйте сгенерированный исполняемый файл, чтобы убедиться, что ошибка исчезла и все нужные файлы теперь включены.

Если даже после этих шагов проблема не решается, вы можете рассмотреть возможность использования PyInstaller напрямую, как вы уже пробовали. В этом случае выполните следующие действия:

  1. Установите PyInstaller, если он ещё не установлен:

    pip install pyinstaller
  2. Перейдите в директорию с вашим скриптом и выполните команду:

    pyinstaller --onefile --add-data "путь_к_файлам;папка_в_которой_будут" main.py
  3. Параметр --add-data позволяет указать дополнительные файлы и папки, которые вы хотите включить в исполняемый файл, где путь_к_файлам — это путь к файлам (например, browser-helper-file.json), а папка_в_которой_будут — это папка, в которую будут помещены эти файлы внутри вашего исполняемого файла.

  4. После завершения сборки протестируйте получившийся код.

Надеюсь, эти шаги помогут вам успешно создать исполняемый файл с использованием вашего проекта и избежать ошибок, связанных с отсутствующими зависимостями.

Оцените материал
Добавить комментарий

Капча загружается...