Logo
pyinstaller --onefile dist/ .exe --windowed .spec --icon dağıt
İleri Programlama · Hafta 11

"Bende Çalışıyor" Yetmez:
Paketle & Dağıt

Uygulama Dağıtımı — PySide6'dan Tek Çalıştırılabilir Dosyaya

▌$ pyinstaller --onefile --windowed main.py  # kodu gerçek bir programa çevir
Bu Hafta

Uygulamayı Teslim Edilebilir Yap

Dönem boyunca bir PySide6 uygulaması yazdık. Ama .py dosyası, Python + kütüphaneler kurulu olmayan birinde çalışmaz. Bu hafta onu herkesin açabileceği tek bir programa dönüştürüyoruz.

1 · Neden?

Kaynak kod değil, çalışan program teslim etmek.

2 · Nasıl?

PyInstaller ile yorumlayıcı + bağımlılıkları paketle.

3 · Ayar

Bayraklar ve .spec ile ikon, isim, veri.

Sonunda: kendi uygulamanı arkadaşına gönder, onun bilgisayarında çift tıkla açılsın.

Önce Problem

"Ama Bende Çalışıyordu…"

senin_bilgisayarın
python 3.12 kurulu
PySide6 kurulu
$ python main.py → ✔ açıldı
arkadaşının_bilgisayarı
$ python main.py
ModuleNotFoundError:
No module named 'PySide6'

.py göndermek, birine yemek tarifi göndermek gibidir — mutfağı (Python, kütüphaneler) yoksa yiyemez. Bize pişmiş yemek lazım.

Çözüm: Paketleme

Her Şeyi Tek Kutuya Koy

🐍 Yorumlayıcı

Python'un kendisi de pakete girer.

📚 Bağımlılıklar

PySide6 ve diğer import'lar.

📝 Senin Kodun

Tüm .py dosyaların.

📦 Tek Program

Kurulum gerektirmeyen çalıştırılabilir.

Sonuç kendi kendine yeten (self-contained): hedef bilgisayarda Python kurulu olmasa bile çalışır.

Araç

PyInstaller Tek Komutla Paketle

pip install pyinstaller

pyinstaller main.py     # bu kadar!

pyinstaller senin kodunu analiz eder, hangi modülleri kullandığını bulur ve hepsini toplayıp bir çalıştırılabilir üretir.

Alternatifler: cx_Freeze, Nuitka, Briefcase — mantık aynı, biz en yaygını PyInstaller ile ilerliyoruz.

Not: Paketleme hedef işletim sistemine göre yapılır — Windows'ta üretirsen Windows .exe, macOS'ta .app çıkar.

Ne Üretilir?

Komuttan Sonra: 3 Şey

📁 build/

Geçici derleme çöpü. Görmezden gel, silebilirsin.

📁 dist/

Dağıtacağın son uygulama burada. Asıl istediğin bu.

📄 main.spec

Paketleme ayarların. Sonraki sefer bunu kullanırsın.

dist/
main.exe  ← çift tıkla, açılır
Etkileşimli

Komut Kurucu Bayrağa tıkla, komut kurulsun

$ pyinstaller main.py
Yukarıdaki bayraklara tıkla → komut aşağıda canlı güncellenir.

GUI uygulamaları için tipik ikili: --onefile --windowed. Gerisini isteğe göre eklersin.

Adım Adım

Sayaç Uygulamasını .exe Yap

# 1) proje klasörüne gir
cd sayac_uygulamasi
pyinstaller --onefile --windowed --name Sayac main.py

# 2) dist/Sayac.exe hazır → dağıt!
Öncesi → Sonrası
dist/
main.py  (kaynak)
Sayac.exe  ← tek dosya

Tek satır komut, tek dosya çıktı. Artık Python bilmeyen biri bile çift tıklayıp uygulamayı açar.

İnce Ayar

İkon ve Veri Dosyaları

pyinstaller --onefile --windowed --icon logo.ico \
    --add-data "images:images" main.py

--icon logo.ico → programın simgesi.

--add-data "images:images" → görsel/ses gibi ek dosyaları pakete kat (yoksa .exe onları bulamaz).

⚠ Kod içinde dosya yolunu çalıştığı yere göre çöz — sabit yol paketlenince kırılır.

Kural: uygulamanın açtığı her dış dosya ya pakete eklenmeli ya da yanında dağıtılmalı.

OOP Bağlantısı

.spec = Kod Olarak Ayar

a = Analysis(['main.py'], datas=[('images', 'images')])

exe = EXE(a.scripts, name='Sayac', console=False, icon='logo.ico')

# pyinstaller Sayac.spec   → aynı ayarla tekrar paketle

.spec aslında bir Python betiği. İçinde Analysis, EXE gibi nesneler var — tıpkı öğrendiğimiz sınıflar.

Uzun komut yerine ayarları dosyada saklarsın; sonraki sefer sadece pyinstaller Sayac.spec.

Bu, "yapılandırmayı kod olarak tut" fikridir: ayar bir nesne, dağıtım tekrarlanabilir olur.

Dikkat

Sık Yapılan Hatalar

🖥️ Konsol açılıyor

GUI uygulamada --windowed unutmak → arkada siyah pencere.

🖼️ Görsel bulunamıyor

--add-data eksik veya yol yanlış → resimler kayıp.

🛡️ Antivirüs/boyut

Tek dosya büyük olur ve bazen yanlış alarm verir — normaldir.

Altın kural: paketledikten sonra temiz bir makinede (veya Python'suz ortamda) mutlaka test et.

Mini Quiz · Haftayı Yokla

Kendini Test Et

1) --onefile ne yapar?
2) GUI'de neden --windowed?
3) .spec dosyası nedir?
4) Dağıtacağın çıktı hangi klasörde?
Özet

Bu Hafta Ne Öğrendik?

📦 Neden paketleriz

.py her yerde çalışmaz; kullanıcıya çalışan program veririz.

⚙️ PyInstaller

Yorumlayıcı + bağımlılık + kod → tek çalıştırılabilir. Çıktı dist/.

🚩 Bayraklar

--onefile, --windowed, --name, --icon, --add-data.

📄 .spec

Ayarı kod olarak sakla → tekrarlanabilir dağıtım.

Artık dönem projeni gerçek bir uygulama gibi teslim edebilirsin.

Uygulama · ~40 dk

Kendi Uygulamanı Dağıt

1 · Paketle. Önceki haftalarda yaptığın panel/sayaç uygulamasını al: pyinstaller --onefile --windowed --name Panelim main.py

2 · Kişiselleştir. Bir .ico ikon ekle (--icon) ve varsa görsellerini --add-data ile pakete kat.

3 · Test et. dist/ içindeki dosyayı farklı bir klasöre/makineye taşı, çift tıkla — açılıyor mu?

4 · Dağıt. Çıktıyı bir arkadaşına gönder; onun bilgisayarında Python olmadan çalıştığını doğrulat.

Süre: ~40 dk. Takıldığın yerde slaytlara dön; hata varsa önce --windowed ve --add-data'yı kontrol et.

Sonraki Hafta

Hafta 12 — PyTorch OOP I

Uygulamayı paketlemeyi öğrendik. Sırada, OOP prensiplerini yapay zekâ tarafına taşıyoruz: PyTorch'ta sınıflarla model kurma.

← Ders Ana Sayfasına Dön