Ist Python das richtige für mich?

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
Stolzi
User
Beiträge: 155
Registriert: Mittwoch 18. August 2004, 15:44

Mittwoch 8. August 2007, 06:25

Hallo,

ich würde es vorziehen mein Programm mit Python zu schreiben. Die Möglichkeiten dafür hat Python... das habe ich gesehen. Nur stellt sich für mich die Frage ob Python hier prinzipiell für mich das richtige ist, denn:
Das Programm das ich schreibe muss an viele Leute verteilt werden. Die Quellen müssen dabei nicht versteckt werden... es kann ruhig open source sein. Aber ich kann diesen Leuten nicht zumuten mehr als einen Doppelklick auf eine exe zu machen, da es alles Techniker an Metallbearbeitungsmaschinen sind die sich mit ihren Computern nicht beschäftigen wollen/sollen.
Ich habe hier von py2exe usw gelesen. Aber hier stellt sich mir die Frage: Läuft da auch ein größeres Programm noch anständig damit? Habe irgendwie Probleme mir das vorzustellen, wenn das alles in eine Datei gepackt sein soll?
Oder gibt es andere Möglichkeiten? Eine eigene Python Umgebung zusammenzustellen geht wieder über meine zeitlichen Möglichkeiten...

Danke
Stolzi
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Mittwoch 8. August 2007, 07:03

Was verstehst Du denn unter einem großen Programm?

Die Hauptschwierigkeit sehe ich in der Verwendung einer GUI. Dann musst Du sicherstellen, dass die verwendeten GUI-Toolkits auf allen Zielrechnern vorhanden sind.
https://www.xing.com/go/invite/18513630.6a91d4
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 8. August 2007, 07:20

Stolzi hat geschrieben:Oder gibt es andere Möglichkeiten? Eine eigene Python Umgebung zusammenzustellen geht wieder über meine zeitlichen Möglichkeiten...
Neben py2exe gibt es noch den PyInstaller. Der ist IMHO z.Z. besser.
Schau mal hier: [wiki]FAQ#WoGibtEsEinenPythonCompiler[/wiki]

Eine eigene Python Umgebung zu bauen ist nicht wirklich schwer! Python ist recht anspruchslos. Schau mal hier: http://www.python-forum.de/viewtopic.php?t=3666

Wie es mit GUIs aussieht, weiß ich in der Richtung aber nicht. Man kann sicherlich alles zusammen zu einem Installations-Paket schnüren.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 8. August 2007, 07:33

Stolzi hat geschrieben:ich kann diesen Leuten nicht zumuten mehr als einen Doppelklick auf eine exe zu machen
Hallo Stolzi!

Py2Exe oder cx_freeze:
Py2Exe oder cx_freeze funktionieren bei einfachen kleinen Programmen ziemlich gut. Sie machen aber Schwierigkeiten bei einigen externen Modulen. Es ist mit Py2Exe oder cx_freeze sicher schaffbar, aber es kann einen auch fuchsen.

Exe mit cx_freeze erstellen. Danach ein Setup:
Das setzt aber voraus, dass die mit cx_freeze erstellte EXE funktioniert.
http://www.python-forum.de/topic-5726.html

Setup mit Python:
Ein Setup erstellen, das zuerst Python installiert, den Computer neu starten lässt (damit alle Umgebungsvariablen für das weitere Setup funktionieen) und danach ein Python-Programm aufruft, welches die zusätzlichen Abhängigkeiten installiert.

Beim Setup von SW3 (ein Programm von mir), gehe ich sogar einen Schritt weiter. Das Setup installiert Python. Dafür verwende ich die Kommandozeile ``msiexec.exe /i python.msi ALLUSERS=1 /qn``. Damit wird Python für alle Benutzer im Hintergrund installiert und als aktuelles Python in die Registry eingetragen. Das ist zwar nicht ideal falls jemand schon eine ältere Python-Release installiert hat. Aber bei unserem Kundenkreis installieren wir das Programm meist selbst und nicht der Kunde.

Eine eigene Laufzeitumgebung mitliefern:
Das ist einfacher als du denkst. Kopiere dir den Python-Ordner "C:\Python25" in deinen Programmordner und kümmere dich darum, dass beim Aufruf deines Programmes das Python aus diesem Ordner gestartet wird.
In dein Setup nimmst du diesen Python-Ordner mit rein. Achte darauf, keine *.pyc- und *.pyo-Dateien ins Setup rein zu bringen. Diese sollten/müssen nach oder wärend des Setups auf dem Zielcomputer neu erstellt werden. Das Modul compileall hilft dir dabei. Das war's dann schon. So läuft dein Python-Programm mit dessen eigenen Python. Das ist sicher die sicherste Methode, dein Programm zu verteilen. Wenn du dein Setup kleiner halten möchtest, dann kannst du ja die Dateien aus dem mitgelieferten Python-Ordner löschen, die nicht gebraucht werden.

Oder so:
Also, es gibt dann noch Typen wie mich, die sich am liebsten so etwas zusammenbauen würden:
Ein Python-Programm, welches mit cx_freeze gepackt wurde, damit es auch ohne Python läuft, kümmert sich darum, dass alle notwendigen Abhängigkeiten installiert werden. Dieses cx_freeze-gepackte Programm ist klein genug, dass cx_freeze damit sicher keine Probleme macht. Somit hat man ein Python-Programm, das sich um die Installation von Python, pywin32, pysqlite, wxPython und andere Abhängigkeiten kümmern kann.
Dieses Installationsprogramm wird von einem normalen Setup (InnoSetup oder Nullsoft Install) installiert und vom Setup-Programm automatisch aufgerufen.
Das Installationsprogramm prüft ob Python 2.5 bereits installiert ist (ein Blick in die Registry genügt). Wenn nicht, dann wird es installiert. Sobald Python installiert ist, ruft es nacheinander die anderen Installationsprogramme (pywin32, pysqlite, wxPython,...) auf. Wenn man möchte, dann kann man sich sogar in einer INI-Datei merken, welche Versionen installiert wurden. Damit sind dann Updates auch kein Problem mehr. Bei näherem Überlegen, denke ich, dass es besser wäre, die Versionen nicht in eine INI zu speichern, sondern einfach über die installierten Module selbst abzufragen...

Fazit:
Kleine Programme mit py2exe oder cx_freeze und evt. einem Setup. Manche Programme machen mit py2exe oder cx_freeze Schwierigkeiten. Diesen kannst du eine eigene Laufzeitumgebung, also ein eigenes Python spendieren. Das ist gar nicht mal so groß, wenn du es von für dein Programm unnötigen Ballast befreist. Oder du schreibst dir ein kleines Installationsprogramm, welches du per Setup verteilst.

Es gibt sicher auch andere Möglichkeiten. Ich wollte aber nur die aufzählen, die mir am idealsten für Windowsbenutzer erschienen. Unter Linux sieht die Sache ganz anders aus. Da würde ich niemals eine eigene Python-Laufzeitumgebung mitliefern. Für gemischte Umgebungen empfehle ich InstallJammer. http://www.installjammer.com/ Ich habe zwar noch nicht viel Erfahrung damit, aber es sieht für mich sehr vielversprechend aus.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Stolzi
User
Beiträge: 155
Registriert: Mittwoch 18. August 2004, 15:44

Mittwoch 8. August 2007, 08:15

Wow Gerold, danke für die vielen Infos! Jo, da hast du genug Möglichkeiten geliefert mit denen es gehen würde. Super!
Was mich gewundert hat: Du sprichst immer von py2exe, oder cx_freeze. Verwendest du die lieber als PyInstaller? Wie Jens sagte habe auch ich im Wiki gelesen, dass PyInstaller idealer sei.
Sehr gut gefällt mir die Variante mit dem Python installieren. Nur, ist es nicht sehr schwierig festzustellen, ob bereits ein Python in Windows installiert ist, wenn ja... welche Version usw. Habe leider nicht viel Plan von Windows, da ich ansonsten in erster Linie mit dem Linux System arbeite. Ich kann nämlich leider das nicht selbst installieren bei den Leuten und muss so solchen Problemen vorbauen.
Ansonsten wäre das mit der Laufzeitumgebung wohl das sicherste!
In seltenen Fällen sollte es auch in Linux laufen. Hier kann sicher von den Leuten erwartet werden Python selbst zu installieren, wenn das noch nicht der Fall ist. Python ist hier nicht das Problem, aber ich habe schon oft Probleme mit verschiedenen wxpython Versionen bekommen. Da müsste man dann vermutlich auf versionen prüfen zur Sicherheit und eine Warnung ausgeben, dass Probleme an der falschen Version liegen können, oder so.

Edit: Da komm ich auch noch nicht ganz mit: Warum brauche ich Innosetup, wenn die Installation mein zB py2exe gepacktes kleines Python Skript erledigen soll?
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 8. August 2007, 08:20

Stolzi hat geschrieben:Nur, ist es nicht sehr schwierig festzustellen, ob bereits ein Python in Windows installiert ist, wenn ja... welche Version usw.
Schau mal hier: http://www.python-forum.de/post-35092.html#35092

EDIT: Und nun auch im Wiki: [wiki]Python Installation abfragen (Win)[/wiki]

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 8. August 2007, 10:13

Hallo Stolzi!
Stolzi hat geschrieben:Was mich gewundert hat: Du sprichst immer von py2exe, oder cx_freeze. Verwendest du die lieber als PyInstaller?
Ich erwähne py2exe nur, weil es von mehr Leuten hier im Forum favorisiert wird. Ich persönlich habe es ausprobiert und nach ein paar Tagen standesgemäß entsorgt -- also restlos terminiert. :twisted:

cx_freeze http://python.net/crew/atuining/cx_Freeze/ kommt mit wxPython (bis auf ein paar Ausnahmen) sehr gut klar. Es lässt sich über Kommandozeilenparameter steuern. Es erstellt unter Windows -- Binaries für Windows, erstellt unter Linux -- Binaries für Linux. So kann man auch für Linux kleine wxPython-Programme erstellen, ohne auf ein in der richtigen Version installiertes wxPython setzen zu müssen.

Bei meinen Versuchen war cx_freeze neuer als PyInstaller und in den Erklärungen zu cx_freeze stand, dass viele Ideen aus dem PyInstaller stammen. Da sparte ich mir die Tests mit PyInstaller.
Stolzi hat geschrieben:Habe leider nicht viel Plan von Windows, da ich ansonsten in erster Linie mit dem Linux System arbeite.
Das Setup und die Installation musst du sowiso unter Windows entwickeln. Mit Linux und Wine wird das wahrscheinlich nur Murks.
Stolzi hat geschrieben:ich habe schon oft Probleme mit verschiedenen wxpython Versionen bekommen. Da müsste man dann vermutlich auf versionen prüfen zur Sicherheit und eine Warnung ausgeben, dass Probleme an der falschen Version liegen können, oder so.
Ich glaube da kann man was mit ``wxversion`` machen. Ich habe noch nicht damit gearbeitet, deshalb kann ich dir nichts näheres dazu sagen. --> http://wiki.wxpython.org/MultiVersionIn ... version%29
Stolzi hat geschrieben:Warum brauche ich Innosetup, wenn die Installation mein zB py2exe gepacktes kleines Python Skript erledigen soll?
Mit einem Programm wie Innosetup und Co. erstellst du das Programm, mit dem dein Programm und das Installationsprogramm verteilt wird. Ein Setup kümmert sich darum, dass dein Programm ins Startmenü und/oder in den Desktop als Verknüpfung eingetragen wird. Damit kannst du auch Dateiendungen wie z.B. "*.txt" an dein Programm binden. So dass bei einem Doppelklick auf eine *.txt-Datei dein Programm aufgerufen wird. Außerdem hat ein normales Programm auch noch mehrere Ordner mit Ressourcen wie z.B. Bider, Videos, INI-Dateien, usw. Diese werden auch vom Setup-Programm verteilt. Ein gutes Setup-Programm kann sich auch darum kümmern, dass Einträge in die Registry geschrieben werden. Auch Umgebungsvariablen können registriert werden. (Diese stehen bei Windows auch in der Registry.) Ein Setup-Programm kümmert sich auch um die korrekte Registrierung von evt. benötigten ActiveX-(COM)-Komponenten. Und vieles mehr.

Das Installationsprogramm (also nicht das Setupprogramm) läuft nach dem Setup und installiert dann noch die zusätzlichen Abhängigkeiten.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten