Kann ich setup.py verwenden, um eine App zu packen, die PyQt5 benötigt?

8

Ich habe diese Frage hier angeschaut:

Ist es möglich, PyQt von setuptools Setup zu verlangen .py?

Was ist der richtige Weg, um eine Python-Anwendung zu verteilen, die eine GUI hat und auf PyQt basiert? (Ich verwende PyQt5 und Python3)

Ich lerne immer noch, wie man Dinge verteilt, also weiß ich nicht, ob meine Frage einen Sinn ergibt.

Bearbeiten:

Die Antwort ist korrekt, sudo pip3 install . hat für meine eigene setup.py -Datei funktioniert, aber offensichtlich enthält pyqt5 das QtWebKitWidgets-Modul nicht und es ist nicht für die Installation in einem separaten Verzeichnis verfügbar Paket in Pip3. So, jetzt denke ich daran, weg von Python vollständig und gehen Sie mit Javascript + Electron als Multiplattform einfach zu Sprache für die Entwicklung zu führen.

    
Elric 18.05.2016, 23:11
quelle

1 Antwort

7

Kann ich PyQt5 über setup.py anfordern?

In einem Wort yes , solange Sie Ihre Unterstützung auf PyQt5 und Python3 beschränken.

Die in setup.py angegebenen Anforderungen werden normalerweise durch das Anfordern von Paketen aus dem Python Package Index (PyPi) bereitgestellt. Bis vor kurzem waren diese Pakete nur Quellen, was bedeutet, dass eine Installation, die von PyQt5 abhängig ist, nur auf einem System funktioniert, auf dem es aus der Quelle erstellt werden konnte. Gerade der Aufbau auf Windows erfordert eine Menge Setups, und damit wäre Ihre Anwendung für jeden, der das nicht kann oder will, unerreichbar.

Hinweis: Soweit mir bekannt ist, war es nie wirklich möglich, aus der Quelle über PyPi zu bauen. Der Standardansatz bestand darin, die Quelle / Binärdateien von der Riverbank-Software herunterzuladen und von dort zu installieren / zu installieren.

Dieses Problem wurde durch die Einführung von Python Wheels gelöst, die eine Möglichkeit bieten, C-Erweiterungspakete zu installieren, ohne dass sie auf dem Zielsystem kompiliert werden müssen . Dies wird durch plattformspezifische .whl -Dateien erreicht. Räder für PyQt5 auf Python3 sind auf PyPi für verschiedene Plattformen verfügbar, einschließlich MacOS X, Linux (beliebig), Win32 und Win64 die die meisten Anwendungen abdecken sollte.

Dies ist zum Beispiel die Ausgabe, wenn PyQt5 auf Python3 auf einem Mac installiert wird:

%Vor%

Um PyQt5 als eine Abhängigkeit von Ihrem eigenen Paket festzulegen, geben Sie es einfach als normal in Ihrem setup.py z. install_requires=['PyQt5']

Wie verteile ich eine Python-GUI-Anwendung richtig?

Hier haben Sie ein paar Optionen. Das bedeutet, dass jeder, der Python3 installiert hat, jetzt Ihre Anwendung mit pip installieren kann. Dies setzt jedoch voraus, dass der Endbenutzer über Python verfügt und weiß, was pip ist. Wenn Sie Ihre Anwendung mit einem Windows-Installationsprogramm, einem MacOSX-Paket oder einem Linux-Paket verteilen möchten, müssen Sie eines der für diesen Zweck vorgesehenen Tools verwenden.

Windows

  • cx_Freeze ist ein plattformübergreifender Packager, der Python-Anwendungen für Windows, Mac und Linux paketieren kann. Es funktioniert, indem es Ihr Projekt analysiert und die erforderlichen Pakete und Unterpakete einfriert . Der Erfolg hängt weitgehend davon ab, von welchen Paketen Sie abhängig sind und von deren Komplexität / Korrektheit.
  • PyInstaller ist ein weiterer plattformübergreifender Packager, der Python-Anwendungen für Windows, Mac und Linux paketieren kann. Dies funktioniert ähnlich wie bei cx_Freeze und wird je nach Paket wahrscheinlich besser / schlechter sein.
  • PyNSISt erstellt NSIS-Installationspakete für Windows. Dies hat den Vorteil, dass es sehr einfach ist: Es packt einfach alle Dateien zusammen, so wie sie sind, ohne "einzufrieren". Der Nachteil ist, dass Pakete sehr groß und langsamer installiert werden können (siehe jedoch die Dateifilter-Optionen). Es unterstützt jetzt die Bündelung von .whl -Dateien, die dies in vielen Fällen lösen wird. Bei weitem am einfachsten, wenn Sie nur auf Windows ausgerichtet sind.

MacOSX

  • cx_Freeze siehe oben.
  • PyInstaller siehe oben.
  • Py2app erstellt .app bundles aus der Definition in setup.py . Ein großer Vorteil sind die Custom-Handler, mit denen Sie die Verpackung von problematischen Paketen anpassen können. Wenn Sie nur auf MacOSX abzielen, ist dies wahrscheinlich Ihre beste Option.

Linux

Hinweis: Es ist möglich, ein sehr komplexes setup.py zu schreiben, das es erlaubt, mit einem oder mehreren Werkzeugen auf verschiedenen Plattformen zu bauen, aber ich habe normalerweise getrennte Konfigurationen (zB setup-py2app.py ) zur besseren Übersicht gespeichert .

    
mfitzp 18.05.2016, 23:26
quelle