Python projemizi tamamladık ve bu projeden tek bir yürütülebilir dosya oluşturmak istiyoruz. Bu sayeded bir kullanıcı Python’un yüklenmesine gerek kalmadan projemizi indirip çalıştırabilmeli. Projemizi bir paket olarak dağıtıyor olsaydık, pip, wheel ve PyPI’yi kullanabilirdik, ancak bu kullanıcının Python’a sahip olmasını ve paketleri nasıl kurabileceğini bilmesini gerektirecekti. Python projesinden bağımsız çalıştırılabilir bir dosya oluşturmak için ne yapabiliriz?
Yaygın olarak kullanılan yöntemlere bakalım (Temmuz 2021 itibarıyla aktif olarak sürdürülen projeler)
Aksi belirtilmedikçe, aşağıda listelenen tüm programlar özellikle çalıştığı işletim sistemi için bir exe oluşturur. Örneğin, Pyinstaller, Windows’ta çalıştırmak bir Windows exe üretecektir, ancak Pyinstaller’ı Linux’ta çalıştırmak bir Linux exe üretecektir. Birden fazla işletim sistemi için bir exe üretmek istiyorsanız, sanal makineler veya Wine gibi bir şey kullanmanız gerekir.
Aşağıdaki programların tümü benzer şekilde çalışır – Python ile kodunuzu bir araya getirerek bunları etkili bir şekilde birleştirir ve yürütülebilir bir dosya üretirler.
PyInstaller:
Web sitesi || Repo || PyPi
Windows, Mac ve Linux’ta Python 3.5 – 3.9’u destekler.
cx_Freeze:
Web sitesi || Repo || PyPi
Windows, Mac ve Linux’ta Python 3.6 – 3.9’u destekler.
py2exe:
Web sitesi || Repo || PyPi
Yalnızca Windows’ta Python 3.6 – 3.9’u destekler.
py2app:
Web sitesi || Repo || PyPi
Yalnızca Mac’te Python 2.7 (?) ve Python 3’i (?) destekler. Desteklenen Python sürümlerinin tam aralığı şu anda belgelenmemiştir.
Tabii ki bu işi yapmanın tek yolu yukarıdakiler değil:
pynsist:
Web sitesi || Repo || PyPi
Pynsist, programınız için python’u kodunuzla karıştırmak yerine doğrudan kullanıcının bilgisayarına yükler ve Python komut dosyanıza bağlanan kısayollar oluşturarak bir Windows yükleyicisi oluşturur.
Pynsist aracının kendisinin çalışması için Python 3.5+ gerekir, ancak Python’un herhangi bir sürümünü programınızla birlikte çalıştırmayı destekler.
Pynsist yalnızca Windows yükleyicileri oluşturur, ancak Windows, Mac ve Linux’tan da çalıştırılabilir. Daha fazla ayrıntı için SSS bölümüne bakın.
Nuitka:
Web sitesi || Repo (Github aynası) || PyPi
Nuitka, python kodunuzu tam anlamıyla derleyecek ve kodunuzu hızlandırmak için bir exe (python içeren diğer projelerin aksine) üretecektir. Yan etki olarak, dağıtabileceğiniz kullanışlı bir exe de elde edersiniz. Sisteminizde kullanılabilir bir C++ derleyicisi olması gerektiğini unutmayın.
Windows, Mac ve Linux’ta Python 2.6 – 2.7 ve Python 3.3 – 3.9’u destekler.
cython:
Web sitesi || Repo || PyPi
Cython, Python derleyicisi olması nedeniyle Nuitka’ya benzer. Ancak, kodunuzu doğrudan derlemek yerine C’ye derler. Daha sonra bu C kodunu alabilir ve kodunuzu bir exe’ye dönüştürebilirsiniz. Sisteminizde bir C derleyicisi olması gerekir.
Windows, Mac ve Linux’ta Python 2.6 – 2.7 ve Python 3.3 – 3.9’u destekler.
Kişisel tercihim PyInstaller’ı kullanmak. Kodunuzu hızlı bir şekilde ayağa kaldırabilir hatta koşturabilirsiniz. Ayrıca, numpy veya pygame gibi çeşitli popüler kütüphanelerle de güzel bir şekilde çalışmak için tasarlanmıştır. Çeşitli işletim sistemleri ve Python sürümleriyle de mükemmel uyumluluğa sahiptir.
Ancak, çok fazla zorluk olmadan cx_Freeze kullanarak çeşitli exe dosyaları da başarıyla oluşturdum, bu yüzden bu programı denemeyi de düşünebilirsiniz.
Henüz pynist, Nuitka veya Cython’u kapsamlı bir şekilde deneme fırsatım olmadı, ancak oldukça ilginç ve yenilikçi çözümler gibi görünüyorlar. İlk program grubunu kullanarak sorun yaşarsanız, bu üçünden birini denemeniz faydalı olabilir. Pyinstaller/cx_freeze tarzı programlardan temelde farklı çalıştıklarından, ilk grubun başarısız olduğu garip durumlarında başarılı olabilirler.
Özellikle, pynist’in kodunuzu dağıtma sorununu aşmada iyi bir yol olduğunu düşünüyorum: Mac’ler ve Linux zaten Python için yerel desteğe sahip ve Python’u Windows’a yüklemek gerçekten en temiz çözüm olabilir. (Dezavantajı, artık Python ve diğer kitaplıklarının birden fazla sürümünü hedefleme konusunda endişelenmeniz gerektiğidir).
Nuitka ve Cython (sınırlı deneyimimde) oldukça iyi çalışıyor gibi görünüyor. Kapsamlı bir şekilde test etmediğimi de söyleyerek ana gözlemim, exe üretmek için çok uzun bir iş gibi görünüyor.
Tüm bunları söyledikten sonra, Python programınızı yürütülebilir bir öğeye dönüştürmek, kodunuzu dağıtmanın tek yolu olmadığını hatırlatalım. Diğer seçeneklerin nasıl kullanılabilir olduğu hakkında daha fazla bilgi edinmek için aşağıdaki bağlantılara bakın: