PyInstaller ile Uygulamamızı Python ve Başka Modüllerden Bağımsızlaştırmak

Başlatan virs, 25 Temmuz 2010 - 10:36:17

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

virs

Bazen çalıştırılabilir bir dosya yapmak kullanıcıya birçok modülü kurdurmaktan daha çok işinize gelebilir.
Bu durumlarda cx_Freeze ve PyInstaller gibi uygulamaları kullanabilirsiniz. Biz yazımızda PyInstaller ı kullanacağız.
Misal yaptığımız bir uygulama hem PyQt, hem phonon(PyQt içinde PyQt den ayrı yüklenir), ... gibi birçok modüle bağımlı çalışıyorsa
uygulamımızı PyInstaller ile tek dosya veya dizin hâline getirebiliriz.

http://www.pyinstaller.org/

Kendi sitesi şu an çalışmıyor nedense, alternatif link:
http://www.4shared.com/file/fmkFQRS1/pyinstaller-14.html

PyInstaller Manual:
http://www.pyinstaller.org/export/latest/tags/1.4/doc/Manual.html?format=raw

PyInstaller Manual alternatif link(bu manual dosyası kendi sitesinden indirilmiştir):
http://www.4shared.com/account/document/STIgBC2b/PyInstaller_Manual.html

Zip dosyasını /home/user/ gibi kolayca ulaşabileceğiniz bir yere çıkartın. /home/user/pyinstaller  olarak varsayıyorum.

Kurulum
Konsola sırasıyla aşağıdaki komutları verin:
sudo apt-get install build-essential python-dev
(Pardusta bunu yapmaya gerek yok, pardus için aşağıdaki komutları uygulayın)

cd /home/user/pyinstaller/source/linux
python Make.py
make


Bu komutlardan sonra pyinstaller/support/loader klasörü altında run_d dosyasının oluşup oluşmadığını kontrol edin.
Bu dosya gerekli. (Windows kullanıcıları bu üstteki komutları uygulamadan aşağıdaki kısma geçebilirler)

Şimdi son olarak aşağıdaki komutları verin:
cd /home/user/pyinstaller
python Configure.py


Bu üstteki python Configure.py komutunu pyinstaller içinde değişiklik yaptığınız(misal upx programını eklemek gibi) zaman
herhangi bir uygulama için aşağıdaki komutları kullanmadan önce bir defa kullanmak gerekir.

Kullanım:
Bir yada birçok dosyadan oluşan uygulamanızı kolaylık olsun diye /home/user/pyinstaller/program dizini altına ekleyin.
Program dizinini kendiniz oluşturacaksınız.

Uygulamamızı çalıştıran dosyamız Test.py olsun. Uygulamamız tam olarak /home/user/pyinstaller/program/Test.py konumunda.
Şimdi aşağıdaki komutları uygulayın:

cd /home/user/pyinstaller/
python Makespec.py -F program/Test.py


Buradaki -F komutuyla uygulamamızı tek dosya yapmak istediğimizi belirttik.

Eğer Windows kullanıcıları exe'ye ikon eklemek istiyorsa komutu
aşağıdaki gibi vermelidir:
python Makespec.py -F --icon=C:/resim.ico program/Test.pyEğer ikon dosyanız pyinstaller içindeyse aşağıdaki komut işinizi görür:
python Makespec.py -F --icon=resim.ico program/Test.pyBu ikon ekleme işi Windows içindir, Linux'ta ise dağıtıma göre farklılık gösteriyor.

Ubuntu için, oluşan çalıştırılabilir dosyaya sağ tıklayıp özelliklere girilir ve oradan simgenin üzerine tıklayarak ikon olarak seçmek istediğiniz resmi seçersiniz.

Pardus için, çalıştırılabilir dosyaya sağ tıklayıp özelliklere girilir ve Tür: Çalıştırılabilir dosya yazısının sağındaki ayar simgesine tıklanır, sonra oradan simgenin üzerine tıklayarak ikon olarak seçmek istediğiniz resmi seçersiniz.

Linux'ta uygulamanızın ikonunun değişmemesi için eklediğiniz resmin konumu değişmemeli. O yüzden resminizi /usr/share/pixmaps gibi genel bir yere ekleyin. Varsayalım ki resmin konumu /home/user/program/resim.png olsun.

Aşağıdaki komutla ikon için kullanılacak resmi /usr/share/pixmaps klasörüne resminizi ekleyebilirsiniz:
sudo cp /home/user/program/resim.png /usr/share/pixmaps
Daha çok ince ayar için pyinstaller manual'indeki "Create a spec file for your project" konusuna bakmalısınız:
http://www.pyinstaller.org/export/latest/tags/1.4/doc/Manual.html?format=raw#id6

Şimdi /home/user/pyinstaller/Test klasörü oluşmuş olmalı ve içinde Test.spec dosyası oluşmuş olmalı.
Bu dosya py2exe ile setup yaparken hazırladığımız setup.py dosyası gibi aynı işlevi görüyor, yani bunu özelleştirebilirsiniz
kendinize göre pyinstaller ın manual ine bakarak.

Son olarak aşağıdaki komutu veriyoruz:
python Build.py Test/Test.spec

Bundan sonra uygulamamız  /home/user/pyinstaller/Test/dist/ klasörü içinde tek dosya hâlinde oluşmuş olacak.
3-4 bin satırlık resimleri uygulamaya gömülü bir PyQt uygulaması aşağı yukarı 13 mb lık bir dosya oluyor bu paketleme sonrası.
Yukarıdaki işlemler sonucu Windows'ta exe oluşurken, Linux'ta /usr/bin deki gibi uzantısız çalıştırılabilir dosya oluşur.
Eğer Linux'ta bu oluşan dosyayı çift tıklama ile çalıştıramazsanız konsolda ./Program_Adı şeklinde çalıştırabilirsiniz.
(Neden bilmem ama Pardus'ta böyle bir sorun yaşadım.)

Eğer PyQt deki gibi resimleri uygulamaya gömmek için kullandığımız dosya_adi.qrc dosyasından elde ettiğiniz dosya_adi_rc.py dosyasını
da kullandıysak uygulamamız tamamen tek dosya olmuş olur, aksi hâlde o resimleri bu uygulamanın yanına veya arayüzden hangi konumu
girerek ulaşılmasını istediyseniz o konuma eklemelisiniz. Yoksa uygulamanızdaki resimler görünmez.

Bunun dışında harici dosyalar uygulamaya gömülüyor mu, gömülüyorsa nasıl gömülüyor bunları araştırmaktayım,
bilen varsa bir el atsın :)

Aslında bu işleri görsel olarak yapabilen bir uygulamada hâli hazırda mevcut:
http://code.google.com/p/gui2exe/

Bu uygulamanın wxpython'ın 2.8.8.0 ve üzeriyle uyumlu olduğu GUI2Exe.py dosyasında belirtilmiş:
if wx.VERSION < (2, 8, 8, 0):
    print "wxPython >= 2.8.8.0 is required"
İnsan için ancak çalıştığının karşılığı vardır. (Kur'an: Necm, 39)