Python 3. Компиляция в EXE и MSI.
Запись от Фаер размещена 16.05.2014 в 17:46
Показов 46919
Комментарии 9
Метки cx_freeze, exe, msi, python, компиляция
|
Наверняка, у каждого Python-программиста возникало непреодолимое желание, а иногда и реальная потребность, скомпилировать свой .py-файл в исполняемый .exe. Нынче в интернете можно найти множество подробных описаний данной процедуры, однако практически все они списаны слово в слово из не очень компетентного источника, поэтому в скором времени последователь этих методик заходит в тупик(испытано на себе). Я же, имея некоторый опыт в этой области, намереваюсь расписать Вам рабочий рецепт компилирования .py в .exe, не забыв при этом упомянуть способы решения самых распространённых проблем сборки. Насколько мне известно, единственная утилита, которая может с более или менее устойчивым успехом компилировать приложения(и которой я уже почти год успешно пользуюсь) - это cx_Freeze. Найти её и скачать, я думаю, Вы сможете самостоятельно. Подавляющее большинство методов(точнее один и тот же, просто расположенный в разных местах) упирается в использование файла .bat в качестве инициализатора процедуры компиляции, проводимой cx_Freeze. Я этот рецепт опробовал и скажу Вам: очень плохой метод. Я думал, намного лучше будет. Именно поэтому Мы пойдём в другую сторону. Итак, первое, что Нам нужно - это установленная утилита cx_Freeze. После установки в каталоге python33(или где у Вас Python расположен) появится папка Scripts, в которой уже должны быть кое-какие файлы. Давайте создадим в этом каталоге папку dist(так уж принято её называть) и закинем в неё скрипт, который хотим скомпилировать. Теперь опишем такой файл-инициализатор:
Так, теперь, примера ради(и чтобы сразу закрыть тему переноса Python GUI в плоскость .exe), напишем такой скрипт:
Конечно, Вы не могли не заметить импортирования модуля re. Дело в том, что ни один скомпилированный .exe-файл не будет работать, если в нём не импортируется re. Запомните это! Хотя, если забудете, неработающий .exe выдаст ошибку, Traceback которой напомнит Вам, что к чему. Теперь внимательно! Поднимаемся на один каталог вверх. Если компилируемый и компилирующий файлы находятся в каталоге dist, то после подъёма Вы должны увидеть папку c именем dist. Кликаем на неё правой кнопкой мыши и нажимаем "Командная строка". В появившейся консоли пишем следующую команду:
Конечно, трудно не обратить внимание на сопутствующие файлы, которых будет достаточно много. Могу сказать только одно: не трогайте их! cx_Freeze в эти самые файлы зашивает интерпретатор Python и все нужные для выполнения скрипта модули, так что изменять их или удалять - это плохая идея. В принципе, существует метод заливания всего этого добра в один самораспаковывающийся архив. Делается это с помощью стандартной утилиты Windows(по крайней мере, в XP она точно есть), однако я описывать этот метод не буду, потому что считаю его нерабочим(проверено на практике). Более того, разработчики утверждают, что сшивать всё в один файл нежелательно, потому что сжимающие утилиты используют не совсем корректный подход к проблеме, из-за чего антивирусы могут распознать в Вашем файле угрозу. Не забывайте о таком замечательном предмете, как ярлыки. Они помогут Вам и Вашим пользователям запускать скомпилированный скрипт прямо с рабочего стола, без долгого поиска .exe среди множества других файлов. (Создавать ярлыки, я думаю, все умеют). В принципе, если Вы допустите какую-нибудь ошибку при компилировании скрипта, Вы увидите соответствующий Traceback при запуске .exe, но есть некоторые проблемы(с которыми я уже сталкивался), которым я хотел бы уделить внимание. Слёт кодировки: Во-первых, при компилировании скриптов очень часто возникают проблемы с символьными данными, в частности, все русские буквы превращаются в, так называемые, кракозябры. Дабы зафиксировать этот баг, в начале каждого компилируемого скрипта прописывайте две команды:
Пронос файлов: Если в Вашем приложении предусмотрено взаимодействие с графическим интерфейсом, а оно, скорее всего, так и есть, Вам может понадобиться несколько картинок или, к примеру, звуковых файлов. Не слушайте тех, кто говорит, что эти файлы нужно предварительно сериализовывать, упаковывать или что-то в этом роде. На самом деле, Вам нужно просто взять эти файлы и скопировать в папку с уже скомпилированным файлом .exe. Например, в моём скрипте встречается такая строка:
Иконка для .exe: Это достаточно интересная и очень простая часть. Для того, чтобы прицепить к своему .exe-файлу иконку, в конце файла setup.py нужно прописать соответствующую команду:
Отсутствующие dll: Это ещё одна возможная проблема. Бывает, при запуске пользователь получает окно с надписью: "MSVCR100.dll отсутствует, попробуйте переустановить программу." или что-то в этом роде. Чтобы решить эту проблему, клиенту нужно установить MS Visual Studio, обычно 2010. Разумно поставлять установочный файл данной утилиты в одной упаковке со своим приложением. Сборка установочного файла: С этого, пожалуй, нужно было начинать. Для удобства переноса/передачи скомпилированное приложение можно сразу замешать в .msi-файл. Это стандартный установочный файл Windows, который при запуске предложит пользователю выбрать каталог установки и распакует туда все данные. По-прежнему, это не даёт возможности собрать всё приложение в один .exe файл(если честно, я даже не знаю, зачем это нужно). Сделать .msi-файл можно, запустив в консоли команду:
Новости по поводу книг: "Python 3 GUI Pmw" не получается дописать из-за того, что сам Pmw и другие GUI модули не работают с Python 3. Написанная часть руководства по Pmw будет добавлена в первую книгу Python 3 GUI. Смешивание и заключительное редактирование закончится, предположительно, в пределах недели. К слову, на сегодняшний день существует такая программа, как Компилятор Бозон, позволяющая посредством графического интерфейса установить все параметры сборки. Никаких больше консолей, выписывания файлов setup и всего такого. Вы можете десятками прикреплять файлы в пару кликов, автоматически определять дополнительные пакеты и напрочь забыть об ошибке MSVCRT100.dll - решение вшито (в полной версии). | |||||||||||||||||||||||||||||||||||
Метки cx_freeze, exe, msi, python, компиляция
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 9
Комментарии
-
Мне не понравился ваш "пронос" файлов, а что будете делать при сборке msi? Просить пользователей добавлять картинки в установочную папку? Почему не хотите сделать так:
Python 1 2 3 4 5 6
......... includefiles=["icon.ico"] includes=[] ......... options = {'build_exe': {'include_files':includefiles}, "bdist_msi": bdist_msi_options,},
Запись от akzo размещена 19.08.2015 в 19:38
-
Запись от Фаер размещена 20.08.2015 в 18:54
-
Запись от akzo размещена 20.08.2015 в 20:11
-
Запись от Фаер размещена 27.08.2015 в 17:40
-
Запись от kravam размещена 15.09.2016 в 00:45
-
Запись от Фаер размещена 16.09.2016 в 20:43
-
Запись от Avazart размещена 17.09.2016 в 11:41
-
Не нужно ставить всю MSVC достаточно поставить Redistributable Package соответствующей битности.Запись от Avazart размещена 17.09.2016 в 11:47
-
Глупая идея - это бакланить в каждой второй теме. Как Вы вообще жить успеваете с таким КПД по демагогии?
Сообщение от Avazart
Последний человек, который на моих глазах использовал эти "кривые решения", защитил дипломную в ИТМО на пятёрку, представив свою компилированную Python-программу.
Да что Вы говорите!!! Не может этого быть!
Люди уже вообще забыли о проблеме MSVCRT - решили вопрос без участия любителей устанавливать горы инструментов для инструментов.Запись от Фаер размещена 20.09.2016 в 17:58






