Cursus
In dit artikel neem ik je mee langs een paar scenario’s waarin het zinvol is om je Python-bestand om te zetten naar een uitvoerbaar bestand. Ook laat ik zien hoe je een Python-bestand omzet naar een .exe met drie Python-bibliotheken: PyInstaller, Nuitka en auto-py-to-exe.
Kloon deze Github-repository om mee te doen met deze tutorial.
Waarom Python naar .exe converteren?
Uitvoerbare bestanden – bestanden met de extensie .exe – worden gebruikt om softwaretoepassingen te installeren of uit te voeren op computers met het Windows-besturingssysteem. Het bestand dat een Windows-computer in staat stelt een toepassing uit te voeren, is het .exe-bestand.
Er zijn verschillende redenen om een Python-programma om te zetten naar een uitvoerbaar bestand. Laten we er een paar bekijken:
Kwadadige activiteiten
Helaas zijn er mensen op internet die kwaadaardige software verspreiden om apparaten te infecteren en informatie te stelen. Een manier om dat te counteren is niet in hun val te trappen – download of open dus niet zomaar .exe-bestanden die niet van een betrouwbare bron komen.
Toegankelijkheid
Een andere reden om een Python-bestand naar een uitvoerbaar bestand te converteren, is om een applicatie met andere gebruikers te delen. Een typisch Python-programma kan uit meerdere dependencies bestaan die een andere gebruiker eerst moet installeren voordat het programma kan draaien. Wat als die persoon niet kan programmeren? In zulke gevallen is het onredelijk om te verwachten dat iemand eerst leert programmeren. Door een Python-bestand om te zetten naar een uitvoerbaar bestand kunnen gebruikers je programma gebruiken zonder Python te kennen.
Broncode beschermen
Maar zelfs als ze wel kunnen programmeren, kan het omzetten van een Python-bestand naar een uitvoerbaar bestand een goede manier zijn om te voorkomen dat je code wordt gestolen. Een uitvoerbaar bestand beschermt de code doordat het een gecompileerde versie van je broncode maakt, wat lastiger te begrijpen is dan de originele broncode.
Taakplanning
Je kunt ook een taak op je computer inplannen om een .exe-bestand op een specifiek tijdstip uit te voeren.
Hoe zet je een Python-script om naar een .exe-bestand
Nu je weet wat .exe-bestanden zijn en waarom je een Python-bestand naar een .exe-bestand zou willen converteren, bekijken we hoe je dat in Python doet. In deze sectie behandelen we drie frameworks: pyinstaller, nuitka en auto-py-to-exe.
Houd er rekening mee dat auto-py-to-exe bekende compatibiliteitsproblemen heeft met Python 3.11 en hoger, en over het algemeen alleen betrouwbaar is tot en met Python 3.10, tenzij je specifieke nieuwere versies en zorgvuldig op elkaar afgestemde dependencies gebruikt.
Dat gezegd hebbende: aan de slag.
Het script voorbereiden
In deze demo gebruiken we de dataset New York City Airbnb open data.
Voordat data scientists een dataset kunnen analyseren, moet de data worden geformatteerd zodat die compatibel is met de tools die ze gebruiken. Door een validatieschema te maken, definieer je declaratief alle validaties die op elk veld van toepassing zijn. Dit proces kan behoorlijk repetitief zijn. Om te voorkomen dat onze data scientists repetitieve taken uitvoeren, hebben we een geautomatiseerd validatiescript gemaakt dat periodiek draait.
Let op: wees extra voorzichtig met relatieve paden als je script data moet inlezen. Je kunt beter absolute paden gebruiken om ervoor te zorgen dat je uitvoerbare bestand werkt zoals verwacht.
import pandas as pd
from pandas.api.types import CategoricalDtype
def perform_validation(filename:str):
"""
A function to validate inputs for NYC Airbnb Open data.
"""
path_to_data = "../.."
data = pd.read_csv(f"{path_to_data}{filename}")
# Convert neighbourhood_group to type category
neighbourhood_group_to_cat = CategoricalDtype(
categories=["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island"],
ordered=False
)
data["neighbourhood_group"] = data["neighbourhood_group"].astype(neighbourhood_group_to_cat)
# Convert room_type to type category
room_type_to_cat = CategoricalDtype(
categories=["Entire home/apt", "Private room", "Shared room"],
ordered=False
)
data["room_type"] = data["room_type"].astype(room_type_to_cat)
# Convert last_review to datetime
data["last_review"] = pd.to_datetime(data["last_review"])
# Minimum nights a person can stay is one night
assert data["minimum_nights"].min() >= 1
# Minimum number of reviews is 0
assert data["number_of_reviews"].min() >= 0
# Minimum number of reviews per month
assert data["reviews_per_month"].min() >= 0.00
# Minimum amount of listings per host
assert data["calculated_host_listings_count"].min() >= 1
# Number of days when listing is available for books
# Could be 0 if tennant has long term booking
assert data["availability_365"].min() >= 0
# Save validated data
data.to_csv("validated_ab_nyc_2019.csv", index=False)
if __name__ == "__main__":
# User inputs filename
filename = input("Enter filename: ")
# Ensure it's a string
if not filename.isalpha():
filename = str(filename)
# Automated validation
perform_validation(filename)
Let op: we hebben dit script gekopieerd en geplakt in de mappen pyinstaller, nuitka en auto-py-to-exe.
# Directory structure
| AB_NYC_2019.csv
|
+---auto_py_to_exe
| | requirements.txt
| | validation.py
+---pyinstaller
| requirements.txt
| validation.py
Elke map heeft zijn eigen virtuele omgeving waarin we de vereisten hebben geïnstalleerd: zie pyinstaller-vereisten of auto-py-to-exe-vereisten. Als je met de code meedoet, maak dan een virtuele omgeving aan in zowel de pyinstaller-map als de auto-py-to-exe-map.
Op hoofdlijnen bevat het bovenstaande script een functie – leer meer over functies schrijven in Python – die een dataset inleest en vervolgens het verwachte formaat van specifieke velden definieert. De volgende stap is dit Python-script om te zetten naar een uitvoerbaar bestand dat periodiek kan worden uitgevoerd om een geformatteerde dataset te genereren.
Methode 1: PyInstaller
Met PyInstaller kun je snel een Python-bestand naar een uitvoerbaar bestand omzetten via je terminal. Als je je virtuele omgeving hebt gemaakt en de vereisten voor je script hebt geïnstalleerd (inclusief pyinstaller), open dan de terminal en navigeer naar de map waarin het Python-bestand staat dat je wilt converteren.
Voer vervolgens de volgende opdracht uit:
pyinstaller --onefile validation.py
In eerste instantie zie je een aantal logs, waarvan de laatste iets zal melden als “completed successfully” – mits het uitvoerbare bestand succesvol is aangemaakt.

