J'ai une structure de répertoires similaire à la suivante
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Lorsque vous travaillez dans notebook.jpynb
si je tente d'utiliser une importation par rapport à accéder à une fonction function()
dans module.py
avec:
from ..project1.lib.module import function
J'obtiens l'erreur suivante:
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
Existe-t-il un moyen de faire fonctionner cela en utilisant des importations relatives?
Notez que le serveur notebook est instancié au niveau du meta_project
répertoire, il doit donc avoir accès aux informations de ces fichiers.
Notez également qu'au moins, comme prévu à l'origine, project1
n'a pas été pensé comme un module et n'a donc pas de __init__.py
fichier, il était simplement conçu comme un répertoire de système de fichiers. Si la solution au problème nécessite de le traiter comme un module et d'inclure un __init__.py
fichier (même vide), c'est bien, mais cela ne suffit pas pour résoudre le problème.
Je partage ce répertoire entre les machines et les importations relatives me permettent d'utiliser le même code partout, et j'utilise souvent des blocs-notes pour le prototypage rapide, donc les suggestions qui impliquent de pirater ensemble des chemins absolus sont peu susceptibles d'être utiles.
Edit: Ceci est différent des importations relatives dans Python 3 , qui parle d'importations relatives dans Python 3 en général et - en particulier - d'exécuter un script à partir d'un répertoire de package. Cela a à voir avec le travail dans un notebook jupyter en essayant d'appeler une fonction dans un module local dans un autre répertoire qui a à la fois des aspects généraux et particuliers différents.
lib
annuaire.
__init__
fichiers dans votre répertoire de package?