Python betiğini PyInstaller ile çalıştırılabilir dosyaya paketlemek
Python yüklü olmayan bir bilgisayarda betiğinizi çalıştırmanın yolu onu paketlemektir. PyInstaller ile paketlemenin komutları, seçenekleri, test yöntemi ve en sık karşılaşılan sorunları bilmek yeterlidir.
Bir bakışta
- PyInstaller betiği ve gerekli kütüphaneleri tek pakette toplar. Kullanıcının Python kurmasına gerek kalmaz.
- Paket, derlendiği işletim sistemi için üretilir. Windows için çalıştırılabilir dosya, Windows'ta; macOS için macOS'ta üretilir.
- Tek dosya pratiktir, klasör modu daha hızlı açılır ve hata ayıklaması kolaydır. Seçim dağıtım biçimine ve açılış süresine göre yapılır.
- Betiğin dosya yollarını ve veri dosyalarını paket uyumlu yazmak gerekir. Ekran dosyaları, şablonlar ve ayar dosyaları pakete ayrıca eklenir.
- Paketi temiz bir makinede denemeden dağıtılmaz. Geliştirme bilgisayarında çalışan paket, eksik bağımlılık yüzünden başka yerde çalışmayabilir.
Neden paketleriz, ne olur?
Python betiği, çalışabilmek için bir Python kurulumuna ve kullandığı kütüphanelere ihtiyaç duyar. Betiği iş arkadaşınıza ya da müşterinize verdiğinizde bunların hepsini kurmasını beklemek çoğu zaman gerçekçi değildir. Paketleme, betiği, yorumlayıcıyı ve kütüphaneleri bir araya getirerek tıklayıp çalıştırılabilen bir uygulamaya dönüştürür.
PyInstaller bu iş için yaygın kullanılan araçlardan biridir. Betiğinizin hangi modülleri içe aktardığını inceler, onları toplar ve çıktı klasörüne yerleştirir. Sonuç, yorumlayıcının bir kopyasını içerdiği için nispeten büyük olabilir; bu normaldir.
İki kavram baştan bilinmelidir. Birincisi, paket bir derleyici değildir; kodunuzu başka bir dile çevirmez, yalnızca çalışması için gereken her şeyi birlikte taşır. Dolayısıyla kaynak kodun gizlenmesi güvencesi vermez. İkincisi, PyInstaller çapraz derleyici değildir: belgelerine göre her işletim sistemi için paketi o sistemde üretmeniz gerekir. Windows kullanıcılarına dosya vereceksiniz, derlemeyi Windows'ta yapın.
Kurulum ve ilk paket
Önce projeniz için temiz bir sanal ortam açın ve yalnız betiğin gerçekten kullandığı kütüphaneleri kurun. Bu, pakete gereksiz kütüphane girmesini önler ve boyutu küçük tutar. PyInstaller de aynı ortama kurulur:
python -m venv ortam ortam\Scripts\activate pip install pyinstaller
Açıklama: ortam\Scripts\activate komutu Windows içindir; macOS ve Linux'ta source ortam/bin/activate kullanılır. Ardından paketi üretin:
pyinstaller betik.py
Bu komut varsayılan olarak klasör modunda çalışır. Belgelere göre çıktı dist klasörüne yazılır, derleme sırasında oluşan günlük ve çalışma dosyaları build klasöründe tutulur ve betik adıyla bir spec dosyası üretilir. dist içindeki klasörde çalıştırılabilir dosya ve gereken tüm destek dosyaları bulunur; dağıtırken klasörün tamamını verirsiniz.
Paketleme, temiz bir ortamdan dağıtıma uzanan bir zincirdir
Her adım bir öncekine dayanır
- Temiz ortamYalnız gerekli kütüphaneler kurulur.
- Betiği hazırlaDosya yolları ve veri dosyaları pakete uygun yazılır.
- Paketi üretpyinstaller komutu ve seçenekleri çalıştırılır.
- Başka makinede denePython kurulu olmayan temiz bir bilgisayarda test edilir.
- Dağıt ve güncelleHer sürüm için paket yeniden üretilir.
Önemli seçenekler
Belgelere göre birkaç seçenek çoğu ihtiyacı karşılar. Tek dosya için onefile (kısaca -F), her şeyi tek bir çalıştırılabilir dosyaya sıkıştırır; varsayılan olan onedir ise klasör üretir. Konsol penceresi gerekmeyen, arayüzlü uygulamalarda windowed (ya da noconsole) kullanılır; macOS'ta bu seçenek ayrıca bir uygulama paketi üretir. Konsolu açık bırakmak, yani varsayılan, hata ayıklarken çok işe yarar.
Ad için name seçeneği hem paketin hem spec dosyasının adını belirler. Simge için icon seçeneği Windows'ta .ico, macOS'ta .icns bir dosya bekler. Betiğin okuyacağı bir ayar, şablon ya da görsel dosyası varsa add-data seçeneğiyle kaynak ve hedef yolu verilir; ayırıcı karakterin işletim sistemine göre farklılaşabileceğini belgeden kontrol edin.
Bir örnek komut: pyinstaller --onefile --windowed --name rapor_araci betik.py. Bu, konsol penceresi açmayan, tek dosyalık bir uygulama üretir. Seçenekler çoğaldığında komutu her seferinde yazmak yerine spec dosyasını düzenleyip pyinstaller betik.spec ile yeniden derlemek daha düzenlidir; belgelere göre spec dosyasından derlerken çoğu komut satırı seçeneği yok sayılır, ayarlar spec içinde yapılır.
Tek dosya mı, klasör mü: dağıtım biçimine bağlı
Mod seçimi
- Tek dosya olarak gönderilecek, kurulum istenmiyorTek dosya moduPratiktir; ilk açılışı çoğu zaman biraz daha yavaştır.
- Hata ayıklıyorsunuz ya da açılış hızı önemliKlasör moduDosyalar ayrı durur, sorun kaynağı bulmak kolaylaşır.
- Kurulum paketiyle dağıtılacakKlasör modu ve ayrı kurulum aracıKlasör, bir kurulum aracıyla paketlenebilir.
Veri dosyaları ve dosya yolları
Paketlenmiş uygulamalarda en sık sorun, dosya yollarıdır. Betiğiniz geliştirme sırasında bulunduğu klasörden göreli bir yolla şablon ya da ayar dosyası okuyorsa, paketlenmiş uygulama çalıştırıldığında o yolu bulamayabilir. Tek dosya modunda uygulama, geçici bir klasöre açılarak çalışır; bu klasörün konumu her çalıştırmada değişebilir.
Bu nedenle, pakete eklediğiniz dosyaları bulmak için PyInstaller'ın çalışma zamanı bilgisini kullanan küçük bir yardımcı yazılır: paketlenmişse paketin açıldığı konumu, değilse betiğin klasörünü esas alır. Kullanıcının değiştireceği ayar dosyalarını ise paketin içine değil, kullanıcıya ait bir klasöre yazın; paketin içi salt okunur bir kaynak gibi düşünülmelidir.
Betik tarafında ayrıca dinamik içe aktarmalara dikkat edin. PyInstaller içe aktarmaları kod incelemesiyle bulur; ad bir değişkenden okunarak içe aktarılıyorsa tespit edemeyebilir. Bu durumda eksik modül, derleme sırasında ya da çalışırken hata verir ve gizli içe aktarma olarak ayrıca belirtilmesi gerekir.
Test ve dağıtım
Paketi üretir üretmez geliştirme bilgisayarında denemek yetmez; orada Python ve tüm kütüphaneler zaten kurulu olduğundan eksik bir bağımlılık fark edilmeyebilir. Gerçek test, Python kurulu olmayan temiz bir makinede ya da sanal makinede yapılır. Windows'ta uygulamanın farklı bir kullanıcı hesabıyla ve yönetici yetkisi olmadan da çalıştığını kontrol edin.
Konsolu açık bırakarak ürettiğiniz bir deneme sürümü, hata mesajlarını görmenizi sağlar. Konsolsuz sürümde hata sessizce kaybolabilir; bu yüzden uygulamanıza bir günlük dosyası ekleyin ve beklenmedik istisnaları oraya yazın.
Dağıtımda güvenlik yazılımı sorunlarına hazırlıklı olun. Paketlenmiş betikler, imzasız olduklarında bazı güvenlik yazılımları ya da işletim sistemi uyarıları tarafından şüpheli işaretlenebilir. Kurum içinde dağıtacaksanız BT ekibiyle önceden konuşun; geniş dağıtımda kod imzalama konusunu araştırın.
Sürüm yönetimi için her değişiklikte paketi yeniden üretin ve sürüm numarasını uygulama içinde görünür kılın. Kullanıcıya hangi sürümü çalıştırdığını söylemeyen bir uygulama, destek taleplerinde zaman kaybettirir.
Sık hatalar
İlk hata, genel Python ortamından derlemektir. Sisteme kurulu her kütüphane pakete girebilir, boyut büyür ve çakışmalar çıkar. Sanal ortam bunu önler. İkinci hata, paketi başka bir işletim sistemi için üretebileceğini sanmaktır; belgelere göre her platformda ayrıca derlenir.
Üçüncü hata, veri dosyalarını eklemeyi unutmaktır; paket geliştirme bilgisayarında çalışır ama dosya bulunamadığı için başka yerde çöker. Dördüncü hata, hata mesajı görmeden konsolsuz paket dağıtmaktır. Beşinci hata, kaynak kodun paketle korunduğunu varsaymaktır; paket, kodun gizlenmesi için tasarlanmış bir araç değildir. Gizli bilgileri (şifre, anahtar) paketin içine gömmeyin.
Paket boyutu büyükse önce kullanılmayan kütüphaneleri temizleyin. Çalışmayan bir pakette ise önce konsollu sürümü üretin ve hata mesajını okuyun; çoğu sorun orada açıkça yazılıdır.
Bu beceriyi Mindset programlarında nerede çalışırsınız
Python ile Robotic Process Automation (RPA) Eğitimi, Python temellerinden belge, PDF, veritabanı, e-posta ve GUI otomasyonuna kadar giden bir yol sunar; yazdığınız botun ekip arkadaşlarına teslim edilmesi bu programın üzerine kurulan doğal bir adımdır. Bot ya da otomasyon yazan ve çıktısını ekip arkadaşlarına vermek isteyen çalışanlar için uygundur.
Python ile Programlama Eğitimi ise betiği yapılandırılmış şekilde yazmayı öğrenmek isteyenler için dil temelini sağlar.
İlgili Mindset programı
Python ile Robotic Process Automation ( RPA ) Eğitimi
Sık sorulan sorular
Python'da exe oluşturmak için başka araçlar var mı?
Evet, benzer işi yapan başka araçlar da vardır. PyInstaller bunların en yaygın olanlarından biridir. Her aracın desteklediği platformlar, kütüphane uyumu ve açılış davranışı farklıdır; proje gereksinimlerinize göre güncel belgelerini karşılaştırın.
Üretilen exe dosyası neden bu kadar büyük?
Paket, Python yorumlayıcısını ve betiğin kullandığı tüm kütüphaneleri içerir. Büyük kütüphaneler (veri bilimi paketleri gibi) boyutu belirgin artırır. Temiz bir sanal ortamdan derlemek ve gereksiz kütüphaneleri çıkarmak boyutu küçültür.
Tek dosya modunda neden uygulama yavaş açılıyor?
Tek dosya modunda uygulama, her çalıştırmada içeriğini geçici bir konuma açar; bu açılışı yavaşlatabilir. Açılış hızı önemliyse klasör modunu tercih edin. Klasör modu dağıtımda birden fazla dosya demektir, bir kurulum aracıyla paketlenebilir.
Windows'ta derlenen exe Mac'te çalışır mı?
Hayır. PyInstaller belgelerine göre her platform için paket o platformda derlenmelidir. Windows paketi Windows'ta, macOS paketi macOS'ta üretilir. Bunun için sanal makine ya da ilgili işletim sistemine sahip bir bilgisayar kullanılabilir.
Antivirüs exe dosyamı neden engelliyor?
İmzasız ve yeni üretilmiş çalıştırılabilir dosyalar, bazı güvenlik yazılımları tarafından şüpheli sayılabilir. Kurum içinde dağıtacaksanız BT ekibine bildirin; geniş dağıtım için kod imzalamayı araştırın. Paketi her sürümde yeniden ürettiğinizde bu davranış yinelenebilir.