Was ist der richtige Weg um mit geteilten Modulen in Python zu arbeiten?
Arbeite ich gegen die Annahme Python als Teil der mein team-Entwicklungs-tool-suite. Mit den anderen Sprachen/tools, die wir verwenden, entwickeln wir viele wiederverwendbare Funktionen und Klassen, die speziell für die Arbeit, die wir tun. Diese standardisiert die Art, wie wir Dinge tun und spart eine Menge Rad neu zu erfinden.
Ich kann nicht scheinen zu finden, Beispiele dafür, wie dies erfolgt normalerweise mit Python. Jetzt habe ich eine Entwicklung-Ordner auf einem lokalen Laufwerk, mit mehreren Projekt-Ordner unterhalb dieser, und einer weiteren "gemeinsamen" Ordner, Pakete und Module mit wiederverwendbaren Klassen und Funktionen. Diese "common" Module importiert werden, indem Module in mehreren Projekten.
Development/
Common/
Package_a/
Package_b/
Project1/
Package1_1/
Package1_2/
Project2/
Package2_1/
Package2_2/
In versuchen zu lernen, wie die Verteilung einer Python-Anwendung, es scheint, dass es eine Annahme, dass alle referenzierten Pakete sind unter der top-level-Projekt-Ordner, nicht Sicherheiten. Der Gedanke kam mir, dass vielleicht der richtige Ansatz ist die Entwicklung von gemeinsamen/framework-Module in ein separates Projekt, und einmal getestet, bereitstellen Sie diese zu jeder Entwickler, der die Umgebung durch die Installation des site-packages-Ordner. Aber das wirft auch wieder Fragen der Verteilung.
Kann jemand Licht in diese, oder zeigen Sie mir eine Ressource, die diskutiert dieses Problem?
InformationsquelleAutor der Frage Steve Sawyer | 2013-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den must-read-die erste, die auf diese Art von Sachen ist hier:
Was ist die beste Projektstruktur für ein Python-Anwendung?
falls Sie es noch nicht gesehen haben (und Folgen Sie dem link in der zweiten Antwort).
Der Schlüssel ist, dass jeder große Paket sein kann, als wenn "." war die top-level-directory, was bedeutet, dass es auch richtig funktioniert, bei der Installation in eine site-packages. Was dies bedeutet ist, dass wichtige Pakete sollten alle flach in der oben-Verzeichnis, in:
Dann sowohl Sie (in Ihrer anderen Pakete) und können Ihre Benutzer importieren:
etc
Das heißt, Sie sollten darüber nachdenken, @MattAnderson Kommentar, aber wenn Sie wollen, dass es erscheinen als separat ausführbares Paket, es muss im obersten Verzeichnis.
Hinweis: dieser hört nicht auf Sie (oder andere Benutzer) aus und mache ein:
aber es beendet Sie aus so dass:
direkt.
InformationsquelleAutor der Antwort Ethan Coon
Wenn Sie haben gemeinsame code, den Sie freigeben möchten, die über mehrere Projekte, kann es sich lohnen denken über das speichern dieser code in ein physisch separates Projekt, welches dann importiert, als eine Abhängigkeit, die in Ihren anderen Projekten. Dies wird leicht erreicht, wenn Sie hosten Ihre gemeinsame code-Projekt in github oder bitbucket, wo Sie können, verwenden Sie pip, um es zu installieren in jedem anderen Projekt. Dieser Ansatz hilft nicht nur, die Sie leicht eine gemeinsame code über mehrere Projekte, aber es hilft auch, schützen Sie versehentlich Erstellung von schlechten Abhängigkeiten (d.h. solche, die sich aus Ihrer gemeinsamen code, der nicht den üblichen code).
Den link unten bietet eine gute Einführung in die Verwendung von pip und virtualenv für die Verwaltung von Abhängigkeiten, auf jeden Fall Wert, gelesen zu werden, wenn Sie und Ihr team sind ziemlich neu in der Arbeit mit python, da dies eine sehr gängige Werkzeuge verwendet, für die gerade diese Art von problem:
http://dabapps.com/blog/introduction-to-pip-and-virtualenv-python/
Und der link unten zeigt Ihnen, wie Sie ziehen in Abhängigkeiten von github mit pip:
Wie man Python-Pip die software zu installieren, zu ziehen-Pakete von Github?
InformationsquelleAutor der Antwort robjohncox
Ist das vor allem, weil das aktuelle Arbeitsverzeichnis ist der erste Eintrag in
sys.path
standardmäßig, die macht es sehr bequem zu importieren, Module und packages, die unter diesem Verzeichnis.Wenn Sie es zu entfernen, können Sie nicht auch import-Sachen aus den aktuellen Arbeits-Verzeichnis...
Es ist nicht wirklich ein großes Problem für die Entwicklung. Wenn Sie die Versionskontrolle verwenden, und alle Entwickler check-out der source-tree in der gleichen Struktur, Sie können leicht beschäftigen relativer Pfad hacksum sicherzustellen, der code funktioniert einwandfrei, ohne Durcheinander herum mit Umgebungsvariablen oder symbolischen links.
Dies ist, wo die Dinge können ein bisschen komplizierter, aber nur, wenn Sie planen, um die release-Bibliotheken unabhängig von den Projekten, die Sie verwenden, und/oder mit mehreren Projekt-Installateuren teilen sich die gleichen Bibliotheken. Es ist das der Fall, nehmen Sie einen Blick auf distutils.
Wenn nicht, können Sie einfach beschäftigen die gleichen relativen Pfad hacks verwendet in der Entwicklung, um sicherzustellen, dass Sie Projekt funktioniert "out of the box".
InformationsquelleAutor der Antwort Aya
Ich denke, dass dies die beste Referenz für das erstellen ein ausführbares python-Paket:
link entfernt, da es führt auf eine gehackte Website.
auch nicht das Gefühl, dass Sie brauchen, um das nest alles unter einem einzigen Verzeichnis. Sie können Dinge tun, wie
und dann Dinge tun, wie
from platform.core import coremodule
usw.InformationsquelleAutor der Antwort Cameron Sparr