Strukturieren von Python-Projekten ohne Pfad-Hacks

9

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?

    
Drxxd 16.08.2017, 10:01
quelle

3 Antworten

2

Ich denke, der beste Weg wäre, sharedlib zu einem echten Paket zu machen. Das bedeutet, die Struktur ein wenig zu ändern:

%Vor%

Und so etwas in setup.py verwenden (teilweise aus Python-Verpackung "Minimal Structure" ):

%Vor%

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 :

  Mit

Setuptools 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.

    
MSeifert 16.08.2017, 10:42
quelle
0

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.

    
mandrewcito 16.08.2017 10:25
quelle
0

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%     
AK47 16.08.2017 10:28
quelle