Buat satu yang dapat dieksekusi dari proyek Python

87

Saya ingin membuat satu yang dapat dieksekusi dari proyek Python saya. Seorang pengguna harus dapat mengunduh dan menjalankannya tanpa perlu menginstal Python. Jika saya baru saja mendistribusikan paket, saya dapat menggunakan pip, wheel, dan PyPI untuk membangun dan mendistribusikannya, tetapi ini mengharuskan pengguna memiliki Python dan tahu cara menginstal paket. Apa yang dapat saya gunakan untuk membangun executable mandiri dari proyek Python?

ShadowFlame
sumber
Saya masih menulis dalam 2.x (2.7.2 tepatnya), tetapi mungkin melihat kebutuhan untuk mentransfer ke 3.x (jika modul dan semacamnya kompatibel) dan akan membutuhkan solusi juga.
ShadowFlame
Perhatikan bahwa pengemasan akan sangat mempersulit diagnosis masalah. Tidak hanya Anda (atau pdb) tidak memiliki akses mudah ke file yang sedang dieksekusi, py2exe(tidak tahu tentang yang lain) tidak menyertakan .pyfile sehingga Anda tidak akan melihat baris sumber di pelacakan tumpukan.
ivan_pozdeev
Hanya sebagai hal yang menarik, saya mulai menggunakan pyinstaller
ShadowFlame

Jawaban:

115

Berikut ini beberapa yang umum. Kecuali secara eksplisit disebutkan, semua proyek yang tercantum di bawah ini secara aktif dipertahankan pada pengeditan terakhir saya (Januari 2020).

Saya juga menyertakan tautan ke situs web, repo, dan daftar PyPi masing-masing jika Anda ingin memeriksa sendiri seberapa sering mereka diperbarui.

Selain itu, kecuali dinyatakan lain, semua program yang tercantum di bawah ini akan menghasilkan exe khusus untuk sistem operasi yang dijalankan. Jadi misalnya, menjalankan Pyinstaller di Windows akan menghasilkan exe Windows, tetapi menjalankan Pyinstaller di Linux akan menghasilkan exe Linux. Jika Anda ingin membuat exe untuk beberapa sistem operasi, Anda harus menggunakan mesin virtual atau menggunakan sesuatu seperti Wine .


Program-program berikut semuanya bekerja dengan cara yang sama - mereka menggabungkan Python dan program Anda, menggabungkannya secara efektif untuk menghasilkan file yang dapat dieksekusi.

  • PyInstaller:

    • Tautan : Situs web || Repo || PyPi
    • Mendukung : Python 2.7 dan Python 3.4 - 3.7 di Windows, Mac, dan Linux.
  • cx_Freeze:

    • Tautan: Situs web || Repo || PyPi
    • Mendukung: Python 2.7 dan 3.5 - 3.8 di Windows, Mac, dan Linux.
  • py2app:

    • Tautan: Situs web || Repo || PyPi
    • Mendukung: Python 2.7 dan 3.3 (?) - 3.7 (?) Di Mac saja.
    • Catatan: Pada pengeditan terakhir saya, saya tidak dapat menentukan secara pasti kisaran yang tepat dari versi Python yang didukung oleh pyapp. Rilis terbaru menyebutkan mendukung Python 3.7.

Catatan: versi sebelumnya dari posting ini termasuk artikel untuk py2exe ( repo ) dan bbfreeze ( repo ). Kedua proyek telah dihapus dari daftar ini: mereka telah melihat sedikit atau tidak ada aktivitas selama beberapa tahun dan tampaknya sama sekali tidak terawat. Lihat riwayat edit untuk artikel lama.


Tentu saja, itu bukan satu-satunya cara untuk melakukan sesuatu:

  • pynsist:

    • Tautan: Situs web || Repo || PyPi
    • Mendukung: Semua versi Python? Catatan - hanya akan membuat penginstal Windows .
    • Catatan lain: Pynsist tampaknya mendukung penggabungan semua versi Python sembarang dengan aplikasi Anda. Namun, alat itu sendiri membutuhkan Python 3.5+ untuk dijalankan.

      Pynsist akan membuat penginstal Windows untuk program Anda yang akan langsung menginstal Python di komputer pengguna alih-alih memaketkannya dengan kode Anda dan membuat pintasan yang tertaut ke skrip Python Anda. Meskipun program ini hanya menghasilkan penginstal Windows, tampaknya Anda masih dapat menjalankan Pynsist di komputer Mac dan Linux.

  • Nuitka:

    • Tautan: Situs web || Repo (cermin Github) || PyPi
    • Mendukung: Python 2.6 - 2.7 dan Python 3.3 - 3.7 di Windows, Mac, dan Linux.
    • Catatan lain: Nuitka benar-benar akan mengkompilasi kode Python Anda dan menghasilkan exe (sebagai lawan dari proyek lain, yang hanya menyertakan Python) untuk mencoba dan mempercepat kode Anda. Sebagai efek samping, Anda juga akan mendapatkan exe praktis yang dapat didistribusikan. Perhatikan bahwa Anda perlu memiliki kompiler C ++ yang tersedia di sistem Anda.
  • cython:

    • Tautan: Situs web || Repo || PyPi
    • Mendukung: Python 2.6 - 2.7 dan Python 3.2 - 3.8 di Windows, Mac, dan Linux.
    • Catatan lain: Cython mirip dengan Nuitka karena merupakan kompiler Python. Namun, alih-alih langsung mengkompilasi kode Anda, itu akan mengkompilasinya ke C. Anda kemudian dapat mengambil kode C itu dan mengubah kode Anda menjadi exe . Anda harus memiliki kompiler C yang tersedia di sistem Anda.

Preferensi pribadi saya adalah menggunakan PyInstaller karena ini yang paling mudah bagi saya untuk memulai dan menjalankannya, dirancang untuk bekerja dengan baik dengan berbagai pustaka populer seperti numpy atau pygame, dan memiliki kompatibilitas yang baik dengan berbagai OS dan versi Python.

Namun, saya juga berhasil membuat berbagai exe menggunakan cx_Freeze tanpa terlalu banyak kesulitan, jadi Anda juga harus mempertimbangkan untuk mencoba program itu.

Saya belum sempat mencoba pynist, Nuitka, atau Cython secara ekstensif, tetapi sepertinya solusi yang cukup menarik dan inovatif. Jika Anda mengalami masalah saat menggunakan kelompok program pertama, mungkin ada baiknya untuk mencoba salah satu dari ketiganya. Karena mereka bekerja secara fundamental berbeda dari program bergaya Pyinstaller / cx_freeze, mereka mungkin berhasil dalam kasus-kasus tepi ganjil di mana grup pertama gagal.

Secara khusus, saya pikir pynist adalah cara yang baik untuk menghindari seluruh masalah pendistribusian kode Anda sama sekali: Mac dan Linux sudah memiliki dukungan asli untuk Python, dan hanya menginstal Python di Windows mungkin benar-benar solusi terbersih. (Kelemahannya sekarang adalah Anda perlu khawatir tentang menargetkan beberapa versi pustaka pemasangan Python +).

Nuitka dan Cython (dalam pengalaman saya yang terbatas) tampaknya bekerja dengan cukup baik. Sekali lagi, saya sendiri belum mengujinya secara ekstensif, jadi pengamatan utama saya adalah bahwa mereka tampaknya membutuhkan waktu lebih lama untuk menghasilkan exe daripada program gaya "freeze".


Semua ini dikatakan, mengubah program Python Anda menjadi yang dapat dieksekusi bukanlah satu-satunya cara untuk mendistribusikan kode Anda. Untuk mempelajari lebih lanjut tentang opsi lain yang tersedia, lihat tautan berikut ini:

Michael0x2a
sumber
1
Perhatikan bahwa Anda juga perlu menyertakan di dalam bundel Anda Microsoft C ++ Redistributables (alias msvcrxx.dll, di mana xxnomor versi) untuk menjalankan .exe (atau meminta pengguna untuk menginstalnya sendiri). Ini diperlukan karena Python dibuat di Windows menggunakan Visual Studio.
keras
Jadi sepertinya tidak ada IDE python (pycharm atau pydev - eclipse pluggin) yang belum memasukkan fungsionalitas compile-to-single-executable ke dalam IDE itu sendiri. Apakah itu benar? :-)
Nelda.techspiress
Jika Anda peduli tentang menjaga keamanan kode sumber Anda, mungkin Cython adalah pilihan terbaik karena mengkompilasi kode C. Program-program yang menggunakan teknik pembekuan umumnya dapat dengan mudah didekompilasi.
Martín De la Fuente
PyInstaller terdaftar di atas sebagai pendukung Python 3.7. Itu tidak benar menurut pengalaman saya dan menurut deskripsi di pyinstaller.org, yang menyatakan "PyInstaller bekerja dengan Python 2.7 dan 3.3—3.6".
Tom
1
@Tom - Setelah melakukan penggalian lebih lanjut, tampaknya meskipun pyinstaller sendiri mendukung Python 3.7, mereka belum secara resmi merilis versi baru dengan dukungan 3.7. (Misalnya, repo github mereka menyatakan bahwa mereka mendukung Python 3.7 +, mereka tampaknya tidak memiliki masalah terbuka terkait 3.7, tetapi versi terbaru pyinstaller di PyPi adalah dari Des 2017). Jadi jika Anda membutuhkan dukungan 3.7, Anda dapat mencoba membangun + menginstal pyinstaller langsung dari sumber, atau menunggu hingga rilis berikutnya. (Atau gunakan program lain, tentu saja)
Michael0x2a
10

pyinstaller masih dalam pengembangan aktif. Anda dapat melihat perubahan terbaru di GitHub.

Ini memiliki dukungan untuk ketiga platform utama:

  • Windows (32-bit dan 64-bit)
  • Linux (32-bit dan 64-bit)
  • Mac OS X (32-bit dan 64-bit)

dan mendukung Python versi 2.6 dan 2.7. Itu tidak mendukung Python 3, tetapi ada cabang Python 3 eksperimental .

Memperbarui

Pada versi 3.2.1 ini mendukung Python 2.7, 3.3-3.5

jterrace
sumber
2

Penggunaan pip install auto-py-to-exeyang lebih baik yang menyediakan UI cantik dengan semua opsi yang diperlukan untuk membuat file yang dapat dieksekusi.

Setelah menginstal cukup ketik auto-py-to-exeterminal atau command prompt Anda.

Otomatis-py-to-exe

Ratnesh Kushwaha
sumber
terima kasih telah membalas utas setua ini. Tampaknya menjadi penemuan yang luar biasa, dan benar-benar menyederhanakan pekerjaan saat menyiapkan, serta menyediakan perintah yang sebenarnya digunakan: D
ShadowFlame