[Python] Jupyter notebook ImportError: attempted relative import with no known parent package

Discussão em 'Python' iniciado por Stack, Agosto 11, 2025.

  1. Stack

    Stack Membro Participativo

    Summary


    I've a repository with the following structure:

    phd-notebooks
    ├── notebooks
    | ├── resources
    | | └── utils.py
    | ├── notebooks-group-1
    | | ├── notebook1.ipynb
    | | └── notebook2.ipynb
    | └── notebooks-group-2
    | ├── notebook1.ipynb
    | └── notebook2.ipynb
    ├── .gitignore
    ├── LICENSE
    └── README.md


    In my notebooks, say in notebooks-group-1\notebook1.ipynb for example, I want to import the module utils.py.

    If I try from resources import utils I get ModuleNotFoundError: No module named 'resources', if I try from ..resources import utils I get ImportError: attempted relative import with no known parent package.

    I've tried to debug notebooks-group-1\notebook1.ipynb prompting os.getcwd() and I get notebooks-group-1 as the current working directory.

    I am using Visual Studio Code and a conda environment with python 3.9.13.

    What I've tried


    I've tried adding an __init.py__ file in all folders (notebooks, notebooks\resources, notebooks\notebooks-group-1, notebooks\notebooks-group-2) but I get the same errors. I don't want to use the sys.path.append hack or make my entry point at the top level, as suggested here, because when I will make the repository available I want to make running my notebooks by other people as simple as possible.

    I'm aware of this frequently cited question, but I could not find any solution that would suit my case. Running my script using -m is not possible because I'm using notebooks, and even if was it would go against the requirement of making running my notebooks as simple as possible. Setting __package__ manually is not well-suited for use in real-world code, similarly to the sys.path.append hack. I'm doutbful about using setuptools because resources is supposed to be a folder with a collection of utility modules for the notebooks, not a real package (it feels like an overcomplication).

    How can I import the module utils.py in my notebooks in a pythonic way? Or it's the structure of my repository that is bad?

    Continue reading...

Compartilhe esta Página