Я получаю следующую ошибку, когда пытаюсь запустить исполняемый файл. Программа использует библиотеку 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, выполните следующие шаги:
-
Проверьте наличие файлов: Убедитесь, что необходимые файлы, такие как
browser-helper-file.json
, на самом деле присутствуют в соответствующих директориях библиотекиbrowserforge
. Если вы не уверены, вы можете найти их в установленной библиотеке в вашей виртуальной среде. -
Используйте параметры для сбора данных: В auto-py-to-exe есть возможность указать, какие дополнительные данные следует включить в исполняемый файл. Вам нужно найти опцию
--collect-data
(или аналогичную в графическом интерфейсе) и добавитьbrowserforge
в список собираемых данных. Обычно это делается следующим образом:- Запустите auto-py-to-exe.
- В разделе "Дополнительные параметры" найдите опцию для сбора данных (может называться что-то вроде "Сбор данных").
- В поле введите
browserforge
или путь к папке, где находятся отсутствующие файлы.
-
Проверка путей: Если проблема не исчезнет, проверьте, как ваш код обращается к файлам. Убедитесь, что используете
os.path.join
или аналогичные методы для формирования путей к файлам данных. Это поможет гарантировать, что пути будут корректными на разных системах. -
Пересоберите приложение: После внесения изменений пересоберите ваше приложение с помощью auto-py-to-exe.
- Тестирование: После сборки, протестируйте сгенерированный исполняемый файл, чтобы убедиться, что ошибка исчезла и все нужные файлы теперь включены.
Если даже после этих шагов проблема не решается, вы можете рассмотреть возможность использования PyInstaller напрямую, как вы уже пробовали. В этом случае выполните следующие действия:
-
Установите PyInstaller, если он ещё не установлен:
pip install pyinstaller
-
Перейдите в директорию с вашим скриптом и выполните команду:
pyinstaller --onefile --add-data "путь_к_файлам;папка_в_которой_будут" main.py
-
Параметр
--add-data
позволяет указать дополнительные файлы и папки, которые вы хотите включить в исполняемый файл, гдепуть_к_файлам
— это путь к файлам (например,browser-helper-file.json
), апапка_в_которой_будут
— это папка, в которую будут помещены эти файлы внутри вашего исполняемого файла. - После завершения сборки протестируйте получившийся код.
Надеюсь, эти шаги помогут вам успешно создать исполняемый файл с использованием вашего проекта и избежать ошибок, связанных с отсутствующими зависимостями.