Seite 1 von 1

Installation, Pfade, Configdatei und Co.

Verfasst: Dienstag 11. September 2007, 20:12
von bogomip
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 :)

Verfasst: Dienstag 11. September 2007, 21:24
von Joghurt
http://docs.python.org/dist/dist.html

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

Re: Installation, Pfade, Configdatei und Co.

Verfasst: Dienstag 11. September 2007, 21:32
von 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.

Verfasst: Dienstag 11. September 2007, 23:21
von veers
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 ;)

Verfasst: Mittwoch 12. September 2007, 23:16
von bogomip
Hat mir sehr geholfen, danke! :)