cx_freeze ve py2exe alternatifi
Yazdığı kodları Windows'da son kullanıcıya dağıtmak isteyen Pythoncular bildiğim kadarıyla, iki farklı yol izliyor:
- Kullanıcıdan Python yüklemesini istemek
- cx_freeze, py2exe gibi programlarla Python ve yazılan uygulamayı tek dosya altında birleştirmek
Bu iki yöntemin de kendine göre bir takım sıkıntıları var. İlk yöntem, son kullanıcı açısından yorucu olabilir. Aynı zamanda, son kullanıcının Python'u kuracak ve sistem yoluna ekleyecek kadar bilgili olmasını gerektiriyor.
İkinci yöntem ise, hem bir açıdan kodları sakladığı için açık kaynak felsefesiyle ters düşüyor, diğer yandan bozuk exe dosyası üretme riski var. Ayrıca, şahsen hiç estetik bulmuyorum bu yöntemi.
Bu yazıda, muhtemel bir üçüncü yöntemden bahsedeceğim. Bu yazıdaki adımları takip etmek istiyorsanız, şunlara ihtiyacınız olacak;
- Python 2.7.5: Ben bu versiyonu kullandım. Belki bir takım şeyler sürümden sürüme farklılık gösteriyor olabilir.
- Visual C++ 2008: C derleyicisi olarak kullanacağız. Python 2.7 sürümüne uyumlu olması için 2008 versiyonu olması önemli 3.x sürümlerinde bu yöntemi denemek isteyen olursa, 2010 sürümü kullanması gerekiyor.
Yapacağımız şeyi özetlemek gerekirse, python'un dll dosyasından, birtakım fonksiyonları çağırarak, Python dosyalarını çalıştırabilecek ufak bir program yazacağız. Bu programı ve python dll'sini uygulamamızla birlikte dağıtacağız. Bu yaptığımız şeye, harici uygulamaya python gömmek deniyor.
İlk önce visual'da yeni boş bir proje oluşturup, bu projenin içinde tek bir dosya açacağız. Ben buna main.c
dedim, ama ismin bir önemi yok.
İçeriği şöyle olacak:
Bunu derlemek için, visual'a Python'un header ve kütüphanelerini nerede bulacağını, ayrıca, hangi .lib
dosyasını
kullanacağını belirtmemiz gerekiyor. Gerekli dosya yollarını belirtmek için, Tools > Options > Projects and Solutions >
VC++ Directories bölüme gelmemiz gerekiyor. Show directories for seçenek kutusundan include files'ı seçtikten sonra, C:\Python27\include
yolunu ekliyoruz. Bu yolu, kendinize göre ayarlamayı unutmayın.
Bu pencereyi kapatmadan, library files bölümüne de, C:\Python27\libs
yolunu ekliyoruz ve bu pencereyi kapatıyoruz. Son olarak, projeye sağ tıkladıktan
sonra Properties -> Linker -> Input yolunu izleyip, Additional dependencies kısmına python27.lib
eklemeniz gerekiyor.
Eğer bir sıkıntı yaşanmadı ise, C:\Users\kullanici\Documents\Visual Studio 2008\Projects\projeadi\Debug
içerisinde, bir
exe dosyası oluşturulmuş olmalı. Eğer Debug içerisinde değilse, Release olarak da derlemiş olabilirsiniz, oraları arayın biraz, bulursunuz.
Şimdi yapmamız gereken, python dll'sini, hazırladığımız exe'yi, yazdığımız programı temsil eden main.py dosyasını ve gerekli kütüphaneleri
tek klasör altında toplamak. Bunun için, herhangi yerde bir klasör oluşturun ve oluşturduğunuz exe'yi bunun içine atın. Daha sonra, Python dll'sini
bulmanız gerekiyor. python27.dll
dosyası için C:\Windows\system
ve C:\Windows\SysWOW64
klasörlerini kontrol edin. Oralarda bir yerde bulabilirsiniz. Gerekli
kütüphaneler için ise, ben C:\Python27\Lib
klasörünü olduğu gibi exe'nin bulunduğu yere kopyaladım. Bunların hepsine ihtiyacımız yok, ama
tek tek elle seçmek istemedim. Eğer programınız ihtiyaç duyacaksa, C:\Python27\DLLs
klasörünü de kopyalayın. Bunu da yaptıktan sonra, main.py dosyasını oluşturup,
içine denemelik kodlar yazmanız gerekiyor.
Tüm bunları yaptıktan sonra, Python'u silip, bilgisayarı yeniden başlattım ve exe'ye tıkladığım zaman main.py dosyası çalıştı. Yalnız, çıktıyı görebilmek
için ya exe'nizi komut satırından çalıştırmanız, veya c kodunuzda return
'den önce getchar()
fonksiyonunu çağırmanız gerekiyor.
Böylece, yazdığımız kodları windows üzerinde tıkla-çalıştır haline getirebiliriz. Ayrıca, bu işlemleri bir kez yapmak yeterli, aynı exe dosyasını farklı projeleriniz içerisine kopyalayıp yapıştırarak, onları da tıkla çalıştır haline getirebilirsiniz. Bana göre, eğer çalırsa, bu yöntem windows üzerinde Python kodları dağıtmak için ideal bir yöntem olabilir. Ancak, başka kişilerin de bu yöntemi deneyip, çalıştığını teyit etmesi gerekiyor.