Ich habe eine Verzeichnisstruktur ähnlich der folgenden
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Bei der Arbeit in , notebook.jpynb
wenn ich versuche , einen relativen Import zu verwenden , um eine Funktion für den Zugriff auf function()
in module.py
mit:
from ..project1.lib.module import function
Ich erhalte folgende Fehlermeldung:
SystemError 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 mithilfe relativer Importe zum Laufen zu bringen?
Beachten Sie, dass der Notebook-Server auf der Ebene des meta_project
Verzeichnisses instanziiert wird , sodass er Zugriff auf die Informationen in diesen Dateien haben sollte.
Beachten Sie auch, dass zumindest wie ursprünglich beabsichtigt project1
nicht als Modul gedacht war und daher keine __init__.py
Datei enthält, sondern lediglich als Dateisystemverzeichnis gedacht war . Wenn die Lösung des Problems erfordert, dass es als Modul behandelt wird und eine __init__.py
Datei (auch eine leere) enthält, ist dies in Ordnung, reicht jedoch nicht aus, um das Problem zu lösen.
Ich teile dieses Verzeichnis zwischen Computern, und relative Importe ermöglichen es mir, überall denselben Code zu verwenden. Oft verwende ich Notebooks für das schnelle Prototyping. Daher sind Vorschläge, bei denen absolute Pfade gehackt werden, wahrscheinlich nicht hilfreich.
Bearbeiten: Dies ist anders als bei relativen Importen in Python 3 , bei denen es um relative Importe in Python 3 im Allgemeinen und insbesondere um das Ausführen eines Skripts aus einem Paketverzeichnis geht. Dies hat mit der Arbeit in einem Jupyter-Notizbuch zu tun, das versucht, eine Funktion in einem lokalen Modul in einem anderen Verzeichnis aufzurufen, das sowohl unterschiedliche allgemeine als auch bestimmte Aspekte aufweist.
lib
Verzeichnis.
__init__
Dateien in Ihrem Paketverzeichnis?