Installation, Pfade, Configdatei und Co.

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
bogomip
User
Beiträge: 6
Registriert: Dienstag 28. August 2007, 21:36
Wohnort: Hettenshausen
Kontaktdaten:

Hallo,

bin gerade dabei, ein Programm zu entwickeln. Jetzt stellen sich mir folgende Fragen:

1) Wenn mein Programm fertig ist, wie gebe ich es am besten weiter? Mit oder ohne Installationsroutine?

2) Folge aus 1): Wie sind dann die Pfade? Angenommen ich lade im Programm ein Bild, kann bzw. muss ich dann nur relative Pfade benutzen? Denn der User hat das .py ja sicher nicht im gleichen Verzeichnis, wie ich.

3) Oder kann ich das alles in einer config-Datei Speichern? Dann würde beim FirstRun ein kleiner Assistent alle Daten erfassen und in eine Datei speichern.

4) Macht man grundsätzlich von so config-Dateien Gebrauch? Ich müsste einige Werte meines Programms darin speichern. Wie geht man sowas an? Ganz normal über Datei-E/A? Und in welchem Verzeichnis am cleversten?

Danke für Ratschläge

MfG bogomip :)
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

http://docs.python.org/dist/dist.html

Für Windowsfans gibt es auch noch py2exe (distutils geht natürlich auch mit Windows)
lunar

bogomip hat geschrieben:1) Wenn mein Programm fertig ist, wie gebe ich es am besten weiter? Mit oder ohne Installationsroutine?
Standardmäßig verwendet man die distutils, um Python-Programme weiterzugeben. Mit ein paar Hacks lassen sich dann unter Windows auch .exe-Dateien erstellen.

Unter Linux ist "python setup.py install" wohl üblich, zumal bei Verwendung dieser Infrastruktur sehr einfach Pakete gebaut werden können. Unter Gentoo z.B. ist ein Standar-Distutils-Ebuild nicht länger als 10 Zeilen.

Unter Windows dagegen würde ich neben der Source-Distribution für Erfahrene auch eine Installer-Datei anbieten, die gleich Python und die benötigten Module mitbringt.
2) Folge aus 1): Wie sind dann die Pfade? Angenommen ich lade im Programm ein Bild, kann bzw. muss ich dann nur relative Pfade benutzen? Denn der User hat das .py ja sicher nicht im gleichen Verzeichnis, wie ich.
Die distutils bieten dafür package_data an, wodurch die Daten innerhalb eines Verzeichnisses unterhalb der Paketstruktur zu liegen kommt. Dann kann man Daten so laden:

Code: Alles auswählen

import os

module_directory = os.path.dirname(os.path.abspath(__file__))
image = os.path.join(module_directory, 'images', 'myimage.png')
3) Oder kann ich das alles in einer config-Datei Speichern? Dann würde beim FirstRun ein kleiner Assistent alle Daten erfassen und in eine Datei speichern.
Das ist eher unüblich.
4) Macht man grundsätzlich von so config-Dateien Gebrauch? Ich müsste einige Werte meines Programms darin speichern. Wie geht man sowas an? Ganz normal über Datei-E/A? Und in welchem Verzeichnis am cleversten?
Das kommt darauf an. Unter Windows liegen systemweite Konfigurationsdateien in der Regel im Anwendungsverzeichnis, unter Linux unterhalb von /etc. Diese Dateien sollte man nur Laden, die Anwendung sollte in diese Dateien nichts schreiben, da man sonst Root-Privilegien bräuchte, was zumindest unter Linux nicht gegeben ist.

Für benutzerspezifische Dateien bietet sich das Heimatverzeichnis an. Dazu nimmt man am besten die Rückgabe von "os.path.expanduser('~')". Dort erstellt man unter Linux ein verstecktes Verzeichnis ('~/.anwendungsname'), unter Windows sollte man den Punkt weglassen. Dort liegen dann die Konfigurationsdateien, in welche eine Anwendung auch schreiben kann.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Hm ich denke für Windows User ist ein Installer (Stichwort NSIS) oder ein Zip mit einer exe (py2exe) das einfachste/angenehmste Weg. Vielen Windows-Benutzern kann man meiner Meinung nach nicht zumuten Python zu installieren. Sollen sie halt mit einer Python-Installation pro Anwendung leben.

Und Linux/Unix sieht das etwas anderst aus. Da ist der bevorzugte Weg das Packet Management der verwendeten Distribution. Aber einem Linux User kann man es auch zumuten Python und evtl weitere Abhängigkeiten zu Installieren und dann python setup.py install aufzurufen. Was zu tun ist sollte aber in einer README oder INSTALL Datei beschrieben sein.

Für Entwickler solltest du (zumindest im Falle eines Opensource Projektes, was ich mal hoffe) über ein öffentliches Repository Gedanken machen. In der Python Welt scheint Subversion sehr beliebt zu sein. Ich persönlich mag verteilte Systeme wie git aber lieber.

Nunja bezüglich der ~/.app.config unter Linux verweise ich mal noch auf die XDG Base Directory Specification. Falls du einfach den per-user Status deiner Applikation speichern willst ist pickle eine Überlegung wert ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
bogomip
User
Beiträge: 6
Registriert: Dienstag 28. August 2007, 21:36
Wohnort: Hettenshausen
Kontaktdaten:

Hat mir sehr geholfen, danke! :)
Antworten