HERHANGİ bir bağımlılık olmadan çalıştırmak için bir Python komut dosyası tek başına yürütülebilir hale nasıl?


707

Bir Python uygulaması oluşturuyorum ve müşterilerimi Python ve modülleri yüklemeye zorlamak istemiyorum.

Peki, bir Python betiğini bağımsız bir yürütülebilir dosya olarak derlemenin bir yolu var mı?


307
Sorunun "Müşterilerimi Python ve modülleri yüklemeye zorlamak istemiyorum" kısmı. İstemcilerin bunu yapamayacağı değil, geliştiricinin bunu yapmasını istemediğini söylüyor. Buradaki noktayı tartışmanın bir anlamı yok, çünkü müşteriler kendileri için SO'yu okumuyorlar. Sadece youtube izlemek için bir Flash geliştirme ortamı ya da sadece Sudoku oynamak için bir C geliştirme ortamı veya Python'da yazılmış Angry Birds sürümünü çalıştırmak için bir Python geliştirme ortamı kurmak istemem. Yeniden dağıtılabilir çalışma zamanları bunun içindir.
Dave

Yanıtlar:


243

Sen kullanabilirsiniz py2exe'yi zaten yanıtladı ve kullanım olarak Cython anahtar dönüştürmek için .pydosyaları .pycgibi, C derlenmiş dosyalar, .dllWindows ve .soortak daha dönmek çok zor, linux .pyove .pycdosyaları (kazanç performansı da ve!)


