MyTetra Share
Делитесь знаниями!
Компиляция программы на python 3 в exe с помощью программы cx_Freeze
Время создания: 29.07.2019 23:51
Раздел: !Закладки - Python
Запись: xintrea/mytetra_db_adgaver_new/master/base/15337612070n410mskec/text.html на raw.githubusercontent.com

Компиляция программы на python 3 в exe с помощью программы cx_Freeze

Наверняка, у каждого Python-программиста возникало непреодолимое желание, а изредка и реальная потребность, скомпилировать свою программу на python в exe файл. Сегодня я расскажу, как это сделать с помощью программы cx_Freeze.

Вопрос 1: а оно надо?

Прежде, чем начинать компилировать программу, нужно убедиться, что это действительно необходимо.

"Компиляция" программы на python - процесс, который может сопровождаться множеством проблем. Более того, это не компиляция в машинный код, как, например, программы на C, а лишь "сборка" в исполняемый файл вашей программы вместе с частью интерпретатора python.

Поэтому, если вы будете использовать программу сами или на компьютерах тех, кто её будет использовать, будет стоять интерпретатор python, то вам не нужно её компилировать.

Установка cx_Freeze

Если компилировать программу на python всё-таки нужно, то скачиваем cx_Freeze с http://www.lfd.uci.edu/~gohlke/pythonlibs/#cx_freeze (так как в ней нет одного неприятного бага, который есть в официальной версии).

Затем устанавливаем, не забывая правильно выбрать директорию, где расположен python.

Установка cx_Freeze

Компиляция

Компилировать будем программу "блэкджек" (файл 21.py) (кому лень смотреть, привожу полный исходный код).

import random

random.shuffle(koloda)


print('Поиграем в очко?')

count = 0


while True:

choice = input('Будете брать карту? y/n\n')

if choice == 'y':

current = koloda.pop()

print('Вам попалась карта достоинством %d' %current)

count += current

if count > 21:

print('Извините, но вы проиграли')

break

elif count == 21:

print('Поздравляю, вы набрали 21!')

break

else:

print('У вас %d очков.' %count)

elif choice == 'n':

print('У вас %d очков и вы закончили игру.' %count)

break


print('До новых встреч!')


Создаём в папке с программой файл setup.py с содержимым:

from cx_Freeze import setup, Executable


setup(

name = "21",

version = "0.1",

description = "Blackjack",

executables = [Executable("21.py")]

)


Переходим в командную строку (обычно Пуск → Стандартные → Командная строка). Переходим в папку с программой (в моём случае D:\Dima\py). Запускаем команду C:\Python34\python.exe setup.py build (вместо C:\Python34 нужно написать папку, куда установлен python).

Компиляция. Начало

Начнется процесс сборки, в котором cx_Freeze может выдавать предупреждения, но, скорее всего, они не повлияют на работу программы.

Предупреждения в процессе компиляции

Поздравляю! В папке build теперь есть ваша папка с исполняемым файлом!

Запуск exe файла

Заметьте, не файл, а папка! Все остальные файлы также нужны для работы программы (да, это недостаток cx_Freeze). К тому же, при завершении программы окно сразу закрывается (а не ждет нажатия клавиши), поэтому в конец программы нужно дописать что-то вроде:

input("Press Enter")


И скомпилировать ещё раз.

Также можно создать msi-архив командой C:\Python34\python.exe setup.py bdist_msi.

Разумеется, при компиляции более сложных программ вы можете столкнуться с более сложными проблемами.

Для их решения следует воспользоваться официальной документацией.

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования