wie umgehen mit nichtstandartmodulen?

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
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

hi!
ich weiß, die frage is ungenau, aber präziser geht es nicht.
ich habe mal eine generelle frage.
wenn man nun eine reihe von modulen nutzt, die nicht mitgeliefert werden,
wie weit soll man sich darum kümmern? einfach sagen, dass dieser das modul herunterladen soll? oder wenn nicht vorhanden, es einfach downloaden und installieren (dafür natürlich bei normalusern fehlerabfang einbauen, wenn keine rootrechte vorhanden sind)? oder es einfach mitliefern?
bei den letzten zwei möglichkeiten geht man das risiko ein, eine veraltete version dem user aufzuzwingen, bei der ersten ist es für n00bs schwerer und sie werden eher abgeschreckt.
was meint ihr?
(also ich muss von dem sch***code, den ich schreibe, nicht leben^^
wer davon leben muss, steht anders dazu, aber das ist für mich nicht bei dieser Frage relevant)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also, wenn das Modul pures Python ist, und nicht zu groß, dann würde ichs mitliefern (sofern die Lizenz das zulässt). Wenn nicht gibt es zwei Möglichkeiten: automatisch aus dem Cheeseshop runterladen oder dem User sagen er soll sich das Modul besorgen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

murph hat geschrieben:wenn man nun eine reihe von modulen nutzt, die nicht mitgeliefert werden, wie weit soll man sich darum kümmern?
Hi murph!

Es ist nicht einfach, darauf zu antworten. Ich versuch mal meine Sicht zu diesem Thema zu erklären.

Ich habe es momentan mit zwei Arten von Kunden zu tun.

Jene, die ein kleines Programm brauchen, das z.B. auf eine Datenbank zugreift und ein paar Einträge macht oder ausliest. Und jene, die ein komplettes Programmpaket (SW3) mit Supportvertrag usw. haben.

Die Kunden, die ein kleines Programm haben -- sozusagen von der Stange, die sind mit dem kleinen Programm zufrieden und brauchen keine spezifische Anpassungen und auch keine Unterstützung.
Für diese Kunden packe ich alles, was zum Ausführen benötigt wird, in einen Ordner, erstelle ein Windows-Setup und verschicke dieses Setup. Der Kunde installiert sich das Setup und fertig.

Dazu setze ich **cx_freeze** und **Inno Setup** ein. cx_freeze kümmert sich darum, dass (fast) alles was ich zum Ausführen brauche in einem Ordner liegt. Man muss evt. noch ein paar Dateien (z.B. msvcr71.dll) selber in den Ordner kopieren. Aber das macht nichts. Man kann ja eine BATCH-Datei dafür schreiben.

Für diesen Ordner erstelle ich ein Setup mit Inno Setup. Dabei lasse ich die Dateien des Ordners normalerweise in den Programme-Ordner des Kunden kopieren. Dann noch einen Programm-Ordner und ein Programm-Symbol (einen Link) ins Startmenü. Fertig!

Siehe auch: http://www.python-forum.de/topic-5726.html

Die andere Geschichte sind Kunden die ein komplettes Paket aus Warenwirtschaft, Kassensystem, Berichtswesen usw. bekommen. Da ist das Hauptprogramm noch mit Visual Basic geschrieben und als Datenbank wird Microsoft SQL-Server eingesetzt. Python, pyGTK und wxPython und noch ein paar andere Python-Module werden hier zum Erweitern des Hauptprogrammes und zum Erstellen für kundenspezifische Lösungen herangezogen. In diesem Fall schätze ich es, wenn auf den Rechnern des Kunden Python und alle benötigten Module installiert sind. So kann direkt beim Kunden oder über Fernwartung ein Programmteil in windeseile an die Bedürfnisse des Kunden angepasst werden. Hier würde ich das Paketieren des Codes mit cx_freeze eher als Nachteil betrachten.

Wie mache ich es hier? Ich lasse schon vom Setup des Hauptprogrammes (Install Shield Express) Python installieren. Nach dem Setup des Hauptprogrammes wird automatisch ein sogenannter "ConfigWizard" ausgeführt. Dieser ConfigWizard installiert die vorgegebenen Python-Pakete und Module und kümmert sich darum, dass die Datenbanken korrekt eingerichtet werden.
Das funktionierte bis jetzt nicht schlecht. Allerdings schwenke ich derzeit auf eine andere Art der Installation um.

Mein Ziel ist eine zweigeteilte Installation. Zuerst muss vom Kunden die Programm-Umgebung installiert werden. Bei der Installation der Programm-Umgebung wird Python, pyGTK, wxPython, pyWin32 usw. installiert. Erst dann lässt sich das Hauptprogramm installieren. Das habe ich von der Installation des *Visual Studio .NET* abgeschaut.
Das Setup der Programm-Umgebung prüft was und in welcher Version es installiert ist und fragt den Kunden, ob upgedated werden soll usw.

Das ist natürlich Arbeit, die sich nur rentiert, wenn es sich um ein größeres Programm oder Programmpaket handelt.

Dann gibt es noch den CheeseShop http://cheeseshop.python.org/pypi der als Sammlung von Python-Projekten, -Modulen und -Programmen dient. Man kann dieses Repository als Quelle für die abhängigen Python-Module heranziehen. Dazu erstellt man für sein Programm ein Setup mit den **setuptools** http://cheeseshop.python.org/pypi/setuptools/0.6b3 . Die Abhängigkeiten können aufgelöst werden und setuptools kümmert sich darum, dass beim Installieren deines Programmes, die nötigen Module vom CheeseShop heruntergeladen und ebenfalls installiert werden.
Siehe auch: http://peak.telecommunity.com/DevCenter/PythonEggs

Allerdings ist diese Methode davon abhängig, dass man eine Internetverbindung hat. Man kann zwar die Eggs im Setup mitliefern, aber dann ist der Vorteil der Eggs, das automatische Herunterladen und Installieren der Abhängigkeiten, nicht mehr gegeben.

Mein Fazit:
- Kleine Programme mit cx_freeze packen und mit Inno Setup installieren.

- Große Programme, die flexibel sein sollen und aus einem installierten Python Vorteile (auch mehr Geschwindigkeit) ziehen. Für die rentiert sich ein ausgeklügeltes Setup, das sich darum kümmert, dass Python und andere Abhängigkeiten installiert werden.

- Hobbybereich: Dem Kunden erklären, dass er zuerst Python installieren muss. Dann kann er das Programm mit **EasyInstall** http://peak.telecommunity.com/DevCenter/EasyInstall installieren.

Natürlich/Leider gibt es noch viel mehr Möglichkeiten, ein Python-Programm zum Kunden zu bringen. Dazu könnten dir andere Boardmitglieder sicher noch mehr sagen.

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