Eine ähnliche Antwort habe ich auch auf die Frage nach Importen aus Geschwisterpaketen gepostet. Sie können es hier sehen .
Lösung ohne sys.path
Hacks
Zusammenfassung
- Wickeln Sie den Code in einen Ordner (zB
packaged_stuff
)
- Verwenden Sie das Erstellungsskript,
setup.py
in dem Sie setuptools.setup () verwenden .
- Pip installiert das Paket im bearbeitbaren Zustand mit
pip install -e <myproject_folder>
- Importieren mit
from packaged_stuff.modulename import function_name
Installieren
Ich gehe von der gleichen Ordnerstruktur aus wie in der Frage
.
└── ptdraft
├── __init__.py
├── nib.py
└── simulations
├── __init__.py
└── life
├── __init__.py
└── life.py
Ich rufe den .
Stammordner auf und in meinem Fall befindet er sich in C:\tmp\test_imports
.
Schritte
1) Fügen Sie a setup.py
zum Stammordner hinzu
Der Inhalt der setup.py
kann einfach sein
from setuptools import setup, find_packages
setup(name='myproject', version='1.0', packages=find_packages())
Grundsätzlich würde "any" setup.py
funktionieren. Dies ist nur ein minimales Arbeitsbeispiel.
2) Verwenden Sie eine virtuelle Umgebung
Wenn Sie mit virtuellen Umgebungen vertraut sind, aktivieren Sie eine und fahren Sie mit dem nächsten Schritt fort. Die Verwendung von virtuellen Umgebungen sind nicht unbedingt erforderlich, aber sie werden wirklich Sie auf lange Sicht helfen (wenn Sie mehr als 1 Projekt laufenden haben ..). Die grundlegendsten Schritte sind (im Stammordner ausführen)
- Erstellen Sie eine virtuelle Umgebung
- Aktivieren Sie die virtuelle Umgebung
. /venv/bin/activate
(Linux) oder ./venv/Scripts/activate
(Win)
Um mehr darüber zu erfahren, googeln Sie einfach "python virtualenv tutorial" oder ähnliches. Sie benötigen wahrscheinlich nie andere Befehle als das Erstellen, Aktivieren und Deaktivieren.
Sobald Sie eine virtuelle Umgebung erstellt und aktiviert haben, sollte Ihre Konsole den Namen der virtuellen Umgebung in Klammern angeben
PS C:\tmp\test_imports> python -m venv venv
PS C:\tmp\test_imports> .\venv\Scripts\activate
(venv) PS C:\tmp\test_imports>
3) Pip Installieren Sie Ihr Projekt im bearbeitbaren Zustand
Installieren Sie Ihr Top-Level-Paket myproject
mit pip
. Der Trick besteht darin, -e
bei der Installation das Flag zu verwenden . Auf diese Weise wird es in einem bearbeitbaren Zustand installiert, und alle an den .py-Dateien vorgenommenen Änderungen werden automatisch in das installierte Paket aufgenommen.
Führen Sie im Stammverzeichnis aus
pip install -e .
(Beachten Sie den Punkt, er steht für "aktuelles Verzeichnis")
Sie können auch sehen, dass es mithilfe von installiert wird pip freeze
(venv) PS C:\tmp\test_imports> pip install -e .
Obtaining file:///C:/tmp/test_imports
Installing collected packages: myproject
Running setup.py develop for myproject
Successfully installed myproject
(venv) PS C:\tmp\test_imports> pip freeze
myproject==1.0
4) Importieren Sie mainfolder
vor jedem Import
In diesem Beispiel mainfolder
wäre das ptdraft
. Dies hat den Vorteil, dass Sie nicht auf Namenskollisionen mit anderen Modulnamen (aus der Python-Standardbibliothek oder Modulen von Drittanbietern) stoßen.
Beispiel Verwendung
nib.py.
def function_from_nib():
print('I am the return value from function_from_nib!')
life.py
from ptdraft.nib import function_from_nib
if __name__ == '__main__':
function_from_nib()
Laufen life.py
(venv) PS C:\tmp\test_imports> python .\ptdraft\simulations\life\life.py
I am the return value from function_from_nib!