Py в exe при помощи Pyinstaller exe файлом

Пишу приложение которое должно уметь формировать exe файлы из скриптов на python. Вот код установщика:

import PyInstaller.__main__
PyInstaller.__main__.run(['-n=Другой файл', '-F', '--icon=Icon.ico', 'Test.py'])

При запуске данного кода, как python-скрипт, данный код работает корректно. Однако если создать exe файл из данного файла с помощью PyInstaller, PyInstaller уходит в бесконечный цикл, повторяя одно и то же сообщение, не формируя из py скрипта exe файл:

250 INFO: PyInstaller: 6.10.0, contrib hooks: 2024.8
250 INFO: Python: 3.12.6
273 INFO: Platform: Windows-10-10.0.19045-SP0
273 INFO: Python environment: C:\Users\219D8C~1\AppData\Local\Temp\_MEI116882
273 INFO: wrote D:\PC projects\PROGRAMM\Test.spec
276 INFO: Module search paths (PYTHONPATH):
['C:\\Users\\219D8C~1\\AppData\\Local\\Temp\\_MEI116882\\base_library.zip',
'C:\\Users\\219D8C~1\\AppData\\Local\\Temp\\_MEI116882\\lib-dynload',
'C:\\Users\\219D8C~1\\AppData\\Local\\Temp\\_MEI116882',
'C:\\Users\\219D8C~1\\AppData\\Local\\Temp\\_MEI116882\\setuptools\\_vendor',
'D:\\PC projects\\PROGRAMM']

При закрытии этого исполняемого файла появляется столько KeyboardInterrupt, сколько исполняемый файл успел продублировать это сообщение. Пытался скопировать весь модуль PyInstaller в установщик при помощи флагов --collect-all, --recursive-copy-metadata, но это тоже ни к чему не привело. Близкая проблема тут

Возможно, есть способ изменить иконку уже существующего exe файла средствами python? Тот скрипт, который должен получаться - однотипен и постоянен. Просто нужна возможность установить на него иконку (именно exe файла)


Ответы (2 шт):

Автор решения: Fox Fox

Не знаю, откуда Вы взяли такую заумную писанину, я такой даже на официальном сайте не видел. Попрощайтесь с ней и поскорее.

Вот страница документации: https://pyinstaller.org/en/stable/

Вот пример сборки, которую использую я сам (это команда из файла .cmd; если не поймёте что за опции, спрашивайте, я уточню):

pyinstaller -y --uac-admin --clean ^
--onedir --runtime-tmpdir="." --distpath="." --contents-directory="Runtimes" ^
--add-data=".\DB\rhymes.db;DB" ^
--add-data=".\HELP\rhymes.pdf;HELP" ^
--hide-console=hide-early --icon=..\IMAGES\app.png .\rhymes.py
→ Ссылка
Автор решения: артём кириченко

Если же всё-таки вам никак не обойтись без данной фичи, то вот способ: В вашу программу в какую-нибудь папку запихиваем интерпретатор Python (все файлы) с установленными модулями (к примеру, python), далее можем создать сценарий windows pyinstaller.bat, в нём пишем следующий код:

python\python.exe -m PyInstaller %*

Теперь мы можем запустить компиляцию из скрипта py с помощью команды

reg = f'pyinstaller -F --icon="{self.settings.value(self._project)}" -n="{self.fw.data["out"]}" --clean ARTmain.py'
os.system(reg)

Это просто пример, запрос может быть любым. Притом это будет работать, даже если мы переведём скрипт в exe файл, ведь мы просто запускаем формирование exe на вшитом интерпретаторе python.

→ Ссылка