Python je izuzetno popularan programski jezik zbog svoje jednostavnosti, velike biblioteke i široke primene — od web razvoja do naučnih istraživanja i kreiranja desktop aplikacija sa grafičkim korisničkim interfejsom (GUI). Međutim, distribucija Python programa korisnicima koji nemaju instaliran Python interpreter može biti izazov. Rešenje za to su alati koji omogućavaju kreiranje samostalnih izvršnih fajlova (eng. standalone executables), tj. fajlova koji sadrže i Python interpreter i sve zavisnosti potrebne za rad programa.
U ovom članku ćemo se fokusirati na dva najpopularnija alata za ovo:
- PyInstaller
- Nuitka
Oba alata su odličan izbor za kreiranje izvršnih fajlova, uključujući one koji koriste GUI biblioteke kao što su Tkinter, PyQt, PySide, wxPython i druge.
Zašto praviti samostalne izvršne fajlove?
Kada razvijate Python aplikaciju, korisnicima obično morate pružiti:
- Python kod (.py fajlovi)
- Svim zavisnosti (biblioteke, moduli)
- Python interpreter
Međutim, to je komplikovano i nepraktično, naročito ako krajnji korisnik nije programer. Samostalni izvršni fajl rešava ovaj problem time što spakuje sav potreban kod, biblioteke i interpreter u jedan ili nekoliko fajlova. Korisnik tada može pokrenuti program kao bilo koji drugi program, bez dodatne instalacije.
PyInstaller
Šta je PyInstaller?
PyInstaller je popularni alat koji analizira vaš Python program i automatski prikuplja sve zavisnosti i interpreter u jedan izvršni fajl. Radi na Windowsu, Linuxu i macOS-u.
Ključne karakteristike:
- Automatsko pronalaženje zavisnosti — uključujući i GUI biblioteke.
- Podrška za različite platforme.
- Može napraviti jedan veliki
.exe
fajl (tzv. onefile) ili folder sa izvršnim fajlom i zavisnostima. - Podrška za skrivanje konzole (za GUI aplikacije).
- Jednostavna upotreba.
Kako koristiti PyInstaller?
- Instalacija:
pip install pyinstaller
- Kreiranje izvršnog fajla:
Za osnovnu skriptu:
pyinstaller your_script.py
Za GUI aplikaciju bez prikaza konzole:
pyinstaller --onefile --windowed your_gui_script.py
--onefile
pravi jedan.exe
fajl.--windowed
(Windows/macOS) onemogućava prikaz konzole.
- Rezultat se nalazi u
dist/your_script
ilidist/your_script.exe
.
Prednosti PyInstaller-a:
- Jednostavan za korišćenje.
- Dobro podržava GUI biblioteke (Tkinter, PyQt, wxPython).
- Aktivno razvijan i ima veliku zajednicu.
- Mogućnost prilagođavanja pakovanja dodatnim datotekama ili ikonama.
Ograničenja:
- Pakovani fajl može biti velik (jer sadrži Python interpreter).
- Povremeno zahteva ručno podešavanje za neke biblioteke (npr. za specifične dinamičke zavisnosti).
- Kreira izvršni fajl specifičan za platformu — ne može se napraviti Windows
.exe
sa Linux mašine bez dodatnih alata.
Nuitka
Šta je Nuitka?
Nuitka je kompajler za Python koji prevodi Python kod u C/C++ kod, a zatim ga kompajlira u izvršni fajl koristeći standardni C/C++ kompajler (gcc, MSVC…). Rezultat je izvršni fajl koji može biti efikasniji i brži u izvršavanju od običnog Python programa.
Ključne karakteristike:
- Kompajlira Python u nativni kod, što može poboljšati performanse.
- Pakovanje svih zavisnosti u jedan izvršni fajl ili folder.
- Dobro podržava popularne biblioteke, uključujući GUI.
- Može koristiti
--onefile
mod (kroznuitka-standalone
opciju).
Kako koristiti Nuitka?
- Instalacija:
pip install nuitka
- Kompajliranje Python skripte:
nuitka --standalone --onefile your_script.py
--standalone
pravi paket sa svim zavisnostima.--onefile
pakuje u jedan fajl.
Za GUI aplikacije dodajte:
nuitka --standalone --onefile --windows-disable-console your_gui_script.py
(na Windowsu)
- Izvršni fajl će biti kreiran u trenutnom folderu.
Prednosti Nuitka:
- Efikasniji izvršni fajl (brža aplikacija).
- Optimizacije C/C++ kompajlera.
- Može smanjiti veličinu finalnog fajla u odnosu na PyInstaller.
- Radi kao pravi kompajler, a ne samo bundler.
- Dobro radi sa GUI bibliotekama.
Ograničenja:
- Kompajliranje može biti sporije i komplikovanije nego PyInstaller.
- Može biti potrebno da imate instalirane C/C++ kompajlere.
- Manje intuitivan za početnike.
- Povremeno može zahtevati dodatna podešavanja za kompleksne projekte.
Usporedba PyInstaller i Nuitka
Osobina | PyInstaller | Nuitka |
---|---|---|
Princip rada | Bundlovanje Python koda i interpreter | Kompajliranje Python u C/C++ i kompajliranje u izvršni fajl |
Podrška za GUI | Odlična | Odlična |
Performanse | Bez ubrzanja | Brže izvršavanje |
Veličina fajla | Obično veća | Manja u nekim slučajevima |
Jednostavnost upotrebe | Veća | Potrebno znanje o kompajlerima |
Kompajler potreban | Nije potreban | Potreban C/C++ kompajler |
Podrška platformi | Windows, Linux, macOS | Windows, Linux, macOS |
Dokumentacija | Dobra | Dobra, ali tehničkija |
Posebno o GUI bibliotekama
GUI biblioteke često zavise od specifičnih dodataka, dinamičkih biblioteka i resursa, što može otežati pakovanje.
PyInstaller
- Automatski prepoznaje i pakuje Tkinter, PyQt5/PySide2, wxPython i druge.
- Ima ugrađene hooks za ove biblioteke da bi rešio dodatne zavisnosti.
- Može se podesiti da uključi dodatne datoteke (ikonice, resurse).
- Dobro rukuje sa statičkim i dinamičkim bibliotekama.
Nuitka
- Takođe podržava GUI biblioteke.
- Može zahtevati ručno uključivanje resursa i dodatnih biblioteka.
- Prednost je što može dati brži izvršni fajl za GUI aplikacije.
Zaključak
Ako želite brzo i jednostavno da napravite samostalni izvršni fajl za Python program, naročito ako koristite GUI biblioteke, PyInstaller je najčešći i pouzdan izbor. Njegova jednostavnost i velika zajednica čine ga prvim izborom za većinu programera.
Ako vam je, osim pakovanja, bitna i brzina izvršavanja i spremni ste da uložite dodatno vreme u podešavanje i instalaciju kompajlera, tada je Nuitka odličan izbor jer može značajno ubrzati program i smanjiti veličinu finalnog fajla.