Pythonturtle: Installationspakete automatisch erstellen

Erstellt am 23. Sept. 2018  ·  31Kommentare  ·  Quelle: PythonTurtle/PythonTurtle

Im Nachgang zu den Problemen https://github.com/cool-RR/PythonTurtle/pull/105#issuecomment -421965482, #106 und #90 würde ich gerne anfangen, Informationen darüber zu sammeln, wie man (am besten) Verpackungen für alle macht Plattformen, auf denen PythonTurtle läuft. Wenn wir wissen, wie man die Verpackung manuell durchführt, wird es eine einfache Aufgabe sein, alles zu automatisieren.

Mit anderen Worten, wir brauchen

  1. eine Liste von Zielpakettypen (zB MSI für Windows, macOS AppImage, Debian DEB, RPM, Snap) und
  2. eine vollständige Liste konkreter, detaillierter Schritte ( lesen Sie: Shell-Befehle), wie jeder Pakettyp erstellt wird, nur aus Quellcode, der in der Quellcodeverwaltung lebt.

HINWEIS: Wenn sich das Aufschreiben in dieser Ausgabe als unbequem erweist, möchten wir vielleicht das Projekt-Wiki verwenden , um uns weiterzuentwickeln.

automation

Hilfreichster Kommentar

Die nächste großartige Sache, nachdem Sie EXE für Windows und Bundles für macOS erhalten haben, könnte das Erstellen eines AppImage für Linux sein. Dies ähnelt einer .dmg-Datei auf einem Mac. Es wäre eine einzige Lösung für alle GNU/Linux-Distributionen! :tada: :smiley:

AppImage hat auch (etwas) einen AppStore, genannt AppImageHub . Und der Vergleich macht einem klar, dass es wirklich eine coole Sache ist. :+1:

Alle 31 Kommentare

Wir scheinen derzeit py2exe und py2app für Windows und macOS zu verwenden.

Laut einem kürzlichen Vortrag bei PyCon Otto sollten wir auf PyInstaller umsteigen , der es ermöglicht, eigenständige ausführbare Dateien für Windows, macOS und GNU/Linux gleichermaßen zu

Ich stimme zu, dass wir auf jeden Fall PyInstaller anstelle von py2exe und py2app verwenden sollten.

Und ich stimme zu, dass wir einen zuverlässigen und automatischen Build-Prozess brauchen.

Wir sollten auch nicht vergessen, das PythonTurtle- Python-Paket zu erstellen und es bei der Veröffentlichung auf PyPI zu übertragen.

Ich würde auch vorschlagen, Releases auszulösen, indem ein Git-Tag (mit der Versionsnummer) an das GitHub-Repository gesendet wird. Die Installer können dann über die Release-Seite heruntergeladen werden. Ich hoffe, das ist alles reibungslos möglich.

Ich stimme zu, obwohl diese Art der Automatisierung ein ziemlich hohes Ziel ist, wenn wir überhaupt an den Punkt kommen, an dem wir eine Veröffentlichung machen könnten, wäre ich begeistert.

Wenn wir überhaupt an den Punkt kommen, an dem wir eine Veröffentlichung machen könnten, wäre ich begeistert.

Dann bereiten Sie Ihren Raumanzug vor! :Lächeln:

Wie vermutet, muss PyInstaller auf der Infrastruktur laufen, für die das Installationsprogramm erstellt werden soll (zB unter Windows für ein Windows-Installationsprogramm, auf einem Mac für ein macOS-Installationsprogramm).

Ich habe weder ein Windows noch einen Mac. Daher muss ich umständlich herausfinden, wie das Erstellen auf AppVeyor erfolgt. Außerdem benötigen wir ein macOS mit installiertem Python 3 (und drücken Sie die Daumen, dass die Dokumentation nur veraltet ist und wir auch mit Python 3 bauen können).

Ich werde wahrscheinlich am besten damit beginnen, ein Python-Paket zu automatisieren (und es automatisch auf PyPI hochzuladen). IIUC wird sowieso ein setup.py zum Bauen mit (einigen Funktionen von) PyInstaller benötigt.
Auf diese Weise haben wir bereits eine Möglichkeit, PythonTurtle zu installieren.

Möchten Sie mich als Betreuer zum PyPI-Projekt hinzufügen ? Würde es mir erleichtern, Dinge zu automatisieren, wenn ich meine eigenen Anmeldeinformationen verwenden kann. Mein Benutzername ist "bittner", nicht überraschend.

Ich habe Sie als Betreuer auf PyPI hinzugefügt.

In Bezug auf PyInstaller frage ich mich, ob eine VM mit ReactOS zum Generieren eines Windows-Installers funktionieren würde.

Um pip install PythonTurtle das Programm und alle benötigten Abhängigkeiten zu installieren, erweist sich als schwierig:

Schlussfolgerungen:

  • Wir _könnten_ install_requires=['wxPython'] zu setup() hinzufügen, aber dies würde fehlschlagen, es sei denn, die Voraussetzungen ( in der README erwähnt ) wären bereits installiert. Möglicherweise können wir den - sehr technischen Fehler - beheben und einen hilfreichen Hinweis drucken, falls die Installation fehlschlägt.
  • Als Alternative können wir den Benutzern vertrauen, die Installationsschritte in der README-Datei auszuführen, und PythonTurtle eine freundliche _Erinnerung_ drucken lassen, wenn das wx Modul nicht importiert werden kann ( ModuleNotFoundError im Anwendungsmodul ).

Es wäre möglich, aber auch ziemlich umständlich, entweder auf eine benutzerfreundliche Weise "Voraussetzungen automatisch erkennen" mit platform.release() und/oder os.name zu tun. Ich schlage vor, wir drucken einfach eine Textnachricht und verweisen mit einer URL auf den Installationsabschnitt der README.

Ich frage mich, ob eine VM mit ReactOS zum Generieren eines Windows-Installers funktionieren würde.

Ich bin mir nicht sicher, wie wir eine VM für einen Dienst in der Cloud verwenden würden, der das PythonTurtle-Paket automatisiert erstellt. Können Sie das näher erläutern? (Beabsichtigen Sie nur die lokale Verwendung auf einem Entwicklercomputer?)

Du hast recht, ich habe das nicht zu Ende gedacht.

Ich denke, es gibt 2 Fragen:

  1. Könnte ReactOS zum Generieren eines Windows-Installers mit PyInstaller funktionieren?

  2. Könnten wir es so einrichten, dass es automatisch in der Cloud funktioniert?

Nehmen wir an, die Antwort auf die erste Frage lautet ja, und es gibt keinen SaaS-Anbieter, der diesen Service anbietet. Dann sagen wir, wir können ein Docker-Image einrichten, das VirtualBox mit einem ReactOS-Gast ausführt. Vielleicht finden wir einen SaaS-Anbieter, der dieses Docker-Image für uns ausführt?

https://github.com/pypa/python-packaging-user-guide/issues/267 enthält einige interessante Links zum Verpacken von Python-Anwendungen.

Sobald das Hochladen des Linux-Bundles auf GitHub abgeschlossen ist (über PR #123), steigen wir auf den CI-Zug für macOS auf , ja! :lecker:

Die nächste großartige Sache, nachdem Sie EXE für Windows und Bundles für macOS erhalten haben, könnte das Erstellen eines AppImage für Linux sein. Dies ähnelt einer .dmg-Datei auf einem Mac. Es wäre eine einzige Lösung für alle GNU/Linux-Distributionen! :tada: :smiley:

AppImage hat auch (etwas) einen AppStore, genannt AppImageHub . Und der Vergleich macht einem klar, dass es wirklich eine coole Sache ist. :+1:

Klingt gut für mich!

Derzeit funktioniert das Erstellen eines Anwendungspakets auf macOS (mit PyInstaller) nicht vollständig. Als Alternative, dachte ich, könnten wir eine Homebrew-Formel erstellen. Ich schaue mir gerade die zugehörige Dokumentation an:

Hmmm, es sieht so aus, als ob jemand mit einem Mac benötigt wird, um die Formel effektiv zu entwickeln. Obwohl es wirklich nicht schwierig zu sein scheint. :Denken:

Hier sind Formeln im Zusammenhang mit Python (3):

  • Python (scheint 3.7 zu installieren; Python@3 ist ein Symlink, ein sogenannter "Alias")
  • wxPython (abhängig von Python@2 , siehe auch https://github.com/Homebrew/homebrew-core/issues/32744)

Es kann ausreichen, sich auf Python@3 (=3.7) zu verlassen und wxPython über pip zu installieren ( wie in unseren Tests ).

Nur als Referenz, wenn die automatischen Veröffentlichungen nicht funktionieren (sie werden wahrscheinlich derzeit nicht funktionieren, da api_key: nur auf einen Beispielwert gesetzt ist ), so führt das VSCodium-Projekt automatische Veröffentlichungen auf GitHub durch. :+1:

Ram, Sie haben erwähnt, dass "Windows Installer" die oberste Priorität der Gegenwart ist. Ich stimme zu.

Notieren wir uns den aktuellen Stand der Gewerkschaft.

Windows Installer (Fortschrittsübersicht)

  • Windows-Builds arbeiten seit Oktober 2018
  • Diese Builds erstellen eine Windows .EXE-Binärdatei und einen .MSI-Installer (siehe Beispieljob ).
  • Die Dateigröße des .MSI-Installationsprogramms ist so klein, dass es vermuten lässt, dass sie tatsächlich leer ist.
  • Ich erinnere mich, dass Sie die .EXE-Datei ausprobiert haben (indem Sie sie heruntergeladen und ausgeführt haben) und bestätigt haben, dass die .MSI-Datei nicht funktioniert. (Oder war das jemand anderes, der es für mich getestet hat? Nicht sicher.)
  • Ich erinnere mich, dass ich in einem anderen Problem (oder war es ein privater Chat von uns?) erwähnt habe, was benötigt wird, um ein funktionierendes MSI-Installationsprogramm zu erstellen (es ist eigentlich nur eine MS Visual Studio-Projektdatei oder so).

Ich glaube, ich habe alles vorbereitet. Da ich jetzt weder einen Windows-Rechner habe noch vorhabe, einen zu kaufen (übrigens auch für macOS), fehlt nur noch jemand, der übernimmt und das fehlende Puzzleteil an Ort und Stelle setzt. Aus meinem Bauchgefühl sind wir wirklich sehr nah dran an der "Aufgabe erledigt".

Nächste Schritte (Freiwilliger erforderlich)

Es sieht so aus, als ob Sie laut einer Antwort auf StackOverflow nur die erforderliche Konfiguration mit der Microsoft Visual Studio Installer Projects- Erweiterung erstellen müssen.

Können Sie also übernehmen? Was getan werden muss, IIUC, ist:

  1. Erstellen Sie ein Visual Studio-Projekt mit einem Installer-Setup
  2. Stellen Sie sicher, dass das Installationsprogramm erfolgreich auf Ihrem lokalen Computer erstellt wird
  3. Fügen Sie die Datei .vdproj zu diesem Projekt hinzu

AppVeyor erkennt dann diese Datei, erstellt das Installationsprogramm und stellt es auf der Seite Build- Artefakte zum Download bereit.

Verweise

Aus meinem Bauchgefühl sind wir wirklich sehr nah dran an der "Aufgabe erledigt".

Ich habe nicht das Gefühl, dass wenn ich damit anfange, es fast fertig sein wird. Ich weiß nicht einmal, wie man Visual Studio Project verwendet oder was unser aktueller Plan ist. Wenn ich diese Aufgabe übernehmen würde, würde ich davon ausgehen, dass es ein paar Tage Vollzeitarbeit dauern würde.

Sie haben sich viel Mühe gegeben, deshalb finde ich es nicht gut, Ihnen dies zu sagen, aber ich werde mich definitiv nicht freiwillig melden, um an diesem Thema zu arbeiten. PythonTurtle ist gerade nicht annähernd eine Priorität in meinem Leben, da ich mehr als eine Stunde damit verbringen würde, es zu verbessern.

Nervt es mich, wenn ich von anderen Ausgaben auf dieses Problem weise und sage, dass nichts ohne dieses Problem etwas wert ist? Ich werde Sie nicht daran hindern, an anderen Themen zu arbeiten, ich würde wahrscheinlich nur nicht mitmachen, weil mir diese Mühe verschwendet erscheint, aber ich werde Sie nicht blockieren, und wenn Sie mich für Code-Reviews oder kleine Dinge brauchen, Das mache ich gerne.

Habe noch einen Gedanken dazu. Sie sagen: "Ich habe weder einen Windows-Computer noch beabsichtige ich, einen zu kaufen". Wenn Ihr Einwand gegen die von Ihnen aufgeführten Punkte darin besteht, dass Sie genug für dieses Ticket getan haben oder dass Sie es vorziehen, Ihre Zeit nicht mit Windows-bezogenen Dingen zu verbringen, dann ja, das ist ein berechtigter Einwand.

Wenn das Problem darin besteht, dass Sie kein Geld für eine Windows-Lizenz ausgeben möchten, ist dies möglicherweise lösbar. Eine Idee wäre, ReactOS zu verwenden und zu sehen, ob damit Visual Studio Project ausgeführt wird. Wenn ReactOS keine Option ist, könnte ich Ihnen vielleicht eine Windows-Lizenz/-Maschine besorgen. Lass es mich wissen, wenn das hilfreich ist.

Lass es mich wissen, wenn das hilfreich ist.

Kennen Sie jemanden, der _begeistert_ für die Programmierung unter Windows ist? Windows ist eine unordentliche Umgebung für Python. Ich möchte nicht zu einem falschen Image beitragen, dass "Python + Windows" gut zusammenpasst, das ist alles.

Siehe https://github.com/PythonTurtle/PythonTurtle/issues/108#issuecomment -683420022 für alternative Lösungen zum Erstellen eines MSI-Installationsprogramms (WiX, WiX.Py ). In Kombination mit GitHub Actions können wir so erfolgreich sein. Will das jemand ausprobieren?

Will das jemand ausprobieren?

Ich nicht, also werden wir wohl warten, bis ein möglicher Freiwilliger eintrifft.

Eine Aufgabenliste...

  • [ ] __Linux__: pyinstaller-Build erfolgreich

    • [ ] Automatisierte auf GitHub-Aktionen

  • [ ] __macOS__: pyinstaller-Build erfolgreich

    • [ ] Automatisierte auf GitHub-Aktionen

  • [ ] __Windows__: pyinstaller-Build erfolgreich

    • [ ] Automatisierte auf GitHub-Aktionen

Ein paar Hinweise, die Ihnen helfen, Fortschritte zu machen:

  • [x] Mit python3 setup.py clean bundle Sie alle Binärpakete erstellen (PyInstaller wird verwendet).
  • [x] Die Binärdateien bauen erfolgreich für alle Plattformen (einschließlich .exe für Windows), für das, was ich mich erinnere.
  • [ ] Windows-Benutzer scheinen ein Windows-Installationsprogramm zu erwarten; dies könnte ein MSI- oder WiX.Py-Installer sein (beide sind noch nicht vorbereitet).
  • [ ] GitHub-Aktionen sollten automatisch Binärdateien an unsere GitHub- Releases senden, wenn wir ein Git-Tag auf master ; wir möchten vielleicht so etwas wie Aktionen/Erstellen-Freigeben verwenden , um dies für uns weniger mühsam zu machen.

Wir haben eine super-nette Antwort von @judej auf der Microsoft Developer Community Bitte um Hilfe , dass ich geschrieben hatte! :Freude:

Fazit: Kein MSI-Volontär für uns, aber es gibt zwei weitere interessante Projekte, eines, das einen Installer erstellt und das andere, das eine Python-ZIP-App erstellt :

  1. pynsist
  2. shiv – _zum Erstellen vollständig eigenständiger Python-Zipapps, wie in PEP 441 beschrieben, aber mit allen ihren Abhängigkeiten enthalten!_

Das könnten zwei schöne Alternativen sein, die es wert sind, bewertet zu werden. Danke Jude! :100: :medal_military:

Cool. Ich habe vor kurzem auch von PyOxidizer gehört . Ich bin mir immer noch nicht 100% sicher, ob ich das Projekt verstanden habe ( Diskussion ), aber es ist möglich, dass es das tut, was wir wollen.

Ich werde das am Wochenende mit shiv versuchen. Bitte versuchen Sie es mit PyOxidizer und dann können wir die Noten vergleichen.

Entschuldigung, ich habe vor ein paar Tagen einen neuen Job angefangen und werde keine Zeit haben, etwas zu tun :(

PyOxidizer klingt für mich wie ein Experiment: Eine Python-Anwendung, die auf "einer Rust-VM" ausgeführt wird, einer OS-nativen Ebene, die mit Rust erstellt wurde. Ich bin mir nicht sicher, welchen Vorteil das bietet. Macht das PyInstaller Setup, das wir ausführen, nicht alles gut? :3rd_place_medal:

shiv ist ein völlig neuer Ansatz (neu in unserem "Portfolio" von Veröffentlichungsartefakten), der für unser Publikum interessant sein könnte. Ich finde die Idee spannend (auch wenn ich wetten würde, dass nur wenige Leute sie verwenden). :2nd_place_medal:

pynsist klingt wie das Microsoft Windows-Installationsprogramm, nach dem wir suchen. Dies könnte die Benutzererfahrung bieten, die Windows-Leute zu erwarten scheinen: :eins: Installer herunterladen, :zwei: es ausführen, um es zu installieren und einen Startmenüeintrag hinzuzufügen, :drei: Anwendung aus dem Startmenü starten. :1st_place_medal:

Nachteil von pynsist ist nur Windows. Ich werde versuchen, Shiv (von LinkedIn) auf Mac und Linux voranzubringen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

cool-RR picture cool-RR  ·  8Kommentare

charles-dyfis-net picture charles-dyfis-net  ·  48Kommentare

harobed picture harobed  ·  6Kommentare

kmike picture kmike  ·  16Kommentare

mitsuhiko picture mitsuhiko  ·  41Kommentare