2 votes

Python ne trouve pas de module dans le même dossier

J'ai vraiment fait de mon mieux pour comprendre les importations en python, mais cela n'a aucun sens pour moi. Je sais qu'il y a un million de fils de SO sur ce sujet mais aucun ne m'a aidé à comprendre ce qui se passe.

J'ai cette structure simple :

project/
    run.py
    datasets/
        __init__.py
        config.py
        datasetA.py

datasetA.py :

from config import classes
dosomething()

run.py :

from datasets import datasetA

Et lorsque j'exécute run.py, j'obtiens ModuleNotFoundError : Aucun module nommé 'config'. Pourquoi ? J'ai essayé d'inclure

import datasetA
import config 

ainsi que

import .datasetA
import .config 

en __init__.py mais cela ne fait aucune différence. L'ensemble de donnéesA voit __package__ = datasets Je pense donc qu'il devrait voir la configuration. run.py voit __package__ = None . Qu'est-ce qui me manque ?

2voto

isaa_ctaylor Points 176

Importations relatives et absolues

Votre question porte sur les différences entre les importations relatives et absolues. Lorsque vous essayez d'importer la configuration de datasetA python cherche dans le répertoire racine, dans ce cas, project/ . Pour résoudre ce problème, il faut utiliser une importation relative dans l'ensemble de données A. Voyez la différence entre les éléments suivants :

# project/datasets/datasetA.py

# Absolute import
from config import classes

# Python checks for an available import at the root of the project
# (e.g. project/ in this case) and fails as it does not exist

# Relative import
from .config import classes

# Python checks in the current directory
# (e.g. project/datasets/) and succeeds

Pour en savoir plus sur les importations relatives et absolues aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X