2009-03-30 5 views
5

Sagen wir, ich habe Projekte x und y in Bruderverzeichnisse: projekte/x und projekte/y.
Es gibt einige Utility-Funktionen, die beiden Projekten in myutils.py und einigen db-Dateien in mydbstuff.py usw. gemeinsam sind.
Das sind kleine Goodies, deshalb möchte ich kein einziges Paket für sie erstellen.Was ist der Python-Weg, um gemeinsame Dateien in mehreren Projekten zu teilen?

Es stellen sich Fragen über den Verbleib solcher Dateien, mögliche Änderungen an PYTHONPATH, die richtige Art und Weise zu importieren, usw.

Was ist die ‚pythonic Weg‘, solche Dateien zu benutzen?

Antwort

9

Der pythonische Weg ist es, ein einziges Zusatzpaket für sie zu erstellen.

Warum möchten Sie kein Paket erstellen? Sie können dieses Paket mit beiden Projekten verteilen, und der Effekt wäre derselbe.

Sie werden es nie richtig für alle Installationsszenarien und Plattformen machen, wenn Sie es mit PYTHONPATH und benutzerdefinierten Importen machen.

Erstellen Sie einfach ein weiteres Paket und in kürzester Zeit fertig sein.

+0

+1: Vermeiden Sie es, sys.path dynamisch zu ändern; Verwenden Sie Pakete oder externe PYTHONPATH-Einstellung. –

1

Sie können Pfad zu freigegebenen Dateien sys.path hinzufügen entweder direkt durch sys.path.append(pathToShared) oder durch .pth Dateien definieren, und fügen Sie sie mit site.addsitedir. Pfaddateien (.pth) sind einfache Textdateien mit einem Pfad in jeder Zeile.

0

ich mit 'erstellen Paket' zustimmen.

Wenn Sie das nicht können, wie wäre es mit symbolischen Links/Junctions (ln -s unter Linux, linkd unter Windows)?

0

Ich würde dafür setuptools empfehlen. Sie können Abhängigkeiten festlegen, um sicherzustellen, dass alle diese Pakete/einzelnen Module vor der Installation eines Pakets im sys.path enthalten sind. Wenn Sie etwas installieren möchten, das nur eine einzige Quelldatei ist, wird automatisch eine einfache setup.py-Datei generiert. Dies kann nützlich sein, wenn Sie sich entschließen, die Paketroute nicht zu wählen.

Wenn Sie dies auf mehreren Computern bereitstellen möchten, richte ich normalerweise einen Webserver mit allen Abhängigkeiten ein, die ich verwenden möchte, damit er sie automatisch installieren kann.

Ich habe auch gute Dinge über paver gehört, aber ich habe es selbst nicht benutzt.

Verwandte Themen