1
Cevap için teşekkürler. Cython'u düşündüm, ancak derlenmiş yürütülebilir dosyayı çalıştırmak için hala Python'a ihtiyaç duyduğu anlaşılıyor. Sen Cython kullanarak .pyc için komut dosyası derleme demek? (Cython'un böyle bir özelliği olup olmadığını bilmiyordum)
Jeff

9
Yani iki probleminiz var : kapalı kaynak ve de-nops. Kapalı kaynak için , Ctbs içinde Cython kullanarak önemli kodunuzu derleyin . No-deps için py2exe kullanın ve içindeki .pyd (cython compiled) dosyaları ile bir yürütülebilir dosya yapın.
neurino

7
Kütüphaneler hakkında ne yapardınız (numpy, scipy, matplotlib)? Örneğin, istemciler matplotlib'deki ginput () işlevini, yürütülebilir bilgisayardan, bilgisayarlarına yüklemeden nasıl kullanabilirler.
chimpsarehungry

@chimpsarehungry statik bağlantıya ne dersiniz?
Braden En İyi

11
Son sürüm 2008'de görünüyor, bu hala devam ediyor mu?
Zitrax

302

Python programlarını bağımsız yürütülebilir dosyalar olarak paketlemek için PyInstaller'ı kullanabilirsiniz . Windows, Linux ve Mac üzerinde çalışır.

PyInstaller Hızlı Başlangıç

PyInstaller'ı PyPI'den yükleyin:

pip install pyinstaller

Programınızın dizinine gidin ve çalıştırın:

pyinstaller yourprogram.py

Bu, paketi adlı bir alt dizinde oluşturur dist.

Daha ayrıntılı bir izlenim için kılavuza bakınız .


10
Pyinstaller'ın tek bir .exe dosyasına derlenebileceğini belirtmek gerekir. Ayrıca hangi işletim sisteminde çalıştırılırsa, Windows üzerinde çalıştırıldığında bu yürütülebilir dosyayı yani .exe yapar
Richard de Wit

2
@ ItayMoav-Malimovka Python 3'ün desteğinde çalışıyorlar. Bkz. Github.com/pyinstaller/pyinstaller/tree/python3 .
PhoneixS

3
@GeenHenk'in dediği gibi, Windows'ta "derlerseniz" bir exe yapar, Linux'ta Windows (bir exe yap) için derleyemeyeceğinizi veya Windows'ta bir Linux çalıştırılabilir yapamayacağınızı unutmayın. Yalnızca çalıştırdığınız platformun yürütülebilir dosyasını yapabilirsiniz. (Linux'ta bunu kandırmak için şarap kullanabilirsiniz)
PhoneixS

14
'pyinstaller' kullanmak 'py2exe'den çok daha kolaydır. Numpy, pandalar, her şey dahil her bağımlılığı halleder ve size çalışma platformunda tek bir yürütülebilir dosya verir!
aks

12
Tam olarak aradığım şey gibi görünüyor. Ve şimdi Python 3'ü destekliyor! Teşekkürler :)
Daniel Gruszczyk

83

Nuitka'yı araştırmak isteyebilirsiniz . Python kaynak kodunu alır ve C ++ API çağrılarına dönüştürür. Daha sonra yürütülebilir bir ikili dosyaya derler (Linux'ta ELF). Birkaç yıldır piyasada ve çok çeşitli Python versiyonlarını destekliyor.

Kullanırsanız muhtemelen bir performans artışı elde edersiniz. Önerilen.


5
Nuitka harika bir araçtır. Kullanmanıza gerek yok. Sadece bir şeye işaret ediyorum - sadece Linux ile sınırlı değil - platformlar arası - bunu kullanmanın başka bir nedeni.
sjaustirni

5
Nuitka Python 2.6, 2.7, 3.2, 3.3 ve 3.4 üzerinde çalışıyor ve platformlar arası: (Linux, FreeBSD, NetBSD, MacOS X ve Windows (32/64 bit). Diğerleri de çalışabilir. x86_64 (amd64) ve arm. Kutusundan çıkar çıkmaz diğer mimariler de işe yarayabilir.)
Jonathan Hartley

En son 3.6 için desteklenmez .. ve pencerelerde kurmak için bir kabus
Tetora

MacOS High Sierra + Python 3.5.2'de cazibe gibi çalışır. Teşekkür ederim!
Anthony L.

Bu bağımsız bir yürütülebilir dosya oluşturur mu?
dile

31

Python 2.7 kullanarak pencerelerde bağımsız dosyalar oluşturma hakkında bazı yararlı bilgiler derlemek istiyorum.

Py2exe kullandım ve işe yarıyor, ama bazı problemlerim vardı.

Bu son sebep beni PyInstaller http://www.pyinstaller.org/ denememe neden oldu .

Bence çok daha iyi çünkü:

  • Kullanımı daha kolaydır.

Aşağıdaki satırları içeren bir .bat dosyası oluşturmanızı öneririm (pyinstaller.exe dosyası Windows Yolunda olmalıdır):

pyinstaller.exe --onefile MyCode.py

Yani, en azından python 2.7 için, daha iyi ve daha basit bir seçenek PyInstaller olduğunu düşünüyorum.


3
--onefileYürütülebilir hala ile bağlantıya istediği için bayrak, Windows üzerinde taşınabilir hale getirmek için yardımcı olmayacaktır api-ms-win-crt-runtime-l1-1-0.dllyoluyla kurulmalıdır kütüphanede (veya / ve diğerleri) vcredistpaketin. Bu yüzden hala bir bağımlılık var ve çalıştırmadan önce kurulması gerekiyor.
Andry

27

Evet, Python komut dosyalarını bağımsız yürütülebilir dosyaya derlemek mümkündür.

PyInstaller , Python programlarını Windows , Linux , Mac OS X , FreeBSD , Solaris ve AIX altında bağımsız yürütülebilir dosyalara dönüştürmek için kullanılabilir . Önerilen dönüştürücülerden biridir.

py2exe , Python komut dosyalarını yalnızca Windows platformunda yürütülebilir dosyaya dönüştürür.

Cython , hem Python programlama dili hem de genişletilmiş Cython programlama dili için statik bir derleyicidir.


2
Bunun için teşekkürler. Py2exe kullanıyordum ve onunla çalışan simgeleri alamadım. PyInstaller ilk kez çalıştı ve harika görünüyor!
Chud37

Linux ve macOS için Windows'dan bağımsız yürütülebilir dosyalar oluşturabilir miyim? Yoksa VirtualBox'a Linux ve macOS kurmalı mıyım? Dizüstü bilgisayarımda yeterli boş alan yok.
8Observer8


26

Ve üçüncü bir seçenek cx_Freeze, çapraz platform.


1
İşte 2019 cx_FreezeŞubat'ındayız ve 2017'nin sonundan beri pypi'de listelenen bir sürüm yok . Bu proje terk edildi mi?
user9074332


14

Py2exe kullanın .... aşağıdaki kurulum dosyalarını kullanın:

 from distutils.core import setup
 import py2exe

 from distutils.filelist import findall
 import matplotlib

 setup(
       console=['PlotMemInfo.py'],

       options={
                'py2exe': {
                'packages' : ['matplotlib'],
            'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                 'libgobject-2.0-0.dll',
                 'libgdk_pixbuf-2.0-0.dll']
                          }
                },
       data_files = matplotlib.get_py2exe_datafiles()
     )

