[Python] Wenn Sie Ihr eigenes Paket im oberen Verzeichnis importieren und verwenden möchten

Ich möchte mein eigenes Paket mit Python im oberen Verzeichnis importieren und verwenden, konnte jedoch keine Lösung finden, wenn ich nicht über den relativen Pfad importieren oder sys.path im Skript ändern möchte, also schreibe ich es auf.

Erstellen Sie abschließend setup.py und verwenden Sie den Befehl pip install -e ..

Lage

Beispiel für die Verzeichniskonfiguration:

project
+ mypackage
|  + __init__.py
|  + module_a.py
+ program_main
|  + executor
|    + executor.py
|  + tests
|    + executor_test.py

Ich möchte mein eigenes Paket namens "mypackage" aus Sicht von "executer.py" in den oberen Ordner importieren und verwenden.

In meinem Fall gab es in AWS mehrere Verzeichnisse für Lambda-Dienste, und LambdaLayer wurde als allgemeiner Prozess in einem übergeordneten Ordner abgelegt, sodass LambdaLayer lokal nicht korrekt aus Lambda-Funktionen importiert werden konnte.

Darüber hinaus verfügen Lambda-Dienste und Lambda Layer über eine Verzeichnisstruktur, die in der bereitgestellten Umgebung einwandfrei funktioniert, und Sie müssen beim Ausführen von Komponententests mit CICD auf den Pfad achten.

project
+ layers
|  + my_layer_1
|    + ...
|  + ...
+ lambda
|  + service_1
|    + handler.py
|    + serverless.yml
|    + requirements.txt
|    + env
|    + ...
|    + tests
|      + ...
|  + ...
+ setup.py

Ansatz

Sie können Pakete mit setup.py verwalten. Legen Sie die folgende setup.py im Stammverzeichnis ab.

from setuptools import setup, find_packages

setup(name='myproject', version='1.0', packages=find_packages())

find_packages () findet automatisch das Paket, in dem __init __. py existiert. Wenn der Pfad nicht funktioniert oder nicht gefunden wird, können Sie zusätzlich zu "packages" mit "package_dir" spielen oder prüfen, ob "__init __. Py" vorhanden ist.

Installieren Sie anschließend Ihr eigenes Paket, indem Sie den folgenden Befehl im Stammverzeichnis ausführen.

pip install -e .

-e Referenz

e, --editable <path/url>
Install a project in editable mode (i.e. setuptools “develop mode”) from a local project path or a VCS url.

Wenn Sie -e angeben, werden beim Bearbeiten und Speichern Ihres eigenen Pakets die Änderungen automatisch erkannt, sodass Sie Ihr eigenes Paket nicht neu installieren müssen (pip install).

Referenz

https://stackoverflow.com/questions/17155804/confused-about-the-package-dir-and-packages-settings-in-setup-py

Recommended Posts

[Python] Wenn Sie Ihr eigenes Paket im oberen Verzeichnis importieren und verwenden möchten
[Python] Wenn Sie alle Variablen in einer anderen Datei verwenden möchten
Verwenden Sie CASA Toolkit in Ihrer eigenen Python-Umgebung
Ich möchte R-Datensatz mit Python verwenden
Wie Sie pyenv und pyenv-virtualenv auf Ihre eigene Weise verwenden
Wenn Sie möchten, dass Ihre Kollegen dieselbe Sprache verwenden
[Unterprozess] Wenn Sie ein anderes Python-Programm in Python-Code ausführen möchten
Wenn Sie diff in Python ausführen und sowohl Rückkehrcode als auch Ausgabe wünschen
Verwenden Sie einfach Ihre eigenen Funktionen in Python
[Python] Packen und verteilen Sie Ihre eigenen Module
Verwendung ist und == in Python
Wenn Sie mehrere Versionen derselben Python-Bibliothek verwenden möchten (virtuelle Umgebung mit venv)
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
Der Dateiname war in Python schlecht und ich war süchtig nach Import
Wenn Sie Wörter in Python zählen möchten, können Sie bequem Counter verwenden.
Verwendung der C-Bibliothek in Python
Wenn Sie den Chrome-Treiber aktualisieren möchten.
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
Importieren Sie Ihre eigenen Module mit der Python-Entwicklung von Grasshopper
Ich möchte den Fortschritt in Python anzeigen!
So erstellen Sie eine Umgebung, wenn Sie Python2.7 nach der Installation von Anaconda3 verwenden möchten
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Verwenden Sie libsixel, um Sixel in Python auszugeben und das Matplotlib-Diagramm an das Terminal auszugeben.
Ich möchte den Dateinamen, die Zeilennummer und den Funktionsnamen in Python 3.4 erhalten
Es ist praktisch, stac_info und exc_info zu verwenden, wenn Sie Traceback in der Protokollausgabe durch Protokollierung anzeigen möchten.
Wie Sie das aktuelle Verzeichnis in Python in Blender kennen
Versuchen Sie, Ihr eigenes Intro-Quiz mit Python zu verbessern
[Wiedereinführung in Python] Importieren über das übergeordnete Verzeichnis
% Und str.format () in Python. Welches benutzt du?
[Road to Intermediate Python] Definieren Sie in Ihrer eigenen Klasse
Rufen Sie Ihr eigenes Python-Modul aus dem ROS-Paket auf
Verwendung des in Lobe in Python erlernten Modells
Wenn Sie in der for-Anweisung plt.save möchten
Die Programmiersprache, die Sie verwenden möchten
Ich möchte am Ende etwas mit Python machen
Eine Funktionsnotiz, die nützlich ist, wenn Sie den Debugger aufrufen möchten, wenn beim Ausführen eines Python-Skripts ein Fehler auftritt.
Verwenden Sie Python, um Windows und Mac zu überwachen und Informationen zu den Apps zu sammeln, an denen Sie arbeiten
[Django] Memorandum, wenn Sie asynchron kommunizieren möchten [Python3]
Jedi-vim-Verknüpfungsbefehl, mit dem Sie auf die Definitionsquelle und das Definitionsziel in Python verweisen können
Ich kenne? Datenanalyse mit Python oder Dingen, die Sie mit numpy verwenden möchten, wenn Sie möchten
[Kleine Geschichte] Eine sorgfältige Maßnahme, wenn Sie vor dem Import in Python eine Funktion ausführen müssen
So importieren Sie Dateien in Python an eine beliebige Stelle
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
Verwenden Sie aggdraw, wenn Sie mit Kissen schön zeichnen möchten
[Python] Ich möchte die Option -h mit argparse verwenden
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
[Python3] Code, der verwendet werden kann, wenn Sie die Größe von Bildern Ordner für Ordner ändern möchten
Ich möchte die Natur von Python und Pip kennenlernen
Wenn Sie python2.x unter modernem Gentoo Linux verwenden möchten
Wenn Sie ein Argument in die Abschlussfunktion einfügen und später ausführen möchten
Wenn Sie einen UNIX-Befehl in Python ausführen möchten
So schreiben Sie, wenn Sie eine Zahl nach der Gruppennummer setzen möchten, die durch einen regulären Ausdruck in Python ersetzt werden soll
Einführung in die Verwendung von Pytorch Lightning ~ Bis Sie Ihr eigenes Modell formatieren und auf Tensorboard ausgeben ~
Wenn Sie mehrere Zeichen in einer Zeichenfolge ersetzen möchten, ohne reguläre Ausdrücke in der Python3-Serie zu verwenden
Möchten Sie mit Python Selenium auf allgemeine Zwecke warten?
Verarbeitung zur Verwendung von notMNIST-Daten in Python (und versucht, sie zu klassifizieren)
[Python] Lösen des Importproblems aufgrund der unterschiedlichen Einstiegspunkte