Figuur 1: Logs die laten zien dat het uitvoerbare bestand wordt aangemaakt en succesvol is voltooid.
Na afloop worden er twee nieuwe mappen aangemaakt, build en dist, in dezelfde map als waar het Python-bestand staat. In de dist-map vind je het script validation.exe.

Figuur 2: Een GIF die het uitvoeren van validation.exe op een dataset demonstreert.
Om het script uit te voeren, dubbelklik je erop. Er verschijnt een console waarin je wordt gevraagd de bestandsnaam in te voeren van de data waarop je de validatie wilt draaien. Zodra je de bestandsnaam invoert, sluit de console en wordt de gevalideerde data in dezelfde map aangemaakt als het validation.exe-bestand – zie Figuur 2.
Methode 2: Nuitka
Nuitka is een andere aanpak die het overwegen waard is. In tegenstelling tot PyInstaller, dat je Python-script bundelt met de Python-interpreter, compileert Nuitka je Python-code daadwerkelijk naar C-code. Dat levert betere bescherming van je broncode op, mogelijk snellere uitvoering en vaak kleinere bestanden. De keerzijde is een langere compilatietijd en meer setup-complexiteit.
Installatie en setup
Nadat je een virtuele omgeving hebt gemaakt en Nuitka hebt geïnstalleerd met pip install nuitka, moet er een C-compiler op je systeem beschikbaar zijn. Welke compiler je nodig hebt, hangt af van je besturingssysteem:
-
Windows: Download en installeer Microsoft Visual C++ Build Tools (gratis) via de website van Visual Studio, of gebruik MinGW
-
macOS: Installeer Xcode Command Line Tools met
xcode-select --install -
Linux: GCC is meestal al geïnstalleerd; zo niet, installeer het via je pakketbeheerder
Na installatie detecteert Nuitka automatisch je compiler. Krijg je problemen, zorg dan dat de compiler in je systeem-PATH staat.
Het validatiescript converteren met Nuitka
Laten we hetzelfde NYC Airbnb-validatiescript converteren met Nuitka, net zoals we deden met PyInstaller en auto-py-to-exe. Om ons script naar een uitvoerbaar bestand te compileren, voer je uit:
python -m nuitka --onefile --follow-imports --include-package=pandas validation.py
De betekenis van elke vlag:
-
--onefile: Maakt één enkel uitvoerbaar bestand (in plaats van een map met meerdere bestanden en dependencies) -
--follow-imports: Neemt automatisch alle modules op die je script importeert -
--include-package=pandas: Neemt expliciet het pandas-pakket op (sommige pakketten worden niet automatisch gedetecteerd; dit zorgt dat het wordt meegebundeld)
In tegenstelling tot PyInstaller, dat in ongeveer 30 seconden klaar is, duurt Nuitka aanzienlijk langer — meestal 5–15 minuten, afhankelijk van de complexiteit van je code en de snelheid van je systeem. In de terminal zie je compilatie-output die de voortgang in de C-compilatiestap laat zien.
Na voltooiing zie je een succesmelding dat het uitvoerbare bestand is gemaakt. Het gecompileerde uitvoerbare bestand wordt in dezelfde map aangemaakt als het bestand validation.py.
Dubbelklik op validation.exe of voer het uit via de command line. Er opent een consolevenster waarin je, net als bij PyInstaller, een bestandsnaam moet invoeren. Na het typen van AB_NYC_2019.csven enter drukken, draait de validatie, sluit de console en wordt er een nieuw bestand validated_ab_nyc_2019.csv aangemaakt in dezelfde map, precies zoals bij de PyInstaller-versie.
Methode 3: auto-py-to-exe
De eerste stap om met auto-py-to-exe een uitvoerbaar bestand te maken, is het starten met de volgende opdracht:
auto-py-to-exe
Dit zou een grafische gebruikersinterface (GUI) moeten openen die helpt om je Python-bestand naar een uitvoerbaar bestand te converteren.

Figuur 3: De grafische gebruikersinterface die verschijnt na het uitvoeren van het auto-py-to-exe-commando.
Let op: werkt het niet, zorg dan dat je een virtuele omgeving hebt aangemaakt in de map auto-py-to-exe en de requirements.txt in je virtuele omgeving hebt geïnstalleerd met: pip install -r requirements.txt.
De GUI heeft verschillende velden die we moeten invullen. Laten we ze een voor een doornemen:
- Specifieke locatie: in dit veld geef je de scriptlocatie op van het Python-bestand dat je naar een uitvoerbaar bestand wilt omzetten.
- Onefile: hier kies je of je een enkele map of één bestand wilt maken. Een enkele map bevat alle dependencies die nodig zijn om je script uit te voeren plus een uitvoerbaar bestand, terwijl “One File” één enkel uitvoerbaar bestand aanmaakt.
- Consolevenster: de keuze tussen “Console Based” of “Window Based” hangt af van wat je script teruggeeft. In ons voorbeeld moet de gebruiker een bestandsnaam invoeren. Daarom is “Console Based” aan te raden, omdat dit de console opent na het starten van het uitvoerbare bestand. Als er geen console-uitvoer getoond hoeft te worden, is “Window Based” een goede optie.
Er zijn ook andere opties om de creatie van ons uitvoerbare bestand te configureren (bijv. iconen toevoegen, extra bestanden en meer). In deze sectie kunnen we ook het pad aanpassen waar we de door ons uitvoerbare bestand gegenereerde bestanden willen wegschrijven: kies hiervoor de “Settings”-schakelaar en blader naar de uitvoermap van jouw keuze. De laatste stap is “Convert .py to .exe” selecteren om ons Python-bestand te converteren.
Bekijk de GIF in Figuur 4 om te zien hoe we ons uitvoerbare bestand hebben geconfigureerd.

Figuur 4: Een GIF die de configuratie voor auto-py-to-exe laat zien
Als we teruggaan naar de auto-py-to-exe-map, staat daar een map met de naam output: daar staat ons validation.exe-bestand. Selecteer het bestand om het uit te voeren; er verschijnt een console die je vraagt een bestandsnaam in te voeren:

Figuur 5: Console die verschijnt na het uitvoeren van het uitvoerbare validatiebestand.
Voer simpelweg de bestandsnaam in – in dit voorbeeld AB_NYC_2019.csv – en druk op enter. De console sluit en er wordt een nieuw bestand aangemaakt in de output-map (waar het uitvoerbare bestand staat) met de naam validated_ab_nyc_2019.csv.
PyInstaller vs Nuitka
Zo verhouden Nuitka en PyInstaller zich op hetzelfde validatiescript, met auto-py-to-exe als GUI-alternatief:
|
Metric |
PyInstaller |
auto-py-to-exe |
Nuitka |
|
Grootte uitvoerbaar bestand |
gemiddeld |
gemiddeld |
20-30% kleiner |
|
Bouwtijd |
gemiddeld |
gemiddeld |
16x langer |
|
Opstarttijd |
~2 seconden |
~2 seconden |
~1 seconde |
|
Runtime (validatietaak) |
~3 seconden |
~3 seconden |
~2,5 seconden |
|
Bescherming van broncode |
gemiddeld |
gemiddeld |
uitstekend |
|
Python 3.8–3.10 |
✅ uitstekend |
✅ uitstekend |
✅ uitstekend |
|
Python 3.11+ |
✅ uitstekend |
⚠️ bekende issues |
✅ uitstekend |
PyInstaller en Nuitka bieden allebei betrouwbare ondersteuning voor alle moderne Python-versies, terwijl auto-py-to-exe bekende compatibiliteitsproblemen heeft met Python 3.11 en hoger. Nuitka levert kleinere, snellere uitvoerbare bestanden met superieure IP-bescherming — maar het buildproces is ruwweg 16 keer trager dan PyInstaller.
Conclusie
In dit artikel heb je geleerd:
- Wat een Python-bestand is
- Wat een uitvoerbaar bestand is en waarom dat handig kan zijn
- Hoe je een Python-script omzet naar een uitvoerbaar bestand met pyinstaller, een prima tool als je je prettig voelt met de command line.
- Hoe je een Python-script omzet naar een uitvoerbaar bestand met auto-py-to-exe, dat een grafische interface (GUI) biedt om te bepalen hoe het uitvoerbare bestand moet worden gemaakt.
Leer meer over hoe je Python kunt inzetten voor data science in DataCamps Associate Data Scientist with Python career track.
FAQs
Kan ik extra bestanden (bijv. afbeeldingen, configuratiebestanden) opnemen in het uitvoerbare bestand?
Ja, alle drie de tools laten je extra bestanden bundelen die je script nodig heeft. Voor PyInstaller en Nuitka kun je de optie --add-data gebruiken om bestanden op te geven die je wilt opnemen. In auto-py-to-exe is er in de GUI een optie onder "Additional Files" om bestanden toe te voegen. Zorg dat je relatieve of absolute paden correct opgeeft zodat het uitvoerbare bestand toegang heeft tot deze bestanden.
Hoe voeg ik een aangepast pictogram toe aan het uitvoerbare bestand?
Je kunt een aangepast pictogram aan je uitvoerbare bestand toevoegen door een .ico-bestand op te geven. Voor PyInstaller gebruik je de vlag --icon gevolgd door het pad naar je .ico-bestand. In auto-py-to-exe kun je in het "Icon"-veld binnen de GUI het pictogrampad instellen. Nuitka ondersteunt ook de vlag --windows-icon-from-ico. Let op: het pictogrambestand moet de .ico-indeling hebben.
Waarom is mijn uitvoerbare bestand zo groot en hoe kan ik het kleiner maken?
Uitvoerbare bestanden kunnen alle dependencies, libraries en de Python-interpreter bevatten, waardoor ze groot kunnen worden. Om de grootte te verkleinen:
- Gebruik de optie
--onefilein PyInstaller of Nuitka om alles in één bestand te bundelen. - Sluit onnodige libraries uit met de optie
--exclude-modulein PyInstaller of Nuitka. - Overweeg tools als UPX om het uiteindelijke uitvoerbare bestand te comprimeren (werkt met PyInstaller en auto-py-to-exe).
- Overweeg Nuitka te gebruiken, dat doorgaans 20–30% kleinere uitvoerbare bestanden oplevert dan PyInstaller.
Kan ik een uitvoerbaar bestand voor een ander besturingssysteem maken?
PyInstaller, auto-py-to-exe en Nuitka zijn allemaal platformspecifiek. Om een uitvoerbaar bestand voor een ander besturingssysteem te maken, heb je cross-compilatie-tools nodig of richt je een virtuele machine of container in voor het doelsysteem. Zo kun je op Linux een Windows-uitvoerbaar bestand maken met Wine of Docker met een Windows-omgeving.
Wat zijn de alternatieven voor pyinstaller en auto-py-to-exe?
Andere tools om uitvoerbare bestanden te maken zijn onder meer:
- cx_Freeze: Een cross-platform tool om uitvoerbare bestanden te maken.
- py2exe: Een Windows-specifieke tool om uitvoerbare bestanden te maken van Python-scripts.

