Harici dosyalar içeren GUI'yi PyInstaller ile tek bir EXE dosyasına çevirmek

Sorun çözülmüştür.
Sorunun çözümünde aşağıdaki yol izlenmiştir.

Adım 1: Python dosyasının içinde aşağıdaki fonksiyonu tanımlıyoruz:

import os, sys
def kaynak_yolu(goreceli_yol):
    temel_yol = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(temel_yol, goreceli_yol)

Adım 2: Fonksiyonu tanımladıktan sonra, herhangi bir değişken adı belirliyoruz ve değişkenimizin değeri olarak fonksiyonu yazıyoruz. Fonksiyonun parametre kısmına ise harici dosyamızın göreceli yolunu tırnak içerisinde aşağıdaki örnekte olduğu gibi belirtiyoruz.

image = kaynak_yolu("Converter-GUI.ico")

Adım 3: Daha sonra ise programımızda, bu ikonu adres olarak verdiğimiz yere, değişken adını yazıyoruz: Benim örneğimde ikonun adresinin geçtiği ilgili yer aşağısı:

self.window.iconbitmap(image)

Adım 4: Python dosyamızın bulunduğu dizinde konsol ekranını çalıştırıyoruz ve aşağıdaki komutları yazıyoruz.

pyinstaller --onefile dosya_ismi.py

Adım 5: Dosyamız oluştu ancak şu haliyle çalışmayacaktır. PyInstaller exe dosyasını oluştururken spec adlı bir dosya oluşturur. Bu dosyayı açıyoruz ve ilk mesajda 3. adımda verilen eklemeleri yapıyoruz:

a.datas += [('Converter-GUI.ico', 'C:\\Users\\TCK\\Desktop\\Projeler\\Converter-GUI.ico', 'DATA')]

ve,

icon='C:\\Users\\TCK\\Desktop\\Projeler\\Converter-GUI.ico'

Not-1: icon ekleme işlemini dilerseniz konsol ekranında da yapabilirsiniz.

Not-2: İlk mesajda verilen spec dosyasının içinde COLLECT sınıfı vardı. Ancak python dosyamızı --onefile ile dönüştürdüğümüzde .spec dosyasının içinde artık COLLECT sınıfı yer almıyor.

Adım 6: Konsol ekranını yine açıyoruz bu kez aşağıdaki komutları yazıyoruz:

pyinstaller dosya_ismi.spec

Son adımdan sonra artık harici dosyalar içeren GUI’li tek bir exe dosyamız var.

Not-3: Bu exe dosyası acaba sadece benim bilgisayarımda mı çalışıyor diye merak ettim, kardeşimin bilgisayarına bu exe dosyasını aktardım. Orada da çalıştı.

Not-4: Öğrendiğim kadarıyla tek bir klasör içinde birden çok dosya ile çalışan bir program, birden çok dosyayı içinde barındıran bir programa göre daha hızlı açılıyor.

8 Beğeni