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
