Kurs
Bu yazıda, Python dosyanızı yürütülebilir bir dosyaya dönüştürmeyi gerekçelendiren bazı senaryoları ele alacağım. Ayrıca üç Python kütüphanesi kullanarak bir Python dosyasını yürütülebilir dosyaya nasıl dönüştüreceğinizi göstereceğim: Pyinstaller, Nuitka ve auto-py-to-exe.
Bu öğreticiyi takip etmek için Github deposunu klonlayın.
Neden Python’u .exe’ye Dönüştürelim?
Yürütülebilir dosyalar – .exe uzantısıyla kaydedilen dosyalar – Windows işletim sistemi olan bilgisayarlarda yazılım uygulamalarını yüklemek veya çalıştırmak için kullanılır. Bir Windows bilgisayarın bir uygulamayı çalıştırmasını sağlayan dosya .exe dosyasıdır.
Bir Python programını yürütülebilir bir dosyaya dönüştürmek istemenizin birkaç nedeni olabilir. Birkaçına bakalım:
Kötü amaçlı faaliyetler
Ne yazık ki internette bazı kişiler, başkalarının cihazlarını enfekte etmek ve bilgilerini çalmak için kötü amaçlı yazılım yaymayı sever. Bu kişilere karşı koymanın bir yolu, onların tuzaklarına düşmemektir – yani güvenilir bir kaynaktan gelmeyen .exe dosyalarını körü körüne indirmemek veya açmamak gerekir.
Erişilebilirlik
Bir Python dosyasını yürütülebilir dosyaya dönüştürmek istemenizin bir başka nedeni de bir uygulamayı diğer kullanıcılarla paylaşmaktır. Tipik bir Python programı, programın çalışabilmesi için başka bir kullanıcının yüklemesi gereken çeşitli bağımlılıklardan oluşabilir. Peki ya kişi kod yazmayı bilmiyorsa? Bu gibi durumlarda, bir uygulamayı kullanmadan önce kullanıcının kod yazmayı öğrenmesini beklemek makul olmayabilir. Bir Python dosyasını yürütülebilir dosyaya dönüştürmek, kullanıcıların Python bilmeden programınıza erişmesini sağlar.
Kaynak kodunu koruma
Kod yazmayı biliyor olsalar bile, Python dosyasını yürütülebilir dosyaya dönüştürmek, kodunuzun çalınmasını önlemek için iyi bir seçenek olabilir. Yürütülebilir bir dosya, kaynak kodunuzun derlenmiş bir sürümünü oluşturduğu için kodun çalınmasını zorlaştırır; bu sürüm, asıl kaynak koda kıyasla anlaşılması daha güçtür.
İş zamanlama
Bilgisayarınızda belirli bir zamanda bir .exe dosyasını çalıştıracak bir işi zamanlamak da isteyebilirsiniz.
Bir Python Komut Dosyası .exe Dosyasına Nasıl Dönüştürülür
Artık .exe dosyalarının ne olduğunu ve neden bir Python dosyasını .exe dosyasına dönüştürmek isteyebileceğinizi bildiğinize göre, bunu Python’da nasıl yapacağımıza bakalım. Bu bölümde üç çerçeveyi ele alacağız: pyinstaller, nuitka ve auto-py-to-exe.
Aklınızda bulundurmanız gereken bir nokta, auto-py-to-exe araçının Python 3.11 ve sonrasında bilinen uyumluluk sorunlarına sahip olduğudur; genellikle yalnızca Python 3.10’a kadar güvenilirdir; bunun için de belirli yeni sürümler ve dikkatle eşleştirilmiş bağımlılıklar gerekir.
Öyleyse başlayalım.
Betik hazırlığı
Bu demonstrasyonda New York City Airbnb açık verileri veri kümesi kullanılacaktır.
Veri bilimciler bir veri kümesini analiz edebilmeden önce, verilerin kullandıkları araçlarla uyumlu olacak şekilde biçimlendirilmesi gerekir. Bu nedenle doğrulama şeması oluşturmak, her alan için geçerli tüm doğrulamaları deklaratif olarak tanımlar. Bu süreç oldukça tekrarlı olabilir. Veri bilimcilerimizin tekrarlı işlerle uğraşmasını önlemek için periyodik olarak çalışan otomatik bir doğrulama betiği oluşturduk.
Not: Betiğinizin veri okuması gerekiyorsa göreli yolları kullanırken son derece dikkatli olun. Yürütülebilir dosyanızın beklenildiği gibi çalıştığından emin olmak için mutlak yolları kullanmak daha iyidir.
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)
Not: Bu betiği pyinstaller, nuitka ve auto-py-to-exe dizinlerine kopyalayıp yapıştırdık.
# Directory structure
| AB_NYC_2019.csv
|
+---auto_py_to_exe
| | requirements.txt
| | validation.py
+---pyinstaller
| requirements.txt
| validation.py
Her dizinin, gereksinimlerin kurulduğu kendine ait bir sanal ortamı vardır: bkz. pyinstaller gereksinimleri veya auto-py-to-exe gereksinimleri. Kodu adım adım takip ediyorsanız, pyinstaller ve auto-py-to-exe dizinlerinde birer sanal ortam oluşturduğunuzdan emin olun.
Yüksek seviyede, yukarıdaki betik bir fonksiyon içerir – Python’da fonksiyon yazma hakkında daha fazla bilgi edinin – bu fonksiyon bir veri kümesini okur ve ardından verideki belirli alanların beklenen biçimini tanımlar. Bir sonraki adım, bu Python betiğini düzenli olarak çalıştırılabilecek ve biçimlendirilmiş bir veri kümesi üretebilecek bir yürütülebilir dosyaya dönüştürmektir.
Yöntem 1: Pyinstaller
Pyinstaller, bir Python dosyasını terminalinizden hızlıca yürütülebilir dosyaya dönüştürmenizi sağlar. Sanal ortamınızı oluşturup betiğinizin gereksinimlerini (pyinstaller dahil) kurduktan sonra, terminali açıp dönüştürmek istediğiniz Python dosyasının bulunduğu dizine gidin.
Bir sonraki adım, aşağıdaki komutu çalıştırmaktır:
pyinstaller --onefile validation.py
Öncelikle bir dizi günlük görüntülenecek; sonuncusunda “başarıyla tamamlandı” benzeri bir ifade göreceksiniz – yürütülebilir dosya başarıyla oluşturulduysa.

Şekil 1: Yürütülebilir dosyanın oluşturulduğunu ve başarılı şekilde tamamlandığını gösteren günlükler.
Bu çalıştırmanın tamamlanması, Python dosyasının bulunduğu dizinde build ve dist adlı iki yeni dizin oluşturacaktır. dist dizininde validation.exe betiğini bulacaksınız.

Şekil 2: validation.exe’nin bir veri kümesi üzerinde çalıştırılmasını gösteren bir GIF.
Betik çalıştırmak için dosyaya çift tıklamanız yeterlidir. Bu, doğrulamayı çalıştırmak istediğiniz verinin dosya adını girmenizi isteyen bir konsol açacaktır. Dosya adını girdikten sonra konsol kapanacak ve doğrulanmış veri, validation.exe dosyasıyla aynı dizinde oluşturulacaktır – bkz. Şekil 2.
Yöntem 2: Nuitka
Nuitka dikkate değer bir başka yaklaşımdır. Python betiğinizi Python yorumlayıcısı ile paketleyen PyInstaller’ın aksine, Nuitka Python kodunuzu C koduna derler. Bunun sonucunda daha iyi kaynak kod koruması, potansiyel olarak daha hızlı çalıştırma ve genellikle daha küçük dosya boyutları elde edilir. Dezavantajı, daha uzun derleme süresi ve daha fazla kurulum karmaşıklığıdır.
Kurulum ve Ayar
Bir sanal ortam oluşturup pip install nuitka ile Nuitka’yı kurduktan sonra, sisteminizde bir C derleyicisinin mevcut olduğundan emin olmalısınız. Hangi derleyiciye ihtiyaç duyduğunuz, işletim sisteminize bağlıdır:
-
Windows: Visual Studio web sitesinden Microsoft Visual C++ Build Tools’u (ücretsiz) indirin ve kurun veya MinGW kullanın
-
macOS:
xcode-select --installile Xcode Komut Satırı Araçlarını kurun -
Linux: GCC genellikle önceden kurulu gelir; değilse paket yöneticinizle kurun
Kurulumdan sonra Nuitka derleyicinizi otomatik olarak algılar. Sorun yaşarsanız derleyicinin sistem PATH içinde olduğundan emin olun.
Doğrulama Betiğini Nuitka ile Dönüştürme
Aynı NYC Airbnb doğrulama betiğini, PyInstaller ve auto-py-to-exe’de yaptığımız gibi Nuitka ile derleyelim. Betiğimizi yürütülebilir dosyaya derlemek için şunu çalıştırın:
python -m nuitka --onefile --follow-imports --include-package=pandas validation.py
Her bayrağın ne yaptığına bakalım:
-
--onefile: Tek bir yürütülebilir dosya oluşturur (çok sayıda dosya ve bağımlılıktan oluşan bir dizin yerine) -
--follow-imports: Betiklerinizin içe aktardığı tüm modülleri otomatik olarak dahil eder -
--include-package=pandas: pandas paketini açıkça dahil eder (bazı paketler otomatik olarak algılanmayabilir; bu, paketlendiğinden emin olur)
PyInstaller yaklaşık 30 saniyede tamamlanırken, Nuitka belirgin ölçüde daha uzun sürecektir — genellikle kod karmaşıklığına ve sistem hızına bağlı olarak 5–15 dakika. Terminalde C derleme aşamasındaki ilerlemeyi gösteren çıktılar görürsünüz.
Tamamlandığında, yürütülebilir dosyanın oluşturulduğunu belirten bir başarı iletisi görürsünüz. Derlenen yürütülebilir dosya, validation.py dosyasıyla aynı dizinde oluşturulur.
validation.exe dosyasına çift tıklayın veya komut satırından çalıştırın. PyInstaller’da olduğu gibi, bir konsol penceresi açılarak sizden bir dosya adı girmeniz istenir. AB_NYC_2019.csv yazıp enter’a bastığınızda doğrulama çalışır, konsol kapanır ve yeni validated_ab_nyc_2019.csv dosyası aynı dizinde oluşturulur; tıpkı PyInstaller sürümünde olduğu gibi.
Yöntem 3: auto-py-to-exe
auto-py-to-exe kullanarak yürütülebilir bir dosya oluşturmanın ilk adımı, aşağıdaki komutla aracı çalıştırmaktır:
auto-py-to-exe
Bu, Python dosyamızı yürütülebilir dosyaya dönüştürmemize yardımcı olacak bir grafik kullanıcı arayüzü (GUI) döndürmelidir.

Şekil 3: auto-py-to-exe komutu çalıştırıldıktan sonra döndürülen grafik kullanıcı arayüzü.
Not: Çalışmıyorsa, auto-py-to-exe dizininde bir sanal ortam oluşturduğunuzdan ve sanal ortamınıza şu komutla requirements.txt’yi kurduğunuzdan emin olun: pip install -r requirements.txt.
GUI’de doldurmamız gereken birkaç alan vardır. Her birine bakalım ve özetleyelim:
- Belirli Konum: Bu alanda, yürütülebilir dosyaya dönüştürmek istediğiniz Python dosyasının betik konumunu eklemelisiniz.
- Tek Dosya: Burada tek bir dizin mi yoksa dosya mı oluşturmak istediğinizi seçersiniz. Tek bir dizin, betiğinizin çalıştırılması için gereken tüm bağımlılıkları ve bir yürütülebilir dosyayı içerirken, “Tek Dosya”yı seçmek tek bir yürütülebilir dosya oluşturur.
- Konsol Penceresi: “Konsol Tabanlı” ya da “Pencere Tabanlı” seçimleri, betiğinizin ne döndürdüğüne bağlıdır. Örneğin, yukarıda oluşturduğumuz betik kullanıcıdan bir dosya adı girmesini istemektedir. Bu nedenle, yürütülebilir dosya çalıştırıldıktan sonra konsolun açılacağı “Konsol Tabanlı” çözüm önerilir. Yürütülebilir dosya çalıştırıldıktan sonra konsol çıktılarını göstermek gerekmiyorsa “Pencere Tabanlı” iyi bir seçenektir.
Ayrıca yürütülebilir dosyamızın oluşturulmasını yapılandırmak için (örn. simge ekleme, ek dosyalar ve daha fazlası) başka seçenekler de sunulur. Bu bölümde, yürütülebilir dosyamızın oluşturduğu dosyaları nereye aktarmak istediğimizin yolunu da değiştirebiliriz: Bunu yapmak için “Ayarlar” seçeneğini açın ve istediğiniz çıktı dizinine göz atın. Son adım, Python dosyamızı dönüştürmek için “.py’ı .exe’ye dönüştür” seçeneğini tıklamaktır.
Yürütülebilir dosyamızı nasıl yapılandırdığımızı görmek için Şekil 4’teki GIF’e bakın.

Şekil 4: auto-py-to-exe yapılandırmasını gösteren GIF
auto-py-to-exe dizinine geri döndüğümüzde output adlı bir dizin göreceğiz: validation.exe dosyamız burada yer alır. Dosyayı seçip çalıştırın; sizden bir dosya adı girmenizi isteyen bir konsol açılacaktır:

Şekil 5: Yürütülebilir doğrulama dosyası çalıştırıldığında döndürülen konsol.
Dosya adını – bu örnekte AB_NYC_2019.csv – girip enter’a basmanız yeterlidir. Konsol kapanacak ve output dizininde (yürütülebilir dosyanın bulunduğu yerde) validated_ab_nyc_2019.csv adlı yeni bir dosya oluşturulacaktır.
PyInstaller ve Nuitka Karşılaştırması
İşte aynı doğrulama betiğinde Nuitka ve PyInstaller’ın karşılaştırması; GUI alternatifi olarak auto-py-to-exe ile birlikte:
|
Ölçüt |
PyInstaller |
auto-py-to-exe |
Nuitka |
|
Yürütülebilir boyutu |
ortalama |
ortalama |
%20–30 daha küçük |
|
Derleme süresi |
ortalama |
ortalama |
16x daha uzun |
|
Başlama süresi |
~2 saniye |
~2 saniye |
~1 saniye |
|
Çalışma süresi (doğrulama görevi) |
~3 saniye |
~3 saniye |
~2,5 saniye |
|
Kaynak kod koruması |
Orta |
Orta |
Mükemmel |
|
Python 3.8–3.10 |
✅ Mükemmel |
✅ Mükemmel |
✅ Mükemmel |
|
Python 3.11+ |
✅ Mükemmel |
⚠️ Bilinen sorunlar |
✅ Mükemmel |
PyInstaller ve Nuitka, modern Python sürümlerinin tümünde güvenilir destek sunarken, auto-py-to-exe’nin Python 3.11 ve sonrası için bilinen uyumluluk sorunları vardır. Nuitka, daha küçük ve daha hızlı yürütülebilir dosyalar üretir ve fikri mülkiyeti daha iyi korur — ancak derleme süreci PyInstaller’dan yaklaşık 16 kat daha yavaştır.
Sonuç
Bu yazıda şunları öğrendiniz:
- Python dosyasının ne olduğu
- Yürütülebilir dosyanın ne olduğu ve neden yararlı olabileceği
- Komut satırı işlemlerinde kendini daha rahat hissedenler için harika bir araç olan pyinstaller kullanarak bir Python komut dosyasını yürütülebilir dosyaya nasıl dönüştüreceğiniz.
- Yürütülebilir dosyanın nasıl oluşturulacağını yapılandırmak için bir grafik kullanıcı arayüzü (GUI) sunan auto-py-to-exe kullanarak bir Python komut dosyasını yürütülebilir dosyaya nasıl dönüştüreceğiniz.
Python’u veri bilimi için nasıl kullanabileceğiniz hakkında daha fazla bilgi edinmek için DataCamp’in Python ile Yardımcı Veri Bilimci kariyer yoluna göz atın.
SSS
Yürütülebilir dosyaya ek dosyalar (ör. görseller, yapılandırma dosyaları) dahil edebilir miyim?
Evet, üç aracın da betiğinizin ihtiyaç duyduğu ek dosyaları paketlemenize izin verir. PyInstaller ve Nuitka için --add-data seçeneğini kullanarak dahil edilecek dosyaları belirtebilirsiniz. auto-py-to-exe’de ise GUI’de "Additional Files" altında dosya ekleme seçeneği vardır. Yürütülebilir dosyanın bu dosyalara erişebilmesi için göreli veya mutlak yolları doğru belirttiğinizden emin olun.
Yürütülebilir dosyaya özel bir simgeyi nasıl eklerim?
Özel bir simgeyi .ico dosyası belirterek ekleyebilirsiniz. PyInstaller için --icon bayrağını .ico dosyanızın yoluyla birlikte kullanın. auto-py-to-exe’de GUI içindeki "Icon" alanında simge yolunu ayarlayabilirsiniz. Nuitka da --windows-icon-from-ico bayrağını destekler. Simge dosyasının .ico biçiminde olması gerektiğini unutmayın.
Yürütülebilir dosyam neden bu kadar büyük ve boyutunu nasıl küçültebilirim?
Yürütülebilir dosyalar tüm bağımlılıkları, kütüphaneleri ve Python yorumlayıcısını içerebilir; bu da büyük boyutlara yol açabilir. Boyutu azaltmak için:
- PyInstaller veya Nuitka’da her şeyi tek bir dosyada paketlemek için
--onefileseçeneğini kullanın. - Gereksiz kütüphaneleri PyInstaller veya Nuitka’da
--exclude-moduleseçeneğiyle hariç tutun. - Ortaya çıkan yürütülebilir dosyayı sıkıştırmak için UPX gibi araçları kullanmayı düşünün (PyInstaller ve auto-py-to-exe ile çalışır).
- Genellikle PyInstaller’dan %20–30 daha küçük yürütülebilirler üreten Nuitka’yı kullanmayı düşünün.
Farklı bir işletim sistemi için yürütülebilir dosya oluşturabilir miyim?
PyInstaller, auto-py-to-exe ve Nuitka’nın tümü platforma özeldir. Farklı bir işletim sistemi için yürütülebilir oluşturmak üzere çapraz derleme araçları kullanmanız veya hedef işletim sistemi için bir sanal makine ya da konteyner kurmanız gerekir. Örneğin, Linux üzerinde Windows yürütülebiliri oluşturmak için Wine veya Windows ortamlı bir Docker kullanabilirsiniz.
pyinstaller ve auto-py-to-exe’ye alternatifler nelerdir?
Yürütülebilir oluşturmak için diğer araçlar şunlardır:
- cx_Freeze: Platformlar arası yürütülebilir oluşturma aracı.
- py2exe: Python betiklerinden yürütülebilir dosyalar oluşturmaya yönelik Windows’a özel bir araç.