Bunu yaptım ve bir python27.dll dosyası oluşturdu ve hala gerekli. .Exe dosyasını python27.dll dosyasını tutan klasörden taşıdım ve .exe dosyası artık çalışmıyor.
mjwrazor

Linux ve macOS için böyle bir senaryo gösterebilir misiniz? Linux ve macOS için Windows'tan bağımsız yürütülebilir dosyalar oluşturmak istiyorum.
8Observer8

13

Gibi pyinstaller - özellikle "pencereli" varyant:

pyinstaller --onefile --windowed myscript.py

Bir dist / klasöründe tek bir * .exe dosyası oluşturur.


11

Ayrıca python 2.3 - 2.7 gibi daha iyi geriye dönük uyumluluk için pyinstaller'ı öneriyorum .
için py2exe , sen piton 2.6 olması gerekir


pyinstaller'ın içe aktarma sorunları var. Örneğin: benim durumumda, bu DIR ~ / Belgeler / python101 / ve ex50_pycomp.py & ex50.py bu dir. ex50_pycomp.py ex50.py içe aktarılıyor. Ben exinstal_pycomp.py pyinstaller çalıştırın ve tüm uygun, üretilen dist bakın. İyi değil mi? Dist / ex50_pycomp / içine cd ve çalışır ex50_pycomp çalıştırın. Bu ex50_pycom'u bir sanal makineye koyduğumda, bu içe aktarma hatası diyor ve başka bir linux kutusunda "-bash: ./ex_50_pycom: ikili dosya yürütülemiyor: Exec format error"
driven_spider 18:18

prob1: python2.7 kullanıyordum ama pyinstaller python3 python3 ile konuşuyordu setup.py build python3 setup.py install python3 tüm pkg_resources prob 3 alırsanız: sys_path kullanarak bir sorun haline gelirse bu pyinstaller gibi yol verin - gizli- import = pkg_resources --onefile file.py --path = my_path rw-rw-r-- my_path: python3'un dağıtım klasörü pyinstaller --hidden-import = pkg_resources --onefile file.py --path = / usr / local / lib /python3.5/dist-packages/my_code_lib-0+untagged.8.gd264bd5.dirty-py3.5.egg/my_folder -rw-rw-r--
driven_spider 29:18

8

Python 3.2 komut dosyaları için tek seçenek Cxfreeze'dir. Kaynaklardan oluşturun, aksi takdirde çalışmaz.

Python 2.x için kütüphaneleri de çıktısı CxFreeze aksine, tek bir çalıştırılabilir bir python paketi olabilir gibi pyinstaller öneririz.


7
pyinstaller yourfile.py -F --onefile

Bu, Windows'ta bağımsız bir EXE dosyası oluşturur ÖNEMLİ NOT: Exe dosyası 'dist' adlı bir klasörde oluşturulur

kullanarak pyinstaller'ı kurabilirsiniz pip install PyInstaller

resim açıklamasını buraya girin

resim açıklamasını buraya girin



6

@ Https://wiki.python.org/moin/DistributionUtilities adresinde listelenen dağıtım yardımcı programlarının listesini bulabilirsiniz .

Ben bbfreeze kullanın ve çok iyi çalışıyor (henüz python 3 destek olsa da).


stackoverflow.com/questions/33683133/… bbfreeze çok güzel bir paket kullanıyorum.
user914425

Bağımlılıklarla ilgileniyor ve ilgili py modüllerini kuruyor mu?
Volatil3

@ Volatil3 Evet, tüm bağımlılıklar halledilir. Ana sisteme modül kurulumu için WRT - farklı tür derlemeler vardır. Bbfreeze, her şeyi birden fazla .sodosyaya derleyecek veya .egg dosyalarını doğrudan kopyalayacak ve hepsi tek bir dizinde (veya tek bir dosya olarak) bulunacaktır. Kurulum gerekmez.
Joe

4

Tam olarak python kodunun bir paketi değil, aynı zamanda google'dan da kodu Go'ya aktaran huysuz . Python C api'yi desteklemediğinden, tüm projeler için çalışmayabilir.


4

Pyinstaller kullanarak, yapmak yerine .exe kısayolunu kullanarak daha iyi bir yöntem buldum --onefile. Her neyse, muhtemelen bazı veri dosyaları var ve site tabanlı bir uygulama çalıştırıyorsanız, programınız html, js, css dosyalarına da bağlıdır. Tüm bu dosyaları bir yere taşımanın bir anlamı yok .. bunun yerine çalışma yolunu yukarı hareket ettirirsek.

Exe için bir kısayol yapın, üste taşıyın ve hedef ve başlangıç ​​yollarını belirtildiği gibi ayarlayın, göreli yolların dist \ klasörüne Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\" geçmesini
sağlayın: "GTFS-Manager" olarak yeniden adlandırılan herhangi bir şeye kısayolu yeniden adlandırabilir miyim? - kısayolu tıklayın, sanki dosyayı python çalıştırdım! Bu yaklaşımı şu yaklaşımdan daha iyi buldum --onefile:

  1. Onefile's durumda, win7 OS için eksik olan bir .dll ile ilgili bir sorun var. Birden fazla dosya ile normal derleme ile, böyle bir sorun yok.
  2. Python betiğimin kullandığı tüm dosyalar (bir kasırga web sunucusu dağıtıyor ve orada olması için dosyaların değerinde tam bir web sitesine ihtiyaç duyuyor!) Her yere taşınmasına gerek yok: Sadece kısayolu en üstte oluşturuyorum.
  3. Aslında aynı klasörü ubuntu (run python3 myfile.py) ve windows (kısayolu çift tıklayın) kullanabilirsiniz.
  4. Veri dosyaları vb dahil etmek için .spec dosyasının aşırı karmaşık kesmek ile uğraşmak gerekmez.

Oh, inşa ettikten sonra yapı klasörünü silmeyi unutmayın, boyuttan tasarruf edersiniz.


Merhaba, sadece güncelleniyor .. Ben UPX sıkıştırma ve nihayet --onefile yol gitmeye karar verdi. Bir tane almak zorunda kaldı, çünkü UPX şu anda belirli bir DLL sıkıştırma bir hata var.
Nikhil VJ

3

Ct dönüştürmek için Cython kullanın, derlemek ve gcc ile bağlantı. Bir diğeri, c'deki temel işlevleri yapmak (tersine çevirmek zor olanları) yapmak, derlemek ve derlenmiş kodu içe aktarmak için python boost kullanmak olabilir (ayrıca çok daha hızlı bir kod yürütme elde edersiniz). sonra dağıtmak için belirtilen herhangi bir aracı kullanın.


1

Bana PyRun, https://www.egenix.com/products/python/PyRun/ 'un da bir seçenek olduğu söylendi .


5
Bir çözümün bağlantısı hoş karşılanır, ancak lütfen cevabınızın onsuz faydalı olduğundan emin olun: bağlantınızın çevresine bağlam ekleyin, böylece diğer kullanıcılarınız ne olduğu ve neden orada olduğu hakkında bir fikir sahibi olacak, ardından sayfanın en alakalı bölümünü alıntılayacağız ' hedef sayfanın kullanılamaması durumunda bağlantı kuruluyor. Bir bağlantıdan biraz daha fazlası olan yanıtlar silinebilir.
Petter Friberg

Bu seçenek şu anda Windows'u desteklememektedir.
bob
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.