Mam strukturę katalogów podobną do poniższej
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Podczas pracy w programie, notebook.jpynb
jeśli spróbuję użyć importu względnego, aby uzyskać dostęp do funkcji function()
w module.py
:
from ..project1.lib.module import function
Otrzymuję następujący błąd:
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
Czy jest jakiś sposób, aby to działało przy użyciu importu względnego?
Należy zauważyć, że serwer notebooków jest tworzony na poziomie meta_project
katalogu, więc powinien mieć dostęp do informacji w tych plikach.
Zauważ również, że przynajmniej tak jak pierwotnie zamierzano, project1
nie był uważany za moduł i dlatego nie ma __init__.py
pliku, miał po prostu służyć jako katalog systemu plików. Jeśli rozwiązanie problemu wymaga potraktowania go jako modułu i dołączenia __init__.py
pliku (nawet pustego), to jest w porządku, ale nie wystarczy, aby rozwiązać problem.
Dzielę ten katalog między maszyny, a względne importy pozwalają mi używać tego samego kodu wszędzie i często używam notebooków do szybkiego prototypowania, więc sugestie, które obejmują hakowanie razem bezwzględnych ścieżek, raczej nie będą pomocne.
Edycja: W przeciwieństwie do importu względnego w Pythonie 3 , który ogólnie mówi o imporcie względnym w Pythonie 3, a zwłaszcza o uruchamianiu skryptu z katalogu pakietu. Ma to związek z pracą w notebooku jupyter, próbując wywołać funkcję w module lokalnym w innym katalogu, która ma różne aspekty ogólne i szczegółowe.
lib
katalogu.
__init__
w katalogu z pakietami są jakieś pliki?