Bir Python projesinden tek bir yürütülebilir dosya oluşturun


87

Python projemden tek bir yürütülebilir dosya oluşturmak istiyorum. Bir kullanıcı, Python kurulmasına gerek kalmadan onu indirip çalıştırabilmelidir. Sadece bir paketi dağıtıyor olsaydım, onu oluşturmak ve dağıtmak için pip, wheel ve PyPI kullanabilirdim, ancak bu, kullanıcının Python'a sahip olmasını ve paketleri nasıl kuracağını bilmesini gerektirir. Bir Python projesinden bağımsız bir yürütülebilir dosya oluşturmak için ne kullanabilirim?


Hala 2.x'te yazıyorum (tam olarak 2.7.2), ancak 3.x'e aktarma ihtiyacını görebilir (modüller ve benzerleri uyumluysa) ve o zaman da bir çözüme ihtiyaç duyabilirim.
Shadowflame

Paketlemenin sorun teşhisini büyük ölçüde karmaşıklaştıracağını unutmayın. Yalnızca siz (veya pdb) çalıştırılan dosyalara kolay erişiminiz olmaz, py2exe(diğerleri hakkında bilmiyorsunuz) .pydosyaları içermez, böylece yığın izlemelerinde kaynak satırlarını görmezsiniz.
ivan_pozdeev

Sadece ilgi çekici bir nokta olarak, pyinstaller
ShadowFlame

Yanıtlar:


115

İşte bazı yaygın olanlar. Açıkça belirtilmedikçe, aşağıda listelenen tüm projeler son düzenlememden (Ocak 2020) itibaren aktif olarak sürdürülmektedir.

Ayrıca, ne sıklıkta güncellendiğini kendiniz kontrol etmek istemeniz durumunda, ilgili web sitelerine, depolarına ve PyPi listelerine bağlantılar da ekledim.

Ayrıca, aksi belirtilmedikçe, aşağıda listelenen tüm programlar, özellikle içinde çalıştığı işletim sistemi için bir exe üretecektir. Dolayısıyla, örneğin, Windows'ta Pyinstaller'ı çalıştırmak bir Windows exe üretecek, ancak Linux'ta Pyinstaller çalıştırmak bir Linux exe üretecektir. Birden çok işletim sistemi için bir exe üretmek istiyorsanız, sanal makineleri kullanmayı veya Wine gibi bir şeyi kullanmayı düşünmeniz gerekir .


Aşağıdaki programların tümü benzer şekilde çalışır - Python ve programınızı bir araya toplarlar ve bunları bir yürütülebilir dosya oluşturmak için etkili bir şekilde birleştirirler.

  • PyInstaller:

    • Bağlantılar : Web Sitesi || Repo || PyPi
    • Destekler : Windows, Mac ve Linux'ta Python 2.7 ve Python 3.4 - 3.7.
  • cx_Freeze:

    • Bağlantılar: Web Sitesi || Repo || PyPi
    • Destekler: Windows, Mac ve Linux'ta Python 2.7 ve 3.5 - 3.8.
  • py2app:

    • Bağlantılar: Web Sitesi || Repo || PyPi
    • Destekler: Yalnızca Mac'te Python 2.7 ve 3.3 (?) - 3.7 (?).
    • Not: Son düzenlememden itibaren pyapp tarafından desteklenen Python sürümlerinin tam aralığını kesin olarak belirleyemedim. En son sürüm, Python 3.7'yi desteklediğinden bahsediyor.

Not: Bu yazının önceki sürümleri py2exe ( repo ) ve bbfreeze ( repo ) için yazılan yazıları içeriyordu . Her iki proje de bu listeden çıkarıldı: Birkaç yıldır çok az veya hiç aktivite görmediler ve tamamen bakılmamış gibi görünüyorlar. Eski yazılar için düzenleme geçmişine bakın.


Elbette, işleri yapmanın tek yolu bu değil:

  • pynsist:

    • Bağlantılar: Web Sitesi || Repo || PyPi
    • Destekler: Tüm Python sürümleri? Not - yalnızca Windows yükleyicileri oluşturacaktır .
    • Diğer notlar: Pynsist, herhangi bir rastgele Python sürümünü uygulamanızla birlikte paketlemeyi destekliyor gibi görünüyor. Ancak, aracın çalışması için Python 3.5+ gerekir.

      Pynsist, programınız için Python'u kodunuzla paketlemek yerine doğrudan kullanıcının bilgisayarına yükleyecek ve Python betiğinize bağlanan kısayollar oluşturacak bir Windows yükleyici oluşturacaktır. Bu program yalnızca Windows yükleyicileri oluştursa da , Pynsist'i Mac ve Linux bilgisayarlarda hala çalıştırabileceğiniz görülüyor .

  • Nuitka:

    • Bağlantılar: Web Sitesi || Repo (Github aynası) || PyPi
    • Destekler: Windows, Mac ve Linux'ta Python 2.6 - 2.7 ve Python 3.3 - 3.7.
    • Diğer notlar: Nuitka, kodunuzu denemek ve hızlandırmak için kelimenin tam anlamıyla Python kodunuzu derleyecek ve bir exe (sadece Python içeren diğer projelerin aksine) üretecektir. Bir yan etki olarak, dağıtabileceğiniz kullanışlı bir exe de alacaksınız. Sisteminizde bir C ++ derleyicisine sahip olmanız gerektiğini unutmayın .
  • cython:

    • Bağlantılar: Web Sitesi || Repo || PyPi
    • Destekler: Windows, Mac ve Linux'ta Python 2.6 - 2.7 ve Python 3.2 - 3.8.
    • Diğer notlar: Cython, bir Python derleyicisi olması açısından Nuitka'ya benzer. Ancak, kodunuzu doğrudan derlemek yerine C'ye derler. Daha sonra bu C kodunu alıp kodunuzu bir exe'ye dönüştürebilirsiniz . Sisteminizde bir C derleyicisine ihtiyacınız olacak.

Kişisel tercihim PyInstaller'ı kullanmaktır, çünkü benim için en kolay kurulum ve çalıştırma buydu, numpy veya pygame gibi çeşitli popüler kütüphanelerle güzel bir şekilde çalışmak üzere tasarlandı ve çeşitli işletim sistemleri ve Python sürümleriyle mükemmel bir uyumluluğa sahip.

Bununla birlikte, cx_Freeze kullanarak çok fazla zorluk çekmeden başarılı bir şekilde çeşitli exes oluşturdum, bu yüzden bu programı denemeyi de düşünmelisiniz.

Henüz pynist, Nuitka veya Cython'u kapsamlı bir şekilde deneme şansım olmadı, ancak oldukça ilginç ve yenilikçi çözümler gibi görünüyorlar. İlk program grubunu kullanırken sorun yaşarsanız, bu üç programdan birini denemeniz faydalı olabilir. Temelde Pyinstaller / cx_freeze tarzı programlardan farklı çalıştıkları için, ilk grubun başarısız olduğu garip uç durumlarda başarılı olabilirler.

Özellikle, pynist'in kodunuzu tamamen dağıtmanın tüm sorununu atlatmanın iyi bir yolu olduğunu düşünüyorum: Mac'ler ve Linux zaten Python için yerel desteğe sahiptir ve Windows'a yalnızca Python'u yüklemek gerçekten en temiz çözüm olabilir. (Bunun dezavantajı, artık Python + yükleme kitaplıklarının birden çok sürümünü hedefleme konusunda endişelenmeniz gerektiğidir).

Nuitka ve Cython (benim sınırlı tecrübeme göre) oldukça iyi çalışıyor gibi görünüyor. Yine, onları kapsamlı bir şekilde kendim test etmedim ve bu yüzden ana gözlemim, bir exe üretmenin "dondurma" tarzı programlardan çok daha uzun sürdüğü.


Bütün bunlar söyleniyor, Python programınızı bir yürütülebilir dosyaya dönüştürmek, kodunuzu dağıtmanın tek yolu olmayabilir. Diğer hangi seçeneklerin mevcut olduğu hakkında daha fazla bilgi edinmek için aşağıdaki bağlantılara bakın:


1
Ayrıca , .exe'yi çalıştırmak (veya kullanıcılardan kendi başlarına yüklemelerini istemek) için paketinizin içine Microsoft C ++ Yeniden Dağıtılabilir Öğelerini (diğer bir deyişle msvcrxx.dll, xxsürüm numarası burada ) eklemeniz gerektiğini unutmayın . Python, Visual Studio kullanılarak Windows üzerinde oluşturulduğu için bu gereklidir.
gaborous

Öyleyse, python IDE'lerinden hiçbiri (pycharm veya pydev - eclipse pluggin) henüz derleme-tek çalıştırılabilir işlevselliği IDE'nin kendisine dahil etmemiş gibi görünüyor. Bu doğru mu? :-)
Nelda.techspiress

Kaynak kodunuzu güvende tutmayı önemsiyorsanız, muhtemelen Cython en iyi seçimdir çünkü C kodunu derler. Dondurma tekniğini kullanan programlar genellikle kolaylıkla derlenebilmektedir.
Martín De la Fuente

PyInstaller, Python 3.7'yi desteklediği için yukarıda listelenmiştir. Bu, deneyimlerime ve pyinstaller.org'daki "PyInstaller Python 2.7 ve 3.3—3.6 ile çalışır" ifadesine göre doğru değildir.
Tom

1
@Tom - Biraz daha araştırma yaptıktan sonra, görünen o ki, pyinstaller kendi başına Python 3.7'yi desteklerken, 3.7 destekli yeni bir sürümü resmi olarak yayınlamadılar. (Örneğin, github depoları Python 3.7 + 'yı desteklediklerini belirtiyor, 3.7 ile ilgili açık sorunları kalmamış gibi görünüyor, ancak PyPi'deki en son pyinstaller sürümü Aralık 2017'den itibaren) Yani 3.7 desteğine ihtiyacınız varsa, pyinstaller'ı doğrudan kaynaktan oluşturmayı + yüklemeyi deneyebilir veya bir sonraki sürüme kadar bekleyebilirsiniz. (Veya başka bir program kullanın)
Michael0x2a

10

pyinstaller hala aktif geliştirme aşamasındadır. GitHub'da en son değişiklikleri görebilirsiniz .

Üç ana platformun tümü için destek vardır:

  • Windows (32 bit ve 64 bit)
  • Linux (32 bit ve 64 bit)
  • Mac OS X (32 bit ve 64 bit)

ve Python 2.6 ve 2.7 sürümlerini destekler. Python 3'ü desteklemiyor, ancak deneysel bir Python 3 dalı var .

Güncelleme

3.2.1 sürümünden itibaren Python 2.7, 3.3-3.5'i destekler


2

pip install auto-py-to-exeBir yürütülebilir dosya oluşturmak için gereken tüm seçeneklerle güzel bir kullanıcı arayüzü sağlayan daha iyi kullanım .

Kurduktan sonra sadece auto-py-to-exeterminalinizi veya komut isteminizi yazın.

Auto-py-to-exe


Bu kadar eski bir ileti dizisine hala yanıt verdiğiniz için teşekkür ederiz. İnanılmaz bir keşif gibi görünüyor ve kurulum sırasında çalışmayı gerçekten basitleştiriyor ve gerçek kullanılan komutu sağlıyor: D
ShadowFlame
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.