Bir projeye dalıp “Bu kolay olmalı” diye düşündüğünüz ve saatler sonra kendinizi belirsiz hataların, güncelliğini yitirmiş forum yazılarının ve çelişkili tavsiyelerin altında bulduğunuz o anı biliyor musunuz?
Evet, Python uygulamamı .deb dosyasına paketlemeye çalışırken ben de aynısını yaptım.

Son zamanlarda Python öğrenmeye başladığımdan beri, neden kullanıcı arayüzünü özelleştirmiyorum, mantığı biraz değiştirmiyorum ve ona yeni bir başlangıç yapmıyorum diye düşündüm.
Python uygulaması sanal bir ortamda çalışırken harika çalışıyordu ancak ben bu uygulamayı .deb dosyası olarak göndermekle daha çok ilgileniyordum, böylece kurulum dpkg -i app.deb kadar basit hale geliyordu.
İnternette okuduğum her eğitimde ufak tefek ayrıntılara değinilmişti, ancak hiçbiri bana sürecin tamamını anlatmamıştı.
Doğru paketleme aracını seçmek
Bir Python betiğini yürütülebilir bir dosyaya dönüştürmek için PyInstaller kullanıyorum. Başlangıçta, özellikle .deb paketleri oluşturmak için tasarlanmış bir araç olan py2deb’i kullanmayı denedim.
Kötü fikir. Görünen o ki, py2deb yıllardır bakım görmemiş ve yeni Python sürümlerini desteklemiyor.
PyInstaller, bir Python betiğini alır ve bağımlılıklarıyla birlikte tek bir bağımsız çalıştırılabilir dosyada birleştirir. Bu, kullanıcıların Python’ı ayrıca yüklemesine gerek olmadığı, kullanıma hazır olduğu anlamına gelir.
Adım 1: PyInstaller’ı yükleyin
Öncelikle PyInstaller’ın yüklü olduğundan emin olun. Değilse, pip kullanarak kurun:
Doğru şekilde kurulup kurulmadığını kontrol edin:
Adım 2: .deb paket yapısını oluşturun
Her şeyi temiz ve düzenli tutmak için .deb paketleri belirli bir klasör yapısını takip eder.
Hadi oluşturalım:
Her dizin ne işe yarar?
usr/bin/: Çalıştırılabilir dosyayı depolar.usr/share/applications/: .desktop dosyasını içerir (böylece uygulama sistem menüsünde görünür).usr/share/icons/: Uygulama simgesini saklar.DEBIAN/: Paket bilgisi ve bağımlılıklar gibi meta verileri içerir.
İsteğe bağlı: Paketleme bağımlılıkları
Uygulamayı paketlemeden önce, ister bir betik olarak isterse bağımsız bir ikili dosya olarak çalıştırılsın, varlıkları ve bağımlılıkları doğru şekilde yüklediğinden emin olmak istedim.
Başlangıçta iki büyük sorunla karşılaştım:
- Paketlenmiş yürütülebilir dosya olarak çalıştırıldığında varlık yolları yanlış olduğundan uygulama içi logo düzgün görüntülenmiyordu.
- Uygulama çalıştırılabilir dosya olarak çalıştırıldığında bağımlılık hataları oluştu.
Her şeyin kendi içinde yeterli kalması ve sistem paketleriyle çakışmaların önlenmesi için, pdf-compressor/usr/share/pdf-compressor içinde sanal bir ortam oluşturdum.
Daha sonra içindeki tüm bağımlılıkları kurdum:
Bu, bağımlılıkların düzgün bir şekilde paketlenmesini ve sistem paketlerini etkilememesini sağlar.
Uygulamanın varlıkları ve bağımlılıkları doğru şekilde yüklediğinden emin olmak için betiği aşağıdaki gibi değiştirdim:
Burada neler oluyor?
sys._MEIPASS→ Uygulama PyInstaller ile paketlendiğinde, varlıklar geçici bir klasöre çıkarılır. Bu, erişilebilir olmalarını sağlar.- Sanal ortam yolu (/usr/share/pdf-compressor/venv) → Eğer varsa sys.path’e eklenir, böylece yüklü bağımlılıklar bulunabilir.
- Assets paths → Hem betik hem de bağımsız modlarda çalışabilmeleri için dinamik olarak atanırlar.
Bu değişiklikleri yaptıktan sonra sorunum büyük ölçüde çözüldü.
Adım 3: Python betiğini çalıştırılabilir dosyaya derleme
Şimdi heyecan verici kısma, yani Python betiğini bağımsız bir yürütülebilir dosyaya dönüştürmeye geliyoruz. Ana Python betiğinin bulunduğu kök dizine gidin ve şunu çalıştırın:
--onefile: Her şeyi tek bir yürütülebilir dosyaya paketler--windowed: Terminali gizler (GUI uygulamaları için yararlıdır)--name=compress-pdf: Çıktı dosya adını ayarlar--add-data "assets:assets"→ Resimlerin/simgelerin eklenmesini sağlar.
Bundan sonra PyInstaller bir dist/ oluşturacak, içinde compress-pdf’i bulacaksınız. Bu bağımsız bir uygulamadır!
Şunu çalıştırmayı deneyin:
Her şey beklendiği gibi çalışıyorsa, onu bir .deb dosyasına paketlemeye hazırsınız demektir.
Adım 4: Yürütülebilir dosyayı doğru konuma taşıyın
Şimdi, bağımsız çalıştırılabilir dosyayı bin dizinine taşıyın:
Adım 5: Bir uygulama simgesi ekleyin
Sizin için durum nedir bilmem ama bana göre, simgesi veya sadece genel dişli simgeleri olmayan bir uygulama eksik kalır. Simge, uygulamanıza hava katar.
İkon ve logo dosyalarının bulunduğu assets dizinini doğru dizine yerleştirelim:
Adım 6: Bir masaüstü dosyası oluşturun
Uygulamanın sistem menüsünde görünmesi için bir .desktop dosyasına ihtiyacımız var. Yeni bir dosya açın:
Exec→ Çalıştırılabilir dosyanın yolu.Icon→ Uygulama simgesinin konumu.Terminal=false→ GUI uygulaması olarak çalışmasını sağlar.
Kaydedip çıkın (CTRL+X, sonra Y, sonra Enter).
Adım 7: Kontrol dosyasını oluşturun
Her .deb paketinin kalbinde control adı verilen bir meta veri dosyası bulunur.
Bu dosya, Debian paket yöneticisine (dpkg) paketin ne olduğunu, kimin bakımını üstlendiğini, hangi bağımlılıklara sahip olduğunu ve ne işe yaradığına dair kısa bir açıklamayı bildirir.
Bu yüzden bunları burada tanımlamak, kullanıcılar için sorunsuz bir deneyim sağlar.
sonra içine şu içeriği ekledim:
Adım 8: Postinst betiğini oluşturun
Kurulum sonrası (postinst) betiği, adından da anlaşılacağı gibi, paket yüklendikten sonra çalıştırılır. Tüm bağımlılıkların doğru şekilde kurulmasını sağlar.
Bu içeriği ekle:
set -e→ Başarısızlık durumunda betiğin durmasını sağlar.- Sanal bir ortam oluşturur → Bu, bağımlılıkların izole bir şekilde kurulmasına olanak tanır.
chmod +x /usr/bin/pdf-compressor→ İkili dosyanın çalıştırılabilir olmasını sağlar.update-desktop-database→ Sistemin uygulama veritabanını günceller.
Postinst için doğru izinleri ayarlamak önemlidir:
Adım 9: deb paketini derleyin ve yükleyin
Tüm bu zorlu çalışmalardan sonra, sonunda her şeyi bir araya getirme zamanı geldi. Paketi derlemek için, yerleşik bir Debian paketleme aracı olan dpkg-deb –build komutunu kullanacağız.
Bu komut yapılandırılmış pdf-compressor dizinimizi alır ve onu herhangi bir Debian tabanlı sisteme kurulabilen bir .deb paketine dönüştürür.
Şimdi onu kuralım ve uygulamamızı çalışırken görelim!
Eksik bağımlılıklar nedeniyle kurulum başarısız olursa, şunları kullanarak bunları düzeltin: sudo apt install -f
Bu, pdf-compressor’ı sisteminize diğer Debian paketleri gibi yükler. Doğrulamak için, Uygulamalar menüsünden veya doğrudan terminal üzerinden başlatabilirsiniz:
Son düşünceler
Bir Python uygulamasını paketlemek ilk düşündüğüm kadar basit değil. Araştırmam sırasında, baştan sona tüm süreci adım adım anlatan sağlam bir rehber bulamadım.
Yani denemek, başarısız olmak ve öğrenmek zorundaydım ve bu rehberde tam olarak bunu paylaştım. Geriye dönüp baktığımda, daha iyi bilseydim, mücadele ettiğim birçok şeyin basitleştirilebileceğini fark ediyorum. Ama öğrenmek de tam olarak bu değil mi?
Yazının orijinalini buradan okuyabilirsiniz