Я пытаюсь заморозить скрипт Python 3.7, используя pygame, в исполняемый файл (и создать установщик .msi), используя cx_Freeze с командой python setup.py bdist_msi , на моем * Компьютер 1037 * 10.
Я могу успешно собрать exe-файл с помощью cx_Freeze без указания значка, а также могу создать exe-файл из пустого python сценария, но с моим значком app_icon.ico. У этого второго exe-файла есть иконка, поэтому мой ico-файл кажется правильным. Но выполнение обоих одновременно (добавление опции icon=icon.ico
в Executable(...)
в cx_Freeze) приводит к быстрой ошибке после копирования некоторых библиотек в папку build \ exe.win-amd64-3.7 \:
running bdist_msi
running build
running build_exe
creating directory build\exe.win-amd64-3.7
copying c:\users\alexandre\anaconda3\lib\site-packages\cx_Freeze\bases\Console.exe -> build\exe.win-amd64-3.7\test.exe
copying c:\users\alexandre\anaconda3\api-ms-win-crt-stdio-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-stdio-l1-1-0.dll
copying c:\users\alexandre\anaconda3\python37.dll -> build\exe.win-amd64-3.7\python37.dll
copying c:\users\alexandre\anaconda3\VCRUNTIME140.dll -> build\exe.win-amd64-3.7\VCRUNTIME140.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-runtime-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-runtime-l1-1-0.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-math-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-math-l1-1-0.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-locale-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-locale-l1-1-0.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-string-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-string-l1-1-0.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-convert-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-convert-l1-1-0.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-time-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-time-l1-1-0.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-environment-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-environment-l1-1-0.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-heap-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-heap-l1-1-0.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-process-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-process-l1-1-0.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-conio-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-conio-l1-1-0.dll
copying c:\users\alexandre\anaconda3\api-ms-win-crt-filesystem-l1-1-0.dll -> build\exe.win-amd64-3.7\api-ms-win-crt-filesystem-l1-1-0.dll
error: [WinError 2] Le fichier spcifi est introuvable: 'build\\exe.win-amd64-3.7\\test.exe'
Последняя строка на французском означает «Указанный файл не найден:».
Вот минимальный пример, который я придумал.
У меня есть папка Test \, содержащая значок app_icon .ico, пустой файл test.py и этот файл setup.py:
import cx_Freeze
cx_Freeze.setup(
name="Test",
options={"build_exe":
{
"packages":["pygame"],
"include_files": ["app_icon.ico"],
},
},
executables = [cx_Freeze.Executable(script="test.py",
#icon="app_icon.ico"
)
]
)
Обратите внимание, что попытка пропустить "packages":["pygame"]
в файле setup.py при использовании модуля в файле test.py приведет к та же проблема (я думаю, что писать "packages":["pygame"]
не нужно, поскольку cx_Freeze обнаружит pygame, если он используется).
Раскомментирование icon="app_icon.ico"
вызывает ошибку, а затем комментирование "packages":["pygame"]
удаляет ее.
В качестве последней, но озадачивающей детали: если я решу создать свой exe-файл (с моим полным полным python кодом для игры, но без иконки), я все равно могу сделать ярлык (вручную или с помощью опций *). 1025 *). У него будет иконка по умолчанию. Я могу изменить его с помощью правого клика (на ярлыке на рабочем столе), свойств, значка изменения. При щелчке на значке изменения всегда будет сообщаться
, следующий файл не найден:% APPDATA% \ Microsoft \ Installer {длинное шестнадцатеричное имя} ... \ app_icon.ico
Что странно, так как я ожидаю, что исполняемый файл будет искать свой значок в TargetDir или там, где он установлен, но не в папке% APPDATA% \ Microsoft \ Installer \. Я пытался установить папку exe в разные места, но всегда появляется одна и та же ошибка Microsoft \ Installer not found. И хотя я могу нажать «ок», чтобы закрыть это сообщение об ошибке, затем нажать «Обзор», чтобы вручную найти собственный файл ico. Если я в конечном итоге выберу иконку app_icon.ico, она будет принята и станет иконкой для ярлыка.
Прежде чем я закончу, моя проблема не имеет ничего общего с отсутствующими библиотеками mkl_ *, что является постоянной проблемой в темах SO, связанных с в cx_Freeze и Pygame. Я включил их в мое приложение без значков, которое прекрасно работает. Моя проблема на самом деле связана с иконкой, которая, кажется, имеет аллергию c на pygame.