Saya sedang membangun aplikasi Python dan tidak ingin memaksa klien saya untuk menginstal Python dan modul.
Jadi, apakah ada cara untuk mengkompilasi skrip Python untuk menjadi executable mandiri?
Saya sedang membangun aplikasi Python dan tidak ingin memaksa klien saya untuk menginstal Python dan modul.
Jadi, apakah ada cara untuk mengkompilasi skrip Python untuk menjadi executable mandiri?
Jawaban:
Anda dapat menggunakan py2exe seperti yang sudah dijawab dan menggunakan cython untuk mengonversi .py
file kunci Anda .pyc
, file yang dikompilasi C, seperti .dll
di Windows dan .so
di linux, jauh lebih sulit untuk dikembalikan daripada file biasa .pyo
dan .pyc
(dan juga mendapatkan kinerja!)
Anda dapat menggunakan PyInstaller untuk mengemas program Python sebagai executable mandiri. Ini bekerja pada Windows, Linux, dan Mac.
PyInstaller Quickstart
Instal PyInstaller dari PyPI:
pip install pyinstaller
Buka direktori program Anda dan jalankan:
pyinstaller yourprogram.py
Ini akan menghasilkan bundel dalam subdirektori bernama
dist
.Untuk panduan lebih rinci, lihat manual .
Anda mungkin ingin menyelidiki Nuitka . Dibutuhkan kode sumber python dan mengubahnya menjadi panggilan C ++ API. Kemudian dikompilasi menjadi biner yang dapat dieksekusi (ELF di Linux). Sudah ada selama beberapa tahun sekarang dan mendukung berbagai versi Python.
Anda mungkin juga akan mendapatkan peningkatan kinerja jika Anda menggunakannya. Direkomendasikan.
Saya ingin mengkompilasi beberapa informasi yang berguna tentang membuat file mandiri di windows menggunakan Python 2.7.
Saya telah menggunakan py2exe dan berfungsi, tapi saya punya beberapa masalah.
Itu telah menunjukkan beberapa masalah untuk membuat file tunggal di Windows 64 bit: Menggunakan bundle_files = 1 dengan py2exe tidak berfungsi ;
Anda perlu membuat file setup.py agar bisa berfungsi. http://www.py2exe.org/index.cgi/Tutorial#Step2 ;
Saya memiliki masalah dengan dependensi yang harus Anda selesaikan dengan mengimpor paket dalam file setup;
Saya tidak dapat membuatnya bekerja sama dengan PyQt ..
Alasan terakhir ini membuat saya mencoba PyInstaller http://www.pyinstaller.org/ .
Menurut saya, itu jauh lebih baik karena:
Saya sarankan membuat file .bat dengan baris berikut misalnya (pyinstaller.exe harus di Windows Path):
pyinstaller.exe --onefile MyCode.py
Anda dapat membuat satu file, di antara opsi lain ( https://pyinstaller.readthedocs.io/en/stable/usage.html#options ).
Saya hanya punya satu masalah menggunakan PyInstaller dan paket multiprosesor yang diselesaikan dengan menggunakan resep ini: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing .
Jadi, saya pikir, setidaknya untuk python 2.7, pilihan yang lebih baik dan lebih sederhana adalah PyInstaller.
--onefile
bendera tidak akan membantu Anda untuk membuatnya portabel di Windows, karena masih dieksekusi ingin link dengan api-ms-win-crt-runtime-l1-1-0.dll
perpustakaan (atau / dan lain-lain) yang harus diinstal melalui vcredist
paket. Jadi ketergantungan masih ada dan harus diinstal sebelum dijalankan.
Ya, adalah mungkin untuk mengkompilasi skrip Python menjadi executable mandiri.
PyInstaller dapat digunakan untuk mengubah program Python menjadi executable yang berdiri sendiri, di bawah Windows , Linux , Mac OS X , FreeBSD , Solaris dan AIX . Ini adalah salah satu konverter yang direkomendasikan.
py2exe mengubah skrip Python menjadi hanya dapat dieksekusi di platform Windows.
Cython adalah kompiler statis untuk bahasa pemrograman Python dan bahasa pemrograman Cython yang diperluas.
Dan opsi ketiga adalah cx_Freeze
, yaitu cross-platform.
cx_Freeze
rilis terdaftar di pypi sejak akhir 2017. Apakah proyek ini ditinggalkan?
Anda mungkin menyukai py2exe . Anda juga akan menemukan info di sana untuk melakukannya di linux
Gunakan py2exe .... gunakan di bawah ini mengatur file:
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()
)
Saya suka pyinstaller - terutama varian "berjendela":
pyinstaller --onefile --windowed myscript.py
Ini akan membuat satu file * .exe tunggal di dist / folder.
Saya juga merekomendasikan pyinstaller
untuk kompatibilitas yang lebih baik seperti python 2.3 - 2.7.
untuk py2exe , Anda harus memiliki python 2.6
Untuk skrip Python 3.2 satu-satunya pilihan adalah Cxfreeze. Bangun dari sumber kalau tidak tidak akan berhasil.
Untuk python 2.x saya sarankan pyinstaller karena dapat mengemas program python dalam satu executable, tidak seperti CxFreeze yang juga output library.
py2exe akan membuat file exe yang Anda inginkan, tetapi Anda harus memiliki versi MSVCR90.dll yang sama pada mesin Anda akan menggunakan exe baru Anda. Lihat http://www.py2exe.org/index.cgi/Tutorial untuk info lebih lanjut.
Anda dapat menemukan daftar utilitas distribusi yang terdaftar di @ https://wiki.python.org/moin/DistributionUtilities .
Saya menggunakan bbfreeze dan telah bekerja sangat baik (belum memiliki dukungan python 3).
.so
file, atau menyalin file .egg secara langsung dan semuanya akan ada dalam satu direktori (atau sebagai file tunggal). Tidak diperlukan instalasi.
Tidak persis pengemasan kode python, tetapi sekarang ada juga pemarah dari google, yang mengubah kode menjadi Go. Itu tidak mendukung python C api, jadi itu mungkin tidak bekerja untuk semua proyek.
Menggunakan pyinstaller, saya menemukan metode yang lebih baik menggunakan cara pintas ke .exe daripada membuat --onefile
. Bagaimanapun mungkin ada beberapa file data di sekitarnya dan jika Anda menjalankan aplikasi berbasis situs maka program Anda tergantung pada html, js, file css juga. Tidak ada gunanya memindahkan semua file ini di suatu tempat .. sebaliknya bagaimana jika kita memindahkan jalur kerja ke atas.
Buat pintasan ke exe, pindahkan di atas dan atur target dan jalur start-in seperti yang ditentukan, agar jalur relatif menuju ke dist \ folder:
Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe
Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"
Dapat mengganti nama pintasan ke apa pun sehingga mengubah nama menjadi "GTFS-Manager"
Sekarang ketika saya menggandakan -Klik pintasan, seolah-olah saya python-lari file! Saya menemukan pendekatan ini lebih baik daripada yang --onefile
sebagai:
Oh, ingatlah untuk menghapus folder build setelah membangun, akan menghemat ukuran.
Gunakan Cython untuk mengonversi ke c, kompilasi, dan tautkan dengan gcc. Yang lain bisa, buat fungsi inti di c (yang ingin Anda susah untuk balikkan), kompilasi dan gunakan dorongan python untuk mengimpor kode yang dikompilasi (ditambah Anda mendapatkan eksekusi kode yang jauh lebih cepat). kemudian gunakan alat apa pun yang disebutkan untuk mendistribusikan.
Saya diberitahu bahwa PyRun, https://www.egenix.com/products/python/PyRun/ , juga merupakan opsi.