Ich habe eine gemeinsame Python-Bibliothek, die ich in mehreren Projekten verwende, daher sieht die Struktur so aus:
%Vor%Jetzt verwende ich in jedem Projekt main.py den folgenden Hack, damit es funktioniert:
%Vor%Gibt es einen Weg, dies ohne diesen Hack zu tun? Oder gibt es eine bessere Möglichkeit, die Projektstruktur zu organisieren?
Ich denke, der beste Weg wäre, sharedlib
zu einem echten Paket zu machen. Das bedeutet, die Struktur ein wenig zu ändern:
Und so etwas in setup.py
verwenden (teilweise aus Python-Verpackung "Minimal Structure" ):
Dann installieren Sie es mit python setup.py develop
oder pip install -e .
, wenn Sie sich im Stammverzeichnis des Pakets sharedlib
befinden.
Auf diese Weise werden (mit der Option develop
oder -e
) Änderungen am Inhalt von sharedlib/sharedlib/*
-Dateien sichtbar, ohne das sharedlib
-Paket neu zu installieren - obwohl Sie den Interpreter möglicherweise neu starten müssen, wenn Sie ' re arbeitet in einem interaktiven Dolmetscher. Das liegt daran, dass der Interpreter bereits importierte Pakete zwischenspeichert.
Aus der Dokumentation setuptools
:
MitSetuptools können Sie Ihre Projekte für die Verwendung in einem gemeinsamen Verzeichnis oder Bereitstellungsbereich bereitstellen, ohne jedoch Dateien zu kopieren. Somit können Sie den Code jedes Projekts in seinem Checkout-Verzeichnis bearbeiten und nur Build-Befehle ausführen, wenn Sie die C-Erweiterungen eines Projekts oder ähnlich kompilierte Dateien ändern . [...]
Verwenden Sie dazu den Befehl
setup.py develop
.
(Betonung meiner)
Das Wichtigste ist, dass Sie import sharedlib
jetzt überall finden können - Sie müssen das sharedlib
-Paket nicht mehr in PATH
oder PYTHONPATH
einfügen, weil Python (oder zumindest Python, wo Sie es installiert haben) jetzt ist behandelt sharedlib
wie jedes andere installierte Paket.
Eine gute Möglichkeit, Projekte zu organisieren, ist in diesem Post beschrieben Meiner Meinung nach, wenn es eine gemeinsame lib ist, müssen Sie es als eine echte lib betrachten (in der virtualenv enthalten) oder fügen Sie einen Ordner "lib" zu jedem Projekt.
Die Art und Weise, wie wir es machen, ist die Verwendung von Bash-Entry-Skripten für die Python-Skripte. Unsere Verzeichnisstruktur würde wie folgt aussehen:
%Vor%Unser lib-Ordner enthält dann alle unsere Unterprojekte
%Vor%und wenn wir dann ein Python-Skript ausführen wollen, führen wir es über ein bash-Skript im Verzeichnis bin
aus %Vor%und wenn wir eines unserer Eingabeskripte verwenden
%Vor%Tags und Links python python-import organization project-structure directory-structure