ich eine Verzeichnisstruktur ähnlich die folgendenImport lokale Funktion von einem Modul in einem anderen Verzeichnis mit relativ Importen in jupyter Notebook untergebracht mit python3
habemeta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Wenn in notebook.jpynb
arbeiten, wenn ich versuche, einen relativ Import zu verwenden, um eine Funktion zugreifen function()
in module.py
mit:
from ..project1.lib.module import function
ich folgende Fehlermeldung
erhaltenSystemError Traceback (most recent call last)
<ipython-input-7-6393744d93ab> in <module>()
----> 1 from ..project1.lib.module import function
SystemError: Parent module '' not loaded, cannot perform relative import
Gibt es eine Möglichkeit, dies mit relativen Importen zu erreichen?
Hinweis: Der Notebook-Server wird auf der Ebene des Verzeichnisses meta_project
instanziiert, sodass er Zugriff auf die Informationen in diesen Dateien haben sollte.
Hinweis, auch, dass mindestens wie ursprünglich vorgesehen project1
wurde nicht als ein Modul gedacht und daher keine __init__.py
Datei hat, war es nur als Dateisystem-Verzeichnis gemeint. Wenn die Lösung für das Problem erfordert, es als ein Modul zu behandeln und eine __init__.py
Datei (auch eine leere) enthält, ist das in Ordnung, aber dies zu tun ist nicht genug, um das Problem zu lösen.
Ich teile dieses Verzeichnis zwischen Maschinen und relative Importe erlauben mir, den gleichen Code überall zu verwenden, & Ich benutze oft Notebooks für schnelles Prototyping, so dass Vorschläge, die absolute Pfade hacken absolut unwahrscheinlich sind hilfreich.
Edit: Dies ist anders als Relative imports in Python 3, die über relative Einfuhren in Python 3 im Allgemeinen spricht und - insbesondere - ein Skript aus einem Paketverzeichnis ausgeführt wird. Dies hat damit zu tun, dass man in einem jupiterartigen Notizbuch arbeitet, das versucht, eine Funktion in einem lokalen Modul in einem anderen Verzeichnis aufzurufen, das sowohl verschiedene allgemeine als auch bestimmte Aspekte aufweist.
ist es '__init__' Dateien in Ihrem Paket-Verzeichnis? –
Ja, im Verzeichnis 'lib'. – mpacer
Bitte erwähnen Sie es in Ihrer Verzeichnisstruktur in Ihrer Frage –