Strona główna » Algorytmy » Artykuły » Skrypt Pythona w plik wykonywalny
EXE
 

Skrypt Pythona w plik wykonywalny

Cel

Używając modułu cx_Freeze można przygotować na podstawie skryptu Pythona niezależny plik wykonywalny. Innymi słowy będzie możliwe uruchomienie programu nawet tam, gdzie Python nie jest zainstalowany. Ten artykuł wyjaśnia krok po kroku jak wygenerować plik wykonywalny.

Krok po kroku

Instalacja

Moduł cx_Freeze nie jest standardowym modułem Pythona i trzeba go doinstalować. Dodatkowo infomacje o module znajdziemy na oficjalnej stronie. Otwieramy wiersz poleceń i wpisujemy następującą komendę:

  1. python -m pip install cx_Freeze

Sukcesem jest to, albo komunikat, że udało się zainstalować "Successfully installed", albo, że moduł był wcześniej zainstalowany "Requirement already satisfied". W przypadku braku uprawnień należy pamiętać, że istnieje flaga "--user", która pozwoli zainstalować moduł dla aktualnego użytkownika.

Skrypt

Pierwszy etap polega na napisaniu swojego programu jako skrypt Python. Warto się upewnić, że działa poprawnie. Oto przykładowy skrypt, który tworzy nowe okno używając Tk. W oknie został umieszczony guzik, który po kliknięciu wyświetla komunikat powitalny dla użytkownika.

  1. import tkinter as tk
  2. from tkinter import messagebox
  3. def about():
  4. tk.messagebox.showinfo("Powitanie", "Hej!")
  5. gui = tk.Tk()
  6. gui.title("Przykładowa aplikacja")
  7. gui.geometry("200x100")
  8. gui.iconbitmap("icon.ico")
  9. btn = tk.Button(gui, command=about, text="Kliknij mnie!")
  10. btn.grid(row=0, column=0)
  11. gui.mainloop()

Dodatkowo w tym samym folderze co skrpyt znajduje się ikona nazwana "icon.ico". Chcąc ustawić ją również jako ikonę wygenerowanego pliku wykonywalnego należy pamiętać, że musi to być format "ICO". Większość programów do edycji grafiki pozwala na eskport do tego formatu pliku. Można również skorzystać w tym celu z narzędzi online.

Widok aplikacji

Generowanie

Istnieje możliwość, aby wygenerować plik z poziomu linii poleceń, ale zdecydowanie lepszym pomysłem jest napisanie pliku "build.py" w tym celu. Jego zaletą będzie przejrzystość uruchomienia procesu oraz trwały zapis parametrów generowanie. Chociaż nazwa pliku jest dowolona to słowo "build" jednoznacznie wskazuje jego zastosowanie.

Oto przykładowy plik, który ustala parametry generowania i uruchamia wspomniany proces:

  1. import sys
  2. from cx_Freeze import setup, Executable
  3. build_exe_options = {
  4. "includes": ["tkinter"],
  5. "include_files": ["icon.ico"]
  6. }
  7. base = None
  8. if sys.platform == "win32":
  9. base = "Win32GUI"
  10. setup(
  11. options = {"build_exe": build_exe_options},
  12. executables = [Executable("main.py", base=base, icon="icon.ico")]
  13. )

Z modułu cx_Freeze należy zaimportować setup, który wykona generowanie oraz Executable, który określi parametry pliku wykonywalnego. Następnie określamy, które paczki includes oraz pliki include_files moduł ma uwzględnić. W tym przypadku bez dodania pliku ikony program się wygeneruje, ale wystąpi błąd podczas uruchomienia, ponieważ Tk nie będzie mógł znaleźć ikony, która ma zostać ustawiona w oknie.

Dalej zostaje sprawdzona platforma na której generujemy program. W przypadku systemu operacyjnego Windows cx_Freeze musi dołączyć inne biblioteki. Dalej pozostaje uruchomienie metody setup podając przygotowane wcześniej opcje oraz podając, który plik ma zostać plikiem wykonywalnym - chodzi o element Executable. Podajemy w nim trzy parametry: nazwe pliku oraz platformę. Trzeci argument to ikona. Jest on opcjonalny.

Generowanie pliku

Mając przygotowany skrypt aplikacji oraz do generowanie pliku można przeprowadzić proces budowy. Uruchamiamy z poziomu linii poleceń skrypt build.py w następujący sposób:

  1. python build.py build

Program rozpoczyna proces zbierania plików potrzebnych do uruchomienia wirtualnego środowiska Python oraz przeprowadza proces zamiany skryptu Python w exe. W wyniku działania aplikacji powstaje folder build w którym można znaleźć wygenerowaną aplikację:

Wygenerowane pliki

W folderze lib znajdują się pliki Pythona, a do głównego folderu aplikacji trafiło kilka bibliotek uruchomieniowych *.dll. Brak jakiejkolwiek z nich może skutkować błędem podczas uruchomienia pliku wykonywalnego. Teraz program można uruchomieć wybierając "main.exe". Działa ona dokładnie tak samo jak podczas pisania skryptu, ale można teraz wysłać cały folder do kogoś, aby mógł obejrzeć aplikację. Jeśli aplikacja została soknfigurowana prawidłowo to nie będzie musiał doinstalować żadnych bibliotek Pythona.

Wygenerowana aplikacja

Podsumowanie

Podsumowując cx_Freeze to bardzo przydatny moduł, który pozwala na generowanie samodzielnych plików wykonywalnych. Oficjalna dokumentacja modułu pozwala zapoznać się ze wszystkimi jego opcjami. Przedstawiony w artykule przykład to tylko wstęp do dalszej pracy. Należy pamiętać, że generowane w ten sposób aplikacje zawsze będą "cięższe", ponieważ wymagają środowiska uruchomieniowego Python.