October 5, 2018

Пакуем Python в EXE

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

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

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

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

Качаем прогу:

PyinstallerGUI

Распаковываем архив. Внутри папки будет конвертер, запускающийся по клику мышки.

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

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

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, прога чуток поколдует, выдаст нам сообщение об успешной сборке.

После этого в папке с конвертором появятся 2 папки

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

Алиллуйя, работает!

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

Наши услуги: @GOdayBot

Внимание!!! Вся Информация на канале "0-day | Уязвимость 0-го дня" для ознакомления, не несёт в себе призыва к чему-либо, автор не несёт никакой ответственности. 18