Pythonturtle: Bangun paket penginstal secara otomatis

Dibuat pada 23 Sep 2018  ·  31Komentar  ·  Sumber: PythonTurtle/PythonTurtle

Menindaklanjuti masalah https://github.com/cool-RR/PythonTurtle/pull/105#issuecomment -421965482, #106 dan #90, saya ingin mulai mengumpulkan informasi tentang cara (terbaik) melakukan pengemasan untuk semua platform PythonTurtle berjalan. Ketika kita tahu bagaimana melakukan pengemasan secara manual, akan menjadi tugas yang mudah untuk mengotomatisasi semuanya.

Dengan kata lain, kita membutuhkan

  1. daftar jenis paket target (mis. MSI untuk Windows, macOS AppImage, Debian DEB, RPM, Snap), dan
  2. daftar lengkap langkah-langkah konkret dan terperinci ( baca: perintah shell) tentang bagaimana setiap jenis paket dibangun, dari kode sumber yang tinggal di kontrol sumber saja.

CATATAN: Jika menulis ini dalam edisi ini terbukti tidak nyaman, kami mungkin ingin menggunakan proyek Wiki untuk membantu kami melanjutkan.

automation

Komentar yang paling membantu

Hal hebat berikutnya setelah mendapatkan EXE untuk Windows dan bundel untuk macOS yang berfungsi adalah membangun AppImage untuk Linux. Ini adalah sesuatu yang mirip dengan file .dmg di Mac. Ini akan menjadi solusi tunggal untuk semua distro GNU/Linux! :tada: :senyum:

AppImage juga memiliki (agak) AppStore, dijuluki AppImageHub . Dan perbandingan membuat Anda mengerti bahwa itu benar-benar hal yang keren. :+1:

Semua 31 komentar

Saat ini kami py2exe dan py2app untuk Windows dan macOS.

Menurut pembicaraan baru - PyInstaller , yang memungkinkan membangun executable yang berdiri sendiri untuk Windows, macOS dan GNU/Linux.

Saya setuju kita pasti harus menggunakan PyInstaller daripada py2exe dan py2app.

Dan saya setuju bahwa kita membutuhkan proses pembuatan yang andal dan otomatis.

Kita juga tidak boleh lupa tentang membangun paket PythonTurtle Python dan mendorongnya ke PyPI saat merilis.

Saya juga menyarankan untuk memicu rilis dengan mendorong tag Git (dengan nomor versi) ke repositori GitHub. Installer kemudian dapat didownload melalui halaman rilis . Saya harap itu semua mungkin dengan cara yang mulus.

Saya setuju, meskipun otomatisasi semacam itu adalah tujuan yang tinggi, jika kita bahkan sampai pada titik di mana kita bisa melakukan rilis, saya akan sangat senang.

jika kita bahkan sampai pada titik di mana kita bisa melakukan rilis, saya akan sangat gembira.

Kemudian siapkan pakaian luar angkasa Anda! :senyum:

Seperti yang diduga, PyInstaller harus dijalankan pada infrastruktur yang harus dibangun penginstalnya (misalnya pada Windows untuk penginstal Windows, pada Mac untuk penginstal macOS).

Saya tidak punya Windows dan Mac. Oleh karena itu, saya perlu melakukan pencarian rumit bagaimana membangun dilakukan di AppVeyor. Selain itu, kami memerlukan macOS dengan Python 3 terinstal (dan semoga dokumentasinya sudah usang dan kami juga dapat membangun dengan Python 3).

Saya mungkin akan memulai dengan mengotomatiskan pembuatan paket Python (dan mengunggahnya ke PyPI secara otomatis). IIUC, setup.py diperlukan untuk membangun dengan (beberapa fitur) PyInstaller.
Kami akan memiliki satu cara yang mungkin untuk menginstal PythonTurtle dengan cara ini.

Apakah Anda ingin menambahkan saya sebagai pengelola proyek PyPI ? Akan memudahkan saya untuk mengotomatisasi hal-hal ketika saya dapat menggunakan kredensial saya sendiri. Nama pengguna saya adalah "bittner", tidak mengejutkan.

Saya menambahkan Anda sebagai pengelola di PyPI.

Mengenai PyInstaller, saya ingin tahu apakah VM dengan ReactOS akan berfungsi untuk menghasilkan penginstal Windows.

Untuk membuat pip install PythonTurtle menginstal program dan semua dependensi yang diperlukan terbukti sulit:

Kesimpulan:

  • Kami _could_ menambahkan install_requires=['wxPython'] ke setup() , tetapi ini akan gagal kecuali prasyarat ( disebutkan dalam README ) sudah diinstal. Kami mungkin dapat menangkap - kesalahan yang sangat teknis - dan mencetak petunjuk yang berguna jika penginstalan gagal.
  • Sebagai alternatif, kami dapat mempercayai pengguna untuk melakukan langkah-langkah instalasi di README dan membiarkan PythonTurtle mencetak _reminder_ yang ramah ketika modul wx tidak dapat diimpor ( ModuleNotFoundError dalam modul aplikasi ).

Melakukan salah satu cara "persyaratan deteksi otomatis" yang mudah digunakan menggunakan platform.release() dan/atau os.name akan dimungkinkan tetapi juga cukup rumit. Saya sarankan, kita cukup mencetak pesan teks dan merujuk ke bagian instalasi README dengan URL.

Saya ingin tahu apakah VM dengan ReactOS akan berfungsi untuk menghasilkan penginstal Windows.

Saya tidak yakin bagaimana kami akan menggunakan VM pada layanan di cloud yang akan membangun paket PythonTurtle secara otomatis. Bisakah Anda menguraikan? (Apakah Anda bermaksud untuk penggunaan lokal pada mesin pengembang saja?)

Anda benar, saya tidak memikirkan ini matang-matang.

Saya kira ada 2 pertanyaan:

  1. Bisakah ReactOS bekerja untuk menghasilkan penginstal Windows menggunakan PyInstaller?

  2. Bisakah kami mengaturnya agar berfungsi secara otomatis, di cloud?

Katakanlah jawaban untuk pertanyaan pertama adalah ya, dan tidak ada penyedia SaaS yang memberikan layanan itu. Kemudian katakan kita dapat mengatur gambar Docker yang menjalankan VirtualBox dengan tamu ReactOS. Mungkin kita bisa menemukan penyedia SaaS yang akan menjalankan image Docker itu untuk kita?

https://github.com/pypa/python-packaging-user-guide/issues/267 berisi beberapa tautan menarik untuk mengemas aplikasi Python.

Segera setelah pengunggahan bundel Linux ke GitHub diselesaikan (melalui PR #123), kami akan naik kereta CI untuk macOS , ya! :yum:

Hal hebat berikutnya setelah mendapatkan EXE untuk Windows dan bundel untuk macOS yang berfungsi adalah membangun AppImage untuk Linux. Ini adalah sesuatu yang mirip dengan file .dmg di Mac. Ini akan menjadi solusi tunggal untuk semua distro GNU/Linux! :tada: :senyum:

AppImage juga memiliki (agak) AppStore, dijuluki AppImageHub . Dan perbandingan membuat Anda mengerti bahwa itu benar-benar hal yang keren. :+1:

Terdengar bagus untukku!

Sampai sekarang, membangun bundel aplikasi di macOS (menggunakan PyInstaller) tidak sepenuhnya berfungsi. Sebagai alternatif, saya pikir, kita bisa membuat formula Homebrew. Saat ini saya sedang melihat dokumentasi terkait:

Hmmm, sepertinya butuh seseorang dengan Mac untuk mengembangkan formula secara efektif. Meskipun tampaknya tidak sulit, sungguh. :pemikiran:

Berikut adalah rumus yang terkait dengan Python (3):

  • Python (tampaknya menginstal 3.7; Python@3 adalah symlink, yang disebut "Alias")
  • wxPython (tergantung pada Python@2 , lihat juga https://github.com/Homebrew/homebrew-core/issues/32744)

Mungkin cukup untuk bergantung pada Python@3 (=3.7) dan menginstal wxPython melalui pip ( seperti dalam pengujian kami ).

Sekedar referensi, jika rilis otomatis tidak berfungsi (mungkin saat ini tidak berfungsi karena api_key: disetel hanya ke proyek VSCodium melakukan rilis otomatis di GitHub. :+1:

Ram, Anda telah menyebutkan "Pemasang Windows" menjadi prioritas utama saat ini. Saya setuju.

Mari kita catat keadaan serikat saat ini.

Pemasang Windows (ikhtisar kemajuan)

  • Windows build bekerja di AppVeyor sejak Oktober 2018.
  • Build tersebut membuat biner Windows .EXE dan penginstal .MSI (lihat contoh job ).
  • Ukuran file penginstal .MSI sangat kecil sehingga menunjukkan bahwa itu sebenarnya kosong.
  • Saya ingat, Anda telah mencoba .EXE (dengan mengunduh dan menjalankannya) dan Anda mengonfirmasi bahwa .MSI tidak akan berfungsi. (Atau apakah ini orang lain yang mengujinya untuk saya? Tidak yakin.)
  • Saya ingat, saya menyebutkan dalam beberapa masalah lain (atau apakah itu obrolan pribadi kami?) Apa yang diperlukan untuk membangun penginstal MSI yang berfungsi (sebenarnya ini hanya file proyek MS Visual Studio, atau lebih).

Saya pikir, saya sudah mempersiapkan segalanya. Sekarang, karena saya tidak memiliki komputer Windows atau saya berencana untuk membelinya (omong-omong, sama untuk macOS), satu-satunya hal yang hilang adalah seseorang yang mengambil alih dan meletakkan potongan puzzle yang hilang pada tempatnya. Dari firasat saya, kami sangat, sangat dekat dengan "tugas selesai".

Langkah selanjutnya (diperlukan sukarelawan)

Sepertinya, yang harus Anda lakukan adalah membuat konfigurasi yang diperlukan dengan ekstensi Microsoft Visual Studio Installer Projects , menurut jawaban di StackOverflow .

Oleh karena itu, dapatkah Anda mengambil alih? Yang perlu dilakukan, IIUC, adalah:

  1. Buat Proyek Visual Studio dengan setup Installer
  2. Pastikan penginstal berhasil dibuat di mesin lokal Anda
  3. Tambahkan file .vdproj ke proyek ini

AppVeyor kemudian akan mendeteksi file itu, membangun penginstal dan menyediakannya untuk diunduh di halaman Artefak build.

Referensi

Dari firasat saya, kami sangat, sangat dekat dengan "tugas selesai".

Saya tidak merasa bahwa jika saya akan mulai mengerjakannya, itu akan hampir selesai. Saya bahkan tidak tahu bagaimana menggunakan Visual Studio Project, atau apa rencana kami saat ini. Jika saya mengambil tugas ini, saya kira itu akan memakan waktu beberapa hari kerja penuh waktu.

Anda telah berusaha keras dalam hal ini, jadi saya merasa tidak enak untuk mengatakan ini kepada Anda, tetapi saya pasti tidak akan secara sukarela menangani masalah ini. PythonTurtle hampir tidak menjadi prioritas dalam hidup saya sekarang karena saya akan menghabiskan lebih dari satu jam, puncak, untuk meningkatkannya.

Apakah saya mengganggu dengan menunjuk masalah ini dari masalah lain, mengatakan tidak ada yang berharga tanpa masalah ini? Saya tidak akan menghentikan Anda dari mengerjakan masalah lain, saya mungkin tidak akan bergabung karena upaya itu tampaknya sia-sia bagi saya, tetapi saya tidak akan memblokir Anda, dan jika Anda membutuhkan saya untuk ulasan kode atau hal-hal kecil, Saya akan senang melakukannya.

Memiliki pemikiran lain dalam hal ini. Anda mengatakan "Saya tidak memiliki komputer Windows atau saya berencana untuk membelinya". Jika keberatan Anda untuk melakukan item yang Anda daftarkan adalah karena Anda telah melakukan cukup banyak pada tiket ini, atau Anda memilih untuk tidak menghabiskan waktu Anda melakukan hal-hal yang berhubungan dengan Windows, maka ya, itu adalah keberatan yang wajar.

Jika masalahnya adalah Anda tidak ingin mengeluarkan uang untuk lisensi Windows, maka mungkin itu bisa dipecahkan. Satu ide adalah menggunakan ReactOS, dan melihat apakah itu menjalankan Visual Studio Project. Jika ReactOS bukan pilihan, maka mungkin saya bisa mendapatkan lisensi/mesin Windows untuk Anda. Beri tahu saya jika itu membantu.

Beri tahu saya jika itu membantu.

Apakah Anda mengenal seseorang yang _antusias_ tentang pemrograman di Windows? Windows adalah lingkungan yang berantakan untuk Python. Saya tidak ingin berkontribusi pada citra palsu "Python + Windows" yang cocok satu sama lain, itu saja.

Lihat https://github.com/PythonTurtle/PythonTurtle/issues/108#issuecomment -683420022 untuk solusi alternatif untuk membangun penginstal MSI (WiX, WiX.Py ). Kami mungkin berhasil dengan cara itu dalam kombinasi dengan Tindakan GitHub. Apakah seseorang ingin mencobanya?

Apakah seseorang ingin mencobanya?

Saya tidak, jadi saya kira kita akan menunggu sampai kemungkinan sukarelawan tiba.

Sebuah daftar tugas...

  • [ ] __Linux__: pembangunan pyinstaller berhasil

    • [ ] Otomatis pada Tindakan GitHub

  • [ ] __macOS__: pembangunan pyinstaller berhasil

    • [ ] Otomatis pada Tindakan GitHub

  • [ ] __Windows__: pembangunan pyinstaller berhasil

    • [ ] Otomatis pada Tindakan GitHub

Beberapa petunjuk untuk membantu Anda membuat kemajuan:

  • [x] Dengan python3 setup.py clean bundle Anda dapat membuat semua bundel biner (digunakan PyInstaller).
  • [x] Binari berhasil dibangun untuk semua platform (termasuk .exe untuk Windows), untuk apa yang saya ingat.
  • [ ] Pengguna Windows tampaknya mengharapkan penginstal Windows ; ini bisa berupa penginstal MSI atau WiX.Py (keduanya belum disiapkan).
  • [ ] GitHub Actions akan secara otomatis mendorong binari ke Rilis GitHub kami setiap kali kami mendorong tag Git ke master ; kami mungkin ingin menggunakan sesuatu seperti actions/create-release untuk membuat ini tidak terlalu melelahkan bagi kami.

Kami menerima jawaban yang sangat bagus oleh @judej pada permintaan Komunitas Pengembang Microsoft

Intinya: Tidak ada sukarelawan MSI untuk kami, tetapi ada dua proyek yang lebih menarik, satu yang membuat penginstal dan yang lain membuat Aplikasi Python ZIP :

  1. pynsist – _a alat untuk membangun penginstal Windows untuk aplikasi Python Anda. [...] bundel Python itu sendiri, sehingga Anda dapat mendistribusikan aplikasi Anda kepada orang-orang yang tidak menginstal Python_
  2. shiv – _untuk membangun zipapps Python yang sepenuhnya mandiri sebagaimana diuraikan dalam PEP 441, tetapi dengan semua dependensinya disertakan!_

Itu bisa menjadi dua alternatif bagus yang layak dievaluasi. Terima kasih Yudas! :100: :medal_militer:

Dingin. Saya juga baru-baru ini mendengar tentang PyOxidizer . Saya masih belum 100% yakin saya memahami proyek ( diskusi ) tetapi mungkin saja itu melakukan apa yang kita inginkan.

Saya akan mencoba melakukan ini dengan shiv selama akhir pekan. Silakan coba PyOxidizer dan kemudian kita dapat membandingkan catatan.

Maaf, saya memulai pekerjaan baru beberapa hari yang lalu dan saya tidak punya waktu untuk melakukan apa pun :(

PyOxidizer terdengar seperti eksperimen bagi saya: Aplikasi Python berjalan di "a Rust VM", lapisan asli OS yang dibuat menggunakan Rust. Saya tidak yakin manfaat apa yang diberikan ini. Bukankah setup PyInstaller kita jalankan melakukan semuanya dengan baik? :3rd_place_medal:

shiv adalah pendekatan yang benar-benar baru (baru dalam "portofolio" artefak rilis kami), yang mungkin menarik untuk diberikan kepada audiens kami. Saya menemukan ide itu mendebarkan (walaupun saya berani bertaruh hanya sedikit orang yang akan menggunakannya). :2nd_place_medal:

pynsist terdengar seperti penginstal Microsoft Windows yang kami cari. Ini mungkin memberikan pengalaman pengguna yang tampaknya diharapkan oleh orang-orang Windows: :satu: Unduh penginstal, :dua: jalankan untuk menginstal dan tambahkan entri menu mulai, :tiga: mulai aplikasi dari menu mulai. :1st_place_medal:

Kelemahan dari pynsist adalah Windows saja. Saya akan mencoba untuk memajukan Shiv (dari LinkedIn) di Mac dan Linux.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat