Saya ingin menempatkan program python di GitHub dan meminta orang lain mengunduh dan menjalankannya di komputer mereka dengan berbagai macam sistem operasi. Saya relatif baru untuk python tetapi telah menggunakannya cukup untuk memperhatikan bahwa mendapatkan berbagai versi dari semua modul yang disertakan untuk bekerja bersama bisa bermasalah. Saya baru saja menemukan penggunaan requirements.txt
(dihasilkan dengan pipreqs
dan digunakan dengan perintah pip install -r /path/to/requirements.txt
) tetapi sangat terkejut melihat bahwa requirements.txt
tidak benar-benar menyatakan versi python apa yang sedang digunakan jadi jelas itu bukan solusi lengkap sendiri. Jadi pertanyaan saya adalah: set spesifikasi / file / sesuatu-apa yang diperlukan untuk memastikan bahwa seseorang yang mengunduh proyek saya benar-benar dapat menjalankannya dengan masalah sesedikit mungkin.
EDIT: Rencana saya adalah untuk dipandu oleh jawaban mana saja yang paling banyak mendapat dukungan. Namun sejauh ini, setelah 4 jawaban dan 127 pandangan, tidak ada satu jawaban pun yang memiliki satu suara positif. Jika beberapa jawaban tidak baik, akan berguna untuk melihat beberapa komentar mengapa mereka tidak baik.
sumber
sys
atauos
atau jenis fungsi subproses atau lebih matematis / analitik? Yang pertama dapat berubah dengan setiap versi Python dan nantinya bisa menjadi versi yang cukup independen. Apa perpustakaan bergantung? numpy dan panda melakukan pekerjaan yang luar biasa di seluruh platform sehingga Anda bisa memastikan Anda memiliki versi min. Apa versi utama dari Python? Perbedaan antara Python 2.x dan 3.x dengan pustaka dependen menjadi lebih sulit. Jika Anda menulis kode yang baik menargetkan rilis besar umum yang merupakan awal yang baik.Jawaban:
Sudahkah Anda mempertimbangkan untuk menyiapkan
setup.py
file? Ini adalah cara praktis untuk menggabungkan semua ... pengaturan Anda dengan baik ke dalam satu lokasi. Jadi yang harus dilakukan pengguna Anda adalah A) mengkloning repo Anda dan B) jalankanpip install .
untuk menjalankansetup.py
Ada banyak diskusi tentang hal ini.
Serta contoh pegangan yang ditulis oleh pria permintaan.
Ini harus mencakup sebagian besar kasus penggunaan. Sekarang jika Anda ingin membuatnya benar-benar dapat didistribusikan maka Anda ingin melihatnya pengaturannya di PyPi , pusat distribusi resmi.
Lebih dari itu jika Anda bertanya bagaimana membuat program "OS independen" tidak ada satu ukuran yang cocok untuk semua. Tergantung pada apa yang Anda lakukan dengan kode Anda. Membutuhkan penelitian tentang bagaimana kode khusus Anda berinteraksi dengan OS tersebut, dll.
sumber
Ada banyak, banyak, banyak, banyak, banyak, banyak, banyak cara untuk melakukan ini. Saya akan membahas prinsip-prinsip di balik masing-masing, dan itu menggunakan case.
1. Lingkungan python
Ada banyak cara untuk melakukan ini.
pipenv
, conda,requirments.txt
,, dll.Dengan beberapa di antaranya, Anda bisa menentukan versi python. Dengan yang lain, cukup tentukan rentang versi python yang Anda tahu berfungsi dengan baik - misalnya, jika Anda menggunakan python 3.7, sepertinya tidak akan mendukung 3.6; hanya ada satu atau dua perubahan kecil. 3,8 harus bekerja dengan baik.
Metode serupa lainnya adalah
setup.py
. Ini umumnya digunakan untuk mendistribusikan pustaka - seperti PyInstaller (solusi lain yang akan saya sebutkan di bawah), atau numpy, atau wxPython, atau PyQt5 dll - untuk impor / penggunaan perintah baris. Panduan pengemasan python cukup berguna, dan ada banyak tutorial di luar sana. (googlepython setup.py tutorial
) Anda juga dapat menentukan persyaratan dalam file-file ini.2. Sebuah wadah
Docker adalah yang besar. Jika Anda belum pernah mendengarnya, saya akan terkejut. Google ringkasan cepat muncul dengan ini , yang akan saya kutip dari:
Itu seharusnya merangkumnya untuk Anda. (Perhatikan bahwa Anda tidak memerlukan OS khusus untuk wadah.)
3. File yang dapat dieksekusi
Ada 2 alat utama yang melakukan ini pada saat penulisan. PyInstaller, dan cx_Freeze. Keduanya dikembangkan secara aktif. Keduanya open source.
Anda mengambil skrip Anda, dan alat mengkompilasinya ke bytecode, menemukan impor, menyalinnya, dan menciptakan lingkungan python portabel yang menjalankan skrip Anda pada sistem target tanpa pengguna akhir membutuhkan python.
Secara pribadi, saya lebih suka PyInstaller - saya salah satu pengembang. PyInstaller menyediakan semua fungsinya melalui skrip baris perintah, dan mendukung sebagian besar pustaka yang dapat Anda pikirkan - dan dapat diperluas untuk mendukung lebih banyak. cx_Freeze membutuhkan skrip pengaturan.
Kedua alat mendukung windows, Linux, macOS, dan banyak lagi. PyInstaller dapat membuat exes file tunggal, atau bundel satu folder, sedangkan cx_Freeze hanya mendukung satu bundel folder. PyInstaller 3.6 mendukung python 2.7, dan 3.5-3.7 - tetapi 4.0 tidak mendukung python 2. cx_Freeze telah menjatuhkan dukungan python 2 pada rilis utama terakhir (6.0 saya pikir).
Lagi pula, cukup tentang fitur alat; Anda bisa melihatnya sendiri. (Lihat https://pyinstaller.org dan https://cx-freeze.readthedocs.io untuk info lebih lanjut)
Saat menggunakan metode distribusi ini, Anda biasanya memberikan kode sumber pada repo GitHub, beberapa exes (satu exes untuk setiap platform) yang siap untuk diunduh, dan instruksi tentang cara membuat kode menjadi file yang dapat dieksekusi.
sumber
Alat terbaik yang saya gunakan sejauh ini untuk ini adalah Pipenv . Tidak hanya menyatukan dan menyederhanakan seluruh alur kerja pip + virtualenv untuk Anda, pengembang, tetapi juga menjamin bahwa versi persis semua dependensi (termasuk Python sendiri) terpenuhi ketika orang lain menjalankan proyek Anda dengannya.
Situs web proyek melakukan pekerjaan yang cukup baik dalam menjelaskan cara menggunakan alat ini, tetapi, demi kelengkapan, saya akan memberikan penjelasan singkat di sini.
Setelah Anda menginstal Pipenv (misalnya, dengan menjalankan
pip install --user pipenv
), Anda dapat pergi ke direktori proyek Anda dan menjalankannyapipenv --python 3.7
, jadi Pipenv akan membuat virtualenv baru untuk proyek Anda, membuat Pipfile dan Pipfile.lock (lebih lanjut tentang itu nanti) . Jika Anda melanjutkan dan menjalankannyapipenv install -r requirements.txt
akan menginstal semua paket Anda. Sekarang Anda dapat melakukanpipenv shell
untuk mengaktifkan virtualenv baru Anda, ataupipenv run your_main_file.py
hanya menjalankan proyek Anda.Sekarang mari kita lihat isi Pipfile Anda. Seharusnya sesuatu yang menyerupai ini:
File ini memiliki spesifikasi yang dapat dibaca manusia untuk dependensi proyek Anda (perhatikan bahwa ia juga menentukan versi Python). Jika requirement.txt Anda telah menyematkan versi, Pipfile Anda juga bisa memilikinya, tetapi Anda dapat dengan aman melakukan wildcard, karena versi persisnya disimpan di Pipfile.lock. Sekarang Anda dapat menjalankan hal-hal seperti
pipenv update
memperbarui dependensi Anda dan jangan lupa untuk melakukan Pipfile dan Pipfile.lock ke VCS Anda.Setelah orang mengkloning proyek Anda, yang harus mereka lakukan adalah menjalankan
pipenv install
dan Pipenv akan mengurus sisanya (bahkan mungkin menginstal versi Python yang benar untuk mereka).Saya harap ini bermanfaat. Saya tidak berafiliasi dengan Pipenv, hanya ingin berbagi alat yang luar biasa ini.
sumber
Jika program Anda kurang tentang GUI, atau memiliki GUI web, maka Anda dapat membagikan kode menggunakan Google Colaboratory.
https://colab.research.google.com/
Setiap orang dapat menjalankannya dengan lingkungan yang sama. Tidak perlu instalasi.
sumber
Jika mengubah semua skrip python Anda menjadi satu yang dapat dieksekusi dapat membantu Anda, maka jawaban saya di bawah ini akan membantu ...
Saya telah mengembangkan aplikasi desktop besar murni dalam python sejak 3 tahun. Ini adalah alat berbasis GUI yang dibangun di atas pustaka pyqt (python-binding dari kerangka QT C ++).
Saat ini saya menggunakan pustaka pengemasan " py2exe ": adalah ekstensi distutils yang memungkinkan untuk membangun program yang dapat dieksekusi Windows mandiri (32-bit dan 64-bit) dari skrip Python; yang harus Anda lakukan adalah:
install py2exe: 'pip install py2exe'
Buat skrip setup.py: Ini digunakan untuk menentukan konten EXE akhir (nama, ikon, penulis, file data, pustaka bersama, dll.)
Jalankan: python setup.py py2exe
Saya juga menggunakan perangkat lunak "Inno Setup" untuk membuat pemasang: Membuat pintasan, mengatur variabel lingkungan, ikon, dll ...
sumber
Saya pikir Anda dapat menggunakan buruh pelabuhan dengan python https://github.com/celery/celery/tree/master/docker
silakan ikuti file dan saya pikir Anda bisa mencari cara untuk membuat file buruh pelabuhan Anda untuk skrip python Anda!
sumber
Karena tidak ada jawaban lain, saya ingin menambahkan satu aspek yang sama sekali berbeda:
Pengujian unit. Atau pengujian secara umum.
Biasanya, ada baiknya memiliki satu konfigurasi yang dikenal baik. Tergantung pada apa dependensi programnya, Anda mungkin harus menguji berbagai kombinasi paket. Anda dapat melakukannya secara otomatis dengan mis
tox
atau sebagai bagian dari pipa CI / CD.Tidak ada aturan umum tentang kombinasi paket apa yang harus diuji, tetapi biasanya kompatibilitas python2 / 3 adalah masalah utama. Jika Anda memiliki ketergantungan yang kuat pada paket dengan perbedaan versi utama, Anda mungkin ingin mempertimbangkan pengujian terhadap versi yang berbeda ini.
sumber
... making sure it runs correctly ...
? Pengujian merupakan bagian penting dari memastikan itu berjalan dengan benar, oleh karena itu bagian penting dari mempersiapkan untuk mendistribusikannya, tapi masih tidak ada hubungannya dengan benar-benar mendistribusikan ituSaya akan memberi Anda ringkasan yang sangat singkat dari beberapa solusi yang ada saat ini untuk kemasan python yang dapat Anda pilih (pengetahuan adalah kekuatan):
Ikuti panduan yang disediakan di Structure Your Project , konvensi ini diterima secara luas oleh komunitas python dan biasanya merupakan titik awal yang baik ketika pendatang baru mulai mengkodekan dengan python. Dengan mengikuti panduan ini, pythonis yang menonton proyek / sumber Anda di github atau tempat lain yang sejenis akan langsung tahu cara menginstalnya. Juga, mengunggah proyek Anda ke pypi dan menambahkan CI dengan mengikuti aturan-aturan itu tidak akan menyakitkan.
Setelah proyek Anda terstruktur dengan benar sesuai dengan konvensi standar, langkah selanjutnya mungkin menggunakan beberapa freezer yang tersedia , jika Anda ingin mengirim kepada pengguna akhir Anda paket yang dapat mereka instal tanpa memaksa mereka untuk menginstal python pada paket mereka. mesin. Berhati-hatilah meskipun alat-alat ini tidak akan memberi Anda perlindungan kode ... dikatakan sebaliknya, mengekstraksi kode python asli dari artefak akhir akan sepele dalam semua kasus
Jika Anda masih ingin mengirimkan proyek Anda ke pengguna Anda tanpa memaksa mereka untuk menginstal dependensi dev dan Anda juga peduli dengan perlindungan kode sehingga Anda tidak ingin mempertimbangkan freezer yang ada, Anda mungkin menggunakan alat seperti nuitka , shedskin , cython atau yang serupa. Biasanya membalikkan kode dari artefak yang dihasilkan oleh alat-alat ini sama sekali tidak sepele ... Perlindungan retak di sisi lain adalah masalah yang berbeda dan kecuali Anda tidak memberikan biner fisik kepada pengguna akhir Anda, Anda tidak dapat berbuat banyak tentang hal itu selain memperlambat mereka :)
Juga, jika Anda perlu menggunakan bahasa eksternal dalam proyek python Anda, tautan klasik lain yang muncul di pikiran Anda adalah https://wiki.python.org/moin/IntegratingPythonWithOtherLanguages , menambahkan sistem pembuatan alat-alat tersebut ke CI dengan mengikuti aturan 1 akan sangat mudah.
Yang mengatakan, saya akan menyarankan menempel pada bulletpoint 1 karena saya tahu itu akan lebih dari cukup baik untuk Anda mulai, juga bahwa titik tertentu harus mencakup banyak kasus penggunaan yang ada untuk proyek "standar" python.
Meskipun ini tidak dimaksudkan untuk menjadi panduan lengkap dengan mengikuti yang Anda akan dapat mempublikasikan proyek python Anda kepada massa dalam waktu singkat.
sumber