Найти тему
Kiber Cyber

Пакуем Python в EXE.

Всем известно что питон это интерпретируемый, а не компилируемый язык . И в первую очередь рассчитан для работы в командной строке. Тем не менее, существует много вариантов оформления кода в GUI при необходимости. Но сегодня речь пойдёт об упаковке программы в EXE.

Зачем вообще это надо? Да по сути и не надо в большинстве случаев. Но бывает, что вы написали или скопировали какую-нибудь интересную тулзу, и хотите с ней поделиться. Конечно, если у того, кому вы отправляете прогу есть Python, то проблем нет. А бывает, что человек не шарит совсем в кодинге, и как пользователь тоже не имеет установленного питона нужной версии.

Вот тогда и выручает упаковка файла или файлов в EXE. Такой файл будет запускаться и работать по клику мышки, всё очень просто.

Для сборки файлов в экзешник есть разные приложения. Я рассмотрю самый простой, без всяких заморочек, с которым разберётся любой новичок.

Скачиваем прогу (Convert to EXEPyInstallerGUI) Распаковываем архив. Внутри папки будет конвертер, запускающийся по клику мышки.

Так, нам понадобится подопытный. Для этого я сотряпал простой текстовый редактор, который открывает файл, и после редактирования сохраняет его. Ну или просто в окне можно что-то написать и сохранить.

Код редактора:

Python:

# -*- coding:utf -8 -*-
__version__ = 'Version:1.0'
from tkinter import *
from tkinter import filedialog as fd

root = Tk()
root.title("Textedit " +str(__version__))
root.resizable(width=False, height=False)
root.geometry("420x300+300+300")
calculated_text = Text(root,height=15, width=50)

def insertText():
file_name = fd.askopenfilename()
f = open(file_name)
s = f.read()
calculated_text.insert(1.0, s)
f.close()

def extractText():
file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"),
("HTML files", "*.html;*.htm"),
("All files", "*.*") ))
f = open(file_name, 'w')
s = calculated_text.get(1.0, END)
f.write(s)
f.close()

def erase():
calculated_text.delete('1.0', END)

b1 = Button(text="Открыть",command=insertText)
b1.grid(row=3, column=0, sticky=E, padx=5, pady=8,)
b2 = Button(text="Сохранить", command=extractText)
b2.grid(row=3, column=1, sticky=E, padx=5, pady=8,)
erase_button = Button(text="Очистить", command=erase)
erase_button.grid(row=3, column=2, padx=35, pady=8, sticky="W")

scrollb = Scrollbar(root, command=calculated_text.yview)
scrollb.grid(row=4, column=4, sticky='nsew')
calculated_text.grid(row=4, column=0, sticky='nsew', columnspan=3)
calculated_text.configure(yscrollcommand=scrollb.set)

root.mainloop()

Запускаем прогу, так она выглядит
Запускаем прогу, так она выглядит

Выставляем следующие настройки -windowed чтобы прога запускалась без консоли, название выходного файла, onefile чтобы сборка была в один файл, noupx уже стоит по умолчанию ибо сжатие не всегда прокатывает. Ну и собственно выбираете нужный файл питоновский, который будете упаковывать. Также есть возможность выбрать иконку для exe-шника, поддерживается только ICO.

Вот что получилось
Вот что получилось
Жмём Build, прога чуток поколдует, выдаст нам сообщение об успешной сборке.
Жмём Build, прога чуток поколдует, выдаст нам сообщение об успешной сборке.
После этого в папке с конвертором появятся 2 папки
После этого в папке с конвертором появятся 2 папки

В папке dist и будет лежать наш готовый дистрибутив в формате EXE. Переместите его куда угодно, а потом обе эти папки можно смело удалять. Теперь проверяем работоспособность выходного файла, кликнув на него.

P.S. Редактор писался второпях, там есть косячок - при сохранении файла, расширение само не ставится, нужно вручную писать. Если кто поправит, буду признателен. Мне уже некогда, уезжаю отдыхать на 2 недели сейчас, так что на форуме меня не будет это время.

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

(Источник codeby.net)