2009-11-30 12 views
10

Welche Strategie wäre am besten geeignet, um ein Dienstprogrammmodul in meinen Python-Projekten zu verwenden? Da die allgemeinen Module mit neuen Funktionen aktualisiert werden, möchte ich sie nicht in das Python-Installationsverzeichnis einfügen.Freigabe von Dienstprogrammen in Python-Projekten

project1/ 
project2/ 
sharedUtils/ 

Von project1 kann ich nicht "import .. \ sharedUtils" verwenden, gibt es einen anderen Weg? Ich würde lieber nicht hart codiert die „sharedUtils“ location

Vielen Dank im Voraus

Antwort

6

Sie ein separates Standalone-Paket? Und stecke es in die/site-Pakete deiner Python-Installation?

Es gibt auch meinen persönlichen Favoriten, wenn es um Entwicklungsmodus geht: Verwendung von Symlinks und/oder *.pth Dateien.

+3

Interessante Verwendung von Fragezeichen ... – tgray

+1

Da gibt es viele Möglichkeiten ... Ich benutze den "Sokrates-Ansatz": versuche die Leute über die Möglichkeiten zu reflektieren. – jldupont

+2

Wie gehen Sie so mit der Versionskontrolle um? Wenn Sie Ihr Projekt festschreiben, gehen Sie auch manuell zum site-packages-Verzeichnis und machen dasselbe? –

5

Angenommen, Sie haben sharedUtils/utils_foo und sharedUtils/utils_bar. Sie könnten Ihre PYTHONPATH bearbeiten sharedUtils schließen, dann importieren sie in project1 und project2

import utils_foo 
import utils_bar 
etc. 

In Linux verwenden könnten Sie diese wie diese Bearbeitung ~/.profile mit etwas werden tun:

PYTHONPATH=/path/to/sharedUtils:/other/paths 
export PYTHONPATH 

Verwendung Die Umgebungsvariable PYTHONPATH wirkt sich auf die Verzeichnisse aus, die Python bei der Suche nach Modulen durchsucht. Da jeder Benutzer seinen eigenen PYTHONPATH einstellen kann, ist diese Lösung gut für persönliche Projekte.

Wenn Sie möchten, dass alle Benutzer auf der Maschine in der Lage sein, dann zu importieren Module in sharedUtils, Sie dies unter Verwendung einer .pth Datei erreichen können. Wo genau Sie die Datei .pth setzen, hängt möglicherweise von Ihrer Python-Distribution ab. Siehe http://bob.pythonmac.org/archives/2005/02/06/using-pth-files-for-python-development/

+0

Entschuldigung, aber neu zu Python, würden Sie den vollständigen Pfad in PYTHONPATH fest codieren oder "../" verwenden? –

+0

@iKarampa, kein Problem. PYTHONPATH benötigt einen vollständigen (absoluten) Pfad. – unutbu

+0

Wenn Sie Ihre Datei verteilen, müssen Sie alle Utils in einem Verzeichnis irgendwie verketten, und Standardimporte funktionieren wie gewohnt. OK habe es! Danke –

4

Verzeichnisstruktur:

project1/foo.py 
sharedUtils/bar.py 

Mit den Verzeichnissen, wie Sie sie gezeigt haben, von foo.py innerhalb des project1 Verzeichnis, das Sie den relativen Pfad zu sharedUtils hinzufügen können, wie folgt:

import sys 
sys.path.append("../sharedUtils") 
import bar 

Dies vermeidet die Hardcodierung eines Pfades C:/../sharedUtils und funktioniert so lange, wie Sie die Verzeichnisstruktur nicht ändern.