Aplikasi saya terlihat seperti ini:
main.py jendela / __init__.py mainwindow.py ... model/ __init__.py orders.py ... sumber daya / gambar1.png logo.jpg ...
Program dimulai dengan main.py. Adakah cara yang baik untuk membuat aplikasi 'terakhir' darinya? Saya memikirkan sesuatu seperti py2exe / py2app, tetapi tanpa menyalin interpreter / modul python ke dalam aplikasi di mana seseorang hanya memiliki satu yang dapat dieksekusi.
Saya telah melihat distutils, tetapi ini sepertinya menginstal program ke direktori Python, yang tidak biasa pada platform non-linux.
Saat ini saya hanya menyalin seluruh folder sumber ke mesin target dan membuat alias ke main.pyw
di windows. Beberapa ketidaknyamanan:
- Ikon tersebut adalah ikon python default.
- Saya harus membuat alias secara manual.
- Di direktori sumber saya ada banyak file tambahan seperti folder kendali sumber.
- Saya harus mengganti nama
main.py
menjadimain.pyw
manual. - Akan lebih baik jika hanya file `.pyo * yang ada di mesin target. Tidak ada alasan nyata untuk itu, saya hanya tidak suka memiliki file yang tidak perlu.
Bagaimana cara membuat distribusi otomatis yang bagus?
- untuk windows? (Itulah satu-satunya platform yang harus saya dukung saat ini.)
- untuk Mac?
- untuk linux?
Jawaban:
Cara normal mendistribusikan aplikasi Python adalah dengan distutils . Itu dibuat untuk mendistribusikan modul pustaka jenis python, dan aplikasi python, meskipun saya tidak tahu cara kerjanya di Windows. Anda akan di Windows harus menginstal Python secara terpisah jika Anda menggunakan distutils, dalam hal apapun.
Saya mungkin akan merekomendasikan agar Anda mendistribusikannya dengan disutils untuk Linux, dan Py2exe atau yang serupa untuk Windows. Untuk OS X saya tidak tahu. Jika ini adalah aplikasi pengguna akhir, Anda mungkin menginginkan jenis gambar disk, saya tidak tahu bagaimana melakukannya. Tapi baca posting ini untuk informasi lebih lanjut tentang pengalaman pengguna itu. Untuk aplikasi yang dibuat untuk pemrogram Anda mungkin baik-baik saja dengan tipe distutils yang diinstal pada OS X juga.
sumber
dist
dan menyalin semua file yang relevan ke dalamnya ?Saya sangat merekomendasikan Pyinstaller , yang mendukung semua platform utama dengan cukup mulus. Seperti py2exe dan py2app, ini menghasilkan standar yang dapat dieksekusi pada Windows dan bundel aplikasi pada OS X, tetapi memiliki keuntungan juga melakukan pekerjaan yang fantastis untuk menyelesaikan dependensi umum secara otomatis dan menyertakannya tanpa penyesuaian konfigurasi tambahan.
Perhatikan juga bahwa jika Anda menerapkan Python 2.6 ke Windows, Anda harus menerapkan tambalan ini ke batang Pyinstaller.
Anda menyatakan bahwa Anda tidak memerlukan penginstal, tetapi Pengaturan Inno adalah pilihan pengaturan yang mudah digunakan dan cepat untuk platform Windows.
sumber
Hello world
program sederhana membutuhkan ruang 500MB dan waktu inisialisasi 3-5 detik.Fredrik Lundh
squeeze.py
dapat membuat satu file yang tidak berisi interpreter Python, melainkan berisi bytecode. Dengan argumen yang tepat, Anda dapat menyertakan file lain, modul, dll. Di file hasil. Saya berhasil menggunakannya dalam satu proyek. Program yang dihasilkan berjalan di OS X, Linux dan Windows tanpa masalah!PS : Setiap mesin harus memiliki juru bahasa Python yang kompatibel dengan bytecode yang dihasilkan oleh squeeze.py. Anda dapat membuat versi bytecode yang berbeda untuk versi Python yang berbeda, jika perlu (jalankan saja squeeze.py dengan versi Python yang benar).
sumber
Saya pikir itu juga layak untuk menyebutkan PEX (mengingat lebih banyak perhatian yang diterima pertanyaan ini dan lebih sedikit pertanyaan itu sendiri). Menurut uraiannya sendiri :
Saya tersandung saat membaca ikhtisar kemasan untuk python . Mereka memposting foto bagus ini di sana:
Untuk meringkas: Jika Anda mampu mengandalkan python yang diinstal pada mesin target, gunakan PEX untuk menghasilkan »executable« mandiri yang mungkin akan memiliki ukuran file yang lebih kecil daripada yang dapat dieksekusi yang diproduksi oleh PyInstaller, misalnya.
sumber
Saya mungkin salah, tetapi bukankah IronPython memiliki kompiler bawaan untuk Windows?
http://www.ironpython.net
[EDIT]
Cobalah Cx_Freeze, Sejauh ini kompiler .py ke .exe (ditambah beberapa .dlls) terbaik yang pernah saya gunakan.
http://cx-freeze.sourceforge.net/
sumber
Jika Anda mendistribusikan di windows, gunakan penginstal untuk menginstal semua file / interpeter yang relevan apa pun yang diperlukan. Distribusikan setup.exe. Itu cara terbaik di windows. Jika tidak, pengguna akan mengeluh.
sumber
Cara paling mudah * lintas platform untuk mendistribusikan aplikasi desktop python adalah dengan mengandalkan pengelola paket conda lintas platform. Ada beberapa alat yang menggunakannya:
* Yang paling nyaman untuk pengembang. Cukup nyaman bagi pengguna akhir.
sumber