Habt ihr GE-PACKT?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Hallo Leute,

ich möchte eine allgemeine Frage los werden. Einige von euch werden sicherlich schmunzeln und mit dem Kopf schütteln. Mir gehen da so einige Gedanken durch den Kopf. Ich komme aus der Sprache VB6, und bin dort immer noch unterwegs. Wie man dort sein Programme verteilt, ist recht einfach gehalten. Aber wie geht das in Python? Um meine Frage etwas zu konkretisieren:

Wir stellen uns vor, wir sind mit dem Programm fertig. Es existiert in deinem Projekt-Ordner zig Unterordner, in denen eure Module strukturiert verteilt sind. Noch dazu habt ihr im Laufe der Zeit einige Bibliotheken hinzu geholt, also Bibliotheken, die nicht zum Standard gehören. Ich denke da zum Beispiel an mechanize oder MySQLdb oder SQLAlchemy. Wir gehen davon aus, dass ihr mit Python (x,y) 2.7.6.0 gearbeitet habt. Dazu habt ihr mit dem QT-Designer 4.8.4 die GUi erstellt.

Nun frage ich mich: Was nun? Muss der Anwender auch diese Python(x,y) 2.7.6.0 auf seinem Rechner installieren? Man bemerke, dass dies verdammt viel MB sind. Muss der Anwender dann auch den QT-Designer installieren? Aber nicht genug. Wie sieht es mit den Bibliotheken aus? Ich meine, ich kann ja unmöglich voraussetzen, dass sich die Anwender die Bibliotheken selbst nachinstallieren? Wie handhabt man in diesem Fall am besten? Und dann noch eine letzte Frage: Wenn ihr fertig seid mit eurem Programm. Verpackt ihr euren Projekt-Ordner ganz klassisch und stellt es online zur Verfügung, so dass man es nur noch ausführen braucht? Was die Ausführung anbelangt, da benutze ich unter Windows eine Batch-Datei, die dann die *.pyw ausführt.

Das warst erst einmal von meinen Gedanken und Überlegungen.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Für Windows gibt es py2exe. py2exe erstellt aus Deiner Python Anwendung ein Verzeichnis mit einer exe-Datei. In das Verzeichnis werden alle benutzten Python Bibliotheken gepackt. Dieses Verzeichnis kannst Du auf einen Windows Rechner ohne Python Installation kopieren und Deine Anwendung (die exe-Datei) wird dort funktionieren, wenn Du py2exe richtig benutzt hast.
a fool with a tool is still a fool, www.magben.de, YouTube
BlackJack

PyInstaller wäre eine weitere Option.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Danke @BlackJack und MegaBen. Aber ohne diese Exe-Datei, wie sieht es damit aus? Ich meine, wenn ich eine Java-Anwendung auf meinem Rechner habe, brauche ich erst einmal Java auf meinem Rechner. Um nochmal auf meine Fragen einzugehen. Muss der Anwender genau die gleiche Python-Software auf dem Rechner haben wie ich? Also ich habe Python (x, y) 2.7.6, Q-Designer und verschiedene Bibliotheken. Man muss ja nicht mal spezifisch in Windows denken. Denn die Anwendung soll ja auch plattformunabhängig sein. Muss ich dem Anwender zumuten, dass er sich die Bibliotheken alleine nach installiert? Dass er exakt genau den gleichen Python-Interpreter hat?

Ich frage nur, weil ich auf diese Sachen in VB6 nicht achten musste. Runtime ist ja in Windows mit geliefert, was ich nur beachten muss, sind die *.dll-Dateien und *.OCX-Dateien mitzuliefern, aber darum kümmert sich ja das Setup-Programm.
BlackJack

@Sophus: Der Python-Interpreter wird bei den beiden genannten Lösungen doch mitgeliefert. Sowie alle Abhängigkeiten die das Programm hat.

Wenn es plattformunabhängig sein soll dann musst Du für jede Plattform die Du unterstützen möchtest die entsprechende dort übliche Lösung verwenden. Also für Linux zum Beispiel ein Paket für die Distribution(en) erstellen die Du unterstützen möchtest. Für MacOS gibt es auch ein Werkzeug — musst Du mal eine Suchmaschine bemühen.

Und ansonsten würde ich immer auch noch die Quellen zur Verfügung stellen und die Abhängigkeiten dokumentieren, für die Leute die sich alles selber zusammensuchen möchten.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Irgendwie überspringst du meine Fragen :-) Also, nochmal. Wenn ich mein Programm in Python (x, y) 2.7.6 programmiert habe, der Anwedner zum Beispiel auf seinem Linux aber Python 3x hat. Wird mein Programm trotzdem laufen? Ist Python 3.x abwärtskompatibel? Oder muss ich den Anwender explizit darauf hinweisen, dass er doch bitte Python 2.x installieren soll? Wobei ich aber mit Python (x, y) 2.7.6 installiert habe. Ich weiß nicht mal den Unterschied von Python XY und zu den "üblichen " Python Interpreter. Und wenn ich ein Paket erstelle, zum Beispiel eine gar.tz-Datei oder deb-Datei, muss ich die nicht_standard-Bibliotheken auch dort hineinpacken?

Mal eine Frage allgemein: Wenn ich eine Bibliothek verwenden will, die nicht als Standard mitgeliefert ist, ich sie aber nur in diesem Fall brauche, könnte ich die heruntergeladene Bibliothek doch einfach in mein Projekt-Ordner kopieren, und so wie üblich importieren, oder? So kann ich dann mein Projekt-Order am ende in ein Paket erstellen, und weiß dann, dass all die Bibliotheken dort sind.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Nein, natürlich ist 3.x nicht mit 2.x kompatibel, sonst wäre es ja langweilig. Wie was mit welchen Modulen und welchen Versionen läuft, das kannst nur du als Entwickler wissen. Im Zweifelsfall musst du dir eben die Dokumentationen zu den Paketen durchlesen und schauen, in wie weit es funktioniert. Das gilt ganz unabhängig von Betriebssystem oder Sprache.

Ob du irgendwo Bibliotheken mitlieferst, das hängt vom Betriebssystem ab. Unter Windows wird das häufig so gemacht, da es keine zentrale Paketverwaltung gibt. Unter allen anderen Betriebssystemen würde man dich dafür erschlagen. Da kannst du häufig auch nicht einfach die Binaries kopieren, da diese nicht unbedingt kompatibel sind.
Das Leben ist wie ein Tennisball.
BlackJack

@Sophus: Python 3.x ist nicht abwärtskompatibel zu Python 2.x. Und ohne Python, ob nun mitgeliefert oder separat installiert, läuft das Python-Programm natürlich nicht.

Wenn Du ein `tar.gz` packst kannst Du machen was Du willst, also so viel oder so wenig da rein packen wie Du möchtest. Bei Linux ist es allerdings üblich die ganzen Abhängigkeiten nicht mitzuliefern. Die dokumentiert man. Ausserdem kann man bei Python eine `setup.py` dazu packen die so geschrieben ist das man sie mit ``pip`` verwenden kann und das dann Sachen aus dem Package-Index herunterlädt und installiert. Wobei ich da wiederum zum Beispiel nicht wie etwas wie `PyQt` hinein packen würde weil das selber einiges an Abhängigkeiten hat und relativ lange zum Kompilieren benötigt und jede Distribution das in der Paketverwaltung haben sollte.

Ein deb-Paket (oder RPM, …) ist dann noch mal wieder etwas anderes, denn da gibt man die Abhängigkeiten von anderen Paketen der Linux-Distribution ja in den Metadaten an.

Statt selber alles in den Projektordner zu kopieren kannst Du unter Windows auch ein Werkzeug wie py2exe oder PyInstaller verwenden. Die machen ja genau das: Alles benötigte *und* den Interpreter zusammen packen.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Wie sieht es mit dem QT-Designer aus? Ich arbeite noch momentan mit Version 4.8.4. Einige von euch werden sicherlich denken "Wieso nicht mit PyQT5?". Problem ist einfach, dass ich Anfänger bin, und ich mit PyQT4 lerne. Aber egal. Wir gehen nun davon aus, der Anwender hat nun Python 2.7.6 auf seinem Rechner. Ich gebe ihm mein Programm, so roh wie es ist. Also nicht in EXE-Datei. Und er soll das Programm ausführen. Braucht der Anwender auch QT-Designer? Ich frage nur deshalb, weil es offiziell keine 4er Version gibt, sondern nur noch 5. Das würde dann heißen, mein Programm wäre in dem Moment wertlos.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Nein, den Designer musst du nicht dazu packen. Der hat nichts mit deiner Anwendung zu tun.
Das Leben ist wie ein Tennisball.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn du Qt voraussetzt, dann muss der Endanwender ja so wie so die Qt-Bibliotheken installiert haben.

Unter Linux könntest du dein Prog paketieren und Qt als Abhängigkeit angeben, dann wird's mit installiert. Und Win müsste diese Voraussetzung halt in die Doku deines Prog, damit der Endanwender Qt manuell installiert.

Gruß, noisefloor
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@noisefloor: Das heißt, wenn ich dir jetzt mein rohes Projekt in eine *.rar-Datei verpacke und sie dir gebe. Du hast Python 2x auf deinem Rechner, aber kein PyQT4. Du könntest also mein Programm über meine GUI nicht starten? Du müsstest dir also erst einmal QT4 besorgen? Wir reden hier davon, dass es KEINE Exe-Datei ist bzw. gibt.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

so ist es. Ich müsste mir Qt4.x installieren und die Python-Bindings für Qt. Unter Linux (bei mit Ubuntu 14.04) würde ich das dann über die Paketverwaltung machen, unter Windows komplett von Hand.

Gleiches gilt dann auch für alle anderen Python-Module, die du verwendest, die aber nicht standardmäßig bei Python dabei sind.

Das "Problem" hättest du aber mit jedem GUI-Framework. Zwar ist Tkinter bei Python ootb dabei, aber zumindest unter Windows kannst du bei der Installationsroutine von Python mitteilen, dass du Tkinter nicht mit installieren willst.

Die einzige GUI, von der du ausgehen kannst, dass sie überall läuft, wäre HTML+CSS, weil das jeder (nicht-Text) Browser kann.

Gruß, noisefloor
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Klingt verdammt umständlich und frustrierend. Das Problem hatte ich in VB6 überhaupt nicht. Wie es in VB.NET aussieht weiß ich nicht. Ich konnte mir also getrost ein Projekt von jemand anders anschauen. natürlich musste ich mir um die Bibliotheken kümmern, die nicht als Standard gelten. Aber die legte der VB6-Programmierer einfach seiner *.rar-Datei bei, die ich dann einfach nur noch über die IDE hinzufügen muss. Ich will jetzt auch keine Grundsatzdiskussion starten. Aber es ist auffällig, wie "umständlich" vieles ist.

Wenn du mir jetzt dein Projekt geben würdest, welches du in QT5 realisiert hast, dann darf ich mich erst einmal darum bemühen, andere Designer zu installieren. Und wenn du auch noch in Python3x geschrieben hast, dann auch noch andere Interpreter etc. Diese Umständlichkeit wird auch dadurch deutlich, wenn man sich um EXE-Konverter bemüht. Da muss man je nach Version bestimmte Konverter nehmen.
BlackJack

@Sophus: Wieso andere ”Designer”? Das hatten wir doch jetzt schon: Nein natürlich muss man den Designer nicht haben um das Programm auszuführen. Man braucht halt Qt5 und die Python-Anbindung dafür. Entwickler können sich so etwas installieren und für Endanwender packt man halt einen Installer wo alles drin ist. Also unter Windows.

VB ist von Microsoft und nicht plattformunabhängig. Da entfällt dann ein plattformübergreifendes GUI-Rahmenwerk und die entsprechende VBRUNDLL in der passenden Version muss man entweder mit ausliefern oder hoffen das der Benutzer sie schon von irgendeinem anderen Programm haben wird.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn du mit einer Microsoft-Sprache für Windows programmierst, dann kannst du natürlich viel viel mehr voraussetzen, was installiert ist. Eben weil's Teil des Windows-Unterbaus ist.

Wenn du mit einer plattformunabhängigen Sprache (wie Python) mit einer plattformunabhängigen GUI (wie Qt) programmierst, wird halt vieles komplexer. Der Trade-off der Plattformunabhängigkeit.

Was nur plattformunabhängig wäre, wäre HTML+CSS+JavaScript. Da könntest du auch ähnliche vorgehen wie bei VB, nämliche alle benötigten JS-Libs in deiner .rar-Datei mit ausliefern.

Gruß, noisefloor
Antworten