Pfade für gesamtes Projekt festlegen

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
wemarch
User
Beiträge: 3
Registriert: Montag 16. November 2015, 20:22

Hallo,

bin seit einiger Zeit an einem ersten Python-Projekt und stehe vor folgender Frage:
Mein Projekt ist etwa so aufgebaut:

Code: Alles auswählen

Hauptverzeichnis
|---input-ordner
|---modul-ordner
|            |---modul1
|            |---modul2
|            |---austauschordner 
|
|---outputdir
Ich muss nun öfter mal Dateien aus dem Input-Ordner auslesen/in den Output und Exchange-Ordner schreiben usw.
Bisher definiere ich dafür in jedem Python-Skript die Ordner in etwa so:

Code: Alles auswählen

import os
THIS_MODULE_PATH = os.path.abspath(os.path.dirname(__file__)) # Pfad zum Ordner, in dem diese Datei liegt
MODULES_PATH = os.path.dirname(THIS_MODULE_PATH) # Pfad zum Elternordner von THIS_MODULE_PATH
PROJECT_PATH = os.path.dirname(MODULES_PATH) # Pfad zum Elternordner von MODULES_PATH
INPUT_FILES_PATH = os.path.join(PROJECT_PATH, 'input_files')
OUTPUT_FILES_PATH = os.path.join(PROJECT_PATH, 'output_files')
FILEXCHANGE_PATH = os.path.join(MODULES_PATH, 'modules_file_exchange')
Das funktioniert auch, aber jetzt würde ich gerne wissen wie es richtig geht.
Kann ich diese Pfade irgendwie global für das ganze Projekt festlegen?

Natürlich bin ich schon ein paar mal über die PATH und PYTHONPATH-Variablen gestolpert, aber so wie ich es verstanden habe, sind diese dazu gut, "Suchpfade" für Module festzulegen. Ich muss dagegen eher Pfade zum Dateiaustausch festlegen. Diese sollten dann jedem Skript/jeder Funktion im Projektordner zur Verfügung stehen.

Würde mich über Hilfestellung freuen. Danke!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Man macht es so wie du es schon machst. Allerdings definiert man sich diese Pfade in *einem* Modul und importiert dieses in anderen Modulen die ebenfalls Zugriff auf diese Konstanten benötigen.
wemarch
User
Beiträge: 3
Registriert: Montag 16. November 2015, 20:22

Das heißt ich mache mir ein Modul <path_def.py> und importiere dann mit

Code: Alles auswählen

from path_def import pathDef
oder so ähnlich?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ich bin mir nicht sicher was pathDef sein soll, es ist auch kein toller Name weil er PEP 8 verletzt.

Außerdem würde man üblicherweise mehrere zusammengehörende Module in einem Package gruppieren. Dein Import würde dann so aussehen:

Code: Alles auswählen

from project.path_def import FILEEXCHANGE_PATH
# oder falls du noch andere modulübergreifende konstanten hast vielleicht auch
from project.constants import FILEEXCHANGE_PATH
wemarch
User
Beiträge: 3
Registriert: Montag 16. November 2015, 20:22

Ok, danke, glaube ich habe es verstanden.
Ich kannte import bisher nur für Funktionen, wusste nicht, dass man damit auch Variablen importieren kann. pathDef sollte daher eine Funktion darstellen.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Du kannst mit einem `from ... import ...` alles aus einem Modul importieren was einem Namen hat und worauf du als Attribut vom Modul (`module.attribute`) zugreifen kannst.
Antworten