PyInstaller ile Python Programlarını EXE Yapmak

Öncelikle hepinize merhabalar. Bu, Technopat'ta yazdığım ilk makale olacak, dolayısıyla hatalarım veya eksiklerim olabilir. Gördüğünüz hataları ve eksikleri lütfen yazın. Kendimi bu konuda geliştirmeye çalışacağım.

Diyelim ki bir Python kodu yazıyorsunuz ve yazdığınız kodu herhangi bir sebepten dolayı arkadaşlarınıza, müşterilerinize vb. kişilere dağıtmak istiyorsunuz. Elbette, direkt olarak program.py dosyanızı gönderebilirsiniz yalnız bu durumda karşı tarafın yapması gereken bazı şeyler olacak:

  • Programı attığınız kişide Python yüklü olmayabilir ve programı çalıştırmak için yüklemek zorunda kalacaktır.
  • Bilgisayarında Python yüklü olsa bile eğer kodunuzda Requests, PyQt5, Kivy, lxml gibi Python ile hazırda yüklü gelmeyen external kütüphaneler kullanılıyorsa pip kullanarak bu kütüphaneleri teker teker yüklemesi gerekecektir.
Yolladığınız programı kullanacak olan kişi, eğer bilgisayara veya bu yukarıdaki şeylerin yapımına aşina değilse, uğraşmak istemiyorsa veya uğraşsa da beceremiyorsa ama programı kullanmak istiyorsa peki o zaman ne yapacak? Cevap basit, PyInstaller kullanarak programınızı bir exe dosyasına dönüştürebilir ve Windows bilgisayarlarda tek tıklamayla çalıştırılmasını sağlayabilirsiniz. Bu makalede de PyInstaller ile nasıl basit bir şekilde exe dosyası oluşturabileceğinizi göstereceğim.

Öncelikle PyInstaller'dan çok kısa bahsedeyim. PyInstaller, Python uygulamalarını exe dosyalarına paketleyen bir Python modülüdür. Python 3.5-3.9'la uyumludur. Modülleri neredeyse tamamen kendisi yükleyebilir ve 3. parti modüllerle neredeyse tamamen uyumludur. Neredeyse dememin sebebi bazı modüllerde ek işlemler yapmanız gerekmesidir.

PyInstaller Kullanımı:

PyInstaller'ın bir modül olduğundan bahsetmiştim. Dolayısıyla indirmek için pip'i kullanacağız. Komut satırını kullanarak aşağıdaki kodla PyInstaller'ı yükleyebiliriz.
[CODE title="PyInstaller İndirme ve Yükleme"]pip3 install pyinstaller[/CODE]

PyInstaller indikten sonra sıra geldi exe dosyamızı oluşturmaya. PyInstaller'ı yine komut satırı üzerinden kullanıyoruz. Ana Python dosyamızın adı "deneme.py" olsun. En basit haliyle bir exe oluşturmak için komut satırına aşağıdaki kodu yazıyoruz:
[CODE title="Basit PyInstaller komutu"]pyinstaller deneme.py[/CODE]

Bu kodu yazdığımızda komut satırında PyInstaller'ın yaptığı işlemlerle ilgili çıktıları görmeye başlayacağız. İşlem tamamlandığında ana dosyamızın bulunduğu konumda yeni birkaç dosya ve klasör göreceğiz. Bizim aradığımız dosya, "dist" adlı klasörün içinde başka bir klasör halinde olacak. Yalnız bu yöntem, bize tek bir exe dosyası üretmiyor. Onun yerine içerisinde exe dosyasının ve uygulamanın çalışması için gerekli olan diğer kütüphane, dll benzeri dosyaların birlikte bulunduğu bir klasör veriyor. Bu klasörün içindeki deneme.exe dosyasına tıklayarak programı çalıştırabilirsiniz. Exe dosyasını bulunduğu klasörden çıkarmamanız gerekmekte fakat ana klasörün yerini istediğiniz gibi değiştirebilirsiniz. Eğer bir yükleyici yaratmak istiyorsanız Inno Setup kullanmanızı tavsiye ederim ama bu başka bir makalenin konusu olur.

Diyelim ki bu dosyalarla, yükleyicilerle uğraşmak istemiyoruz ve programımızın tek bir exe olarak çıkmasını istiyoruz. Bunun için de yazacağımız komut çok basit.
[CODE title="Tek Exe Dosyası Halinde"]pyinstaller --onefile deneme.py[/CODE]
Bu komutla PyInstaller gerekli tüm dosyaları tek bir exe'nin içerisinde paketleyecek. Yükleyicilerle vesaire uğraşmaya gerek kalmayacak. Sonda oluşacak exe dosyası yine "dist" klasörünün içinde olacak. Yalnız bu yöntemin bir kötü yanı var. Gerekli tüm dosyalar tek bir exe'nin içinde sıkıştırılmış bir biçimde bulunduğundan siz programı açmak için tıkladığınızda açılması biraz uzun sürecektir. Bu sürenin geçmesinin sebebi programın ilk önce çalışması için gerekli olan tüm dosyaları unpack etmeyi beklemesidir. Ben yine de bunu tercih ediyorum ama karar tamamen size kalmış.

Şimdi gelelim diğer işlere. Buraya kadar çok basit bir şekilde nasıl exe oluşturulacağını yazdım ama PyInstaller'ın yapabileceği şeyler bu kadarla kalmıyor. Yine basit bir anlatımla bırakıp çok fazla detaya girmeyeceğim ve sadece ikon eklemeyi, ek dosya eklemeyi ve çıkış dosya ismini değiştirmeyi yazacağım. Hepsini tek bir satırda yapıp neyin ne işe yaradığını yazacağım.

Eğer programımıza kendimiz bir ikon eklemezsek program ikonu olarak PyInstaller'ın kendi belirlediği ikon gözükecektir. Bunu değiştirmek için PyInstaller komutunda --name seçeneğini ekliyoruz. Seçeneği de --name <tamDosyaAdı veya konumu> şeklinde kullanıyoruz. Eğer dosya adında boşluklar varsa "" içerisine almalısınız. "dist" klasörünün içinde de bu verdiğiniz ikonla gözükecektir. Eğer ikon adında boşluklar varsa tırnak işareti arasına almanız gerekiyor.

Diyelim ki Kivy gibi bir modül kullanıyorsunuz ve .kv dosyanızı eklemeniz gerekiyor veya içinde bazı bilgileri tuttuğunuz açılması gereken bir txt dosyanız var. Bu dosyaları da --add-data seçeneğiyle ekliyoruz. Bu seçeneği eklediğiniz dosya başına birden fazla kez kullanabilirsiniz. Yalnız bu seçenekte biraz teferruat var. Diyelim ki "dosya1.txt" adlı bir dosya eklemek istiyoruz. Bu durumda seçeneği --add-data "dosya1.txt;dosya1.txt" olarak kullanıyoruz. Tırnak işaretinin içini açmak lazım. İçinde toplam 3 eleman ("dosya1.txt" ";" ve yine "dosya1.txt") girmiş bulunduk. Burada ";" işareti dosya yolu ayracıdır ve işletim sistemine göre değişir. Windows'ta ";" iken çoğu Unix sistemde ":" işaretini kullanmak gerekir. ";" işaretinin solunda girdiğimiz şey kaynak dosyanın adı veya yoludur. ";" işaretinin sağında ise paketleme işlemi tamamlandıktan sonra bulunacağı klasörün adı veya konumudur. Eğer herhangi bir klasörün içinde bulunmasını istemiyorsanız "dosya1.txt;." yazabilirsiniz.

Son olarak, dosya adını değiştirelim. Bunun için --name ayarını ekliyoruz. Diyelim ki uygulamamızın adını "İlkUygulama" yapmak istiyoruz. Bunu --name İlkUygulama şeklinde kodumuza ekleyebiliriz. Eğer gireceğiniz uygulama adında boşluk bulunacaksa tırnak işareti içine almanız gerekiyor.
[CODE title="Tüm seçeneklerle birlikte"]pyinstaller --onefile --icon iconAdi.ico --add-data "dosya1.txt;dosya1.txt" --name İlkUygulama deneme.py[/CODE]

Kaynak: Using PyInstaller — PyInstaller 4.3 documentation

Evet, burada yazacaklarımın sonuna geldim. Bu makalede yazdıklarım PyInstaller'ın tüm özelliklerini anlatmasa da standart bir kullanıcının ihtiyacı olabileceği şeylerin tümünü göstermeye çalıştım. Eğer hatalarım, eksiklerim vb. şeyler görürseniz lütfen yorumlarda belirtin. Umarım faydalı bir içerik olmuştur.
 
Elinize sağlık. "--noconsole" ayarının da arayüzlü yazılılmlar için faydalı olduğunu düşünüyorum. Ben kendi .exe'mde arayüzün yanında kod defterinin açılmasını böyle çözmüştüm.
 

Yeni konular

Geri
Yukarı