252 votes

Importations relatives - ModuleNotFoundError : Aucun module nommé x

C'est la première fois que je m'assois et que je m'essaie à Python 3, et je semble échouer lamentablement. J'ai les deux fichiers suivants :

  1. test.py
  2. config.py

config.py contient quelques fonctions définies ainsi que quelques variables. Je l'ai réduit à ce qui suit :

config.py

debug = True

test.py

import config
print (config.debug)

J'ai aussi un __init__.py

Cependant, j'obtiens l'erreur suivante :

ModuleNotFoundError: No module named 'config'

Je suis conscient que la convention py3 est d'utiliser des importations absolues :

from . import config

Cependant, cela conduit à l'erreur suivante :

ImportError: cannot import name 'config'

Je ne sais donc pas quoi faire... Toute aide est la bienvenue :)

1 votes

Je ne peux pas reproduire l'erreur, comment exécutez-vous ce code ?

0 votes

J'exécute test.py via pyCharm avec Python 3.6. Le vôtre s'exécute-t-il correctement ?

2 votes

Je l'exécute avec idle qui vient avec python, et aussi comme python test.py et cela fonctionne parfaitement bien. Je n'ai pas pyCharm, mais peut-être est-ce une mauvaise configuration de pyCharm qui cause le problème.

2voto

Ryan Points 1893

Comme indiqué dans les commentaires de l'article original, cela semblait être un problème avec l'interpréteur python que j'utilisais pour une raison quelconque, et non quelque chose de mal avec les scripts python. Je suis passé du bundle WinPython à la version officielle python 3.6 de python.org et tout s'est très bien passé.)

2voto

Vivek Garg Points 651

Si vous utilisez python 3+, essayez d'ajouter les lignes suivantes

import os, sys
dir_path = os.path.dirname(os.path.realpath(__file__))
parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))
sys.path.insert(0, parent_dir_path)

2voto

half of a glazier Points 889

Pour moi, le simple fait d'ajouter le répertoire courant a fonctionné.

En utilisant la structure suivante :

└── myproject
    ├── a.py
    └── b.py

a.py :

from b import some_object
# returns ModuleNotFound error

from myproject.b import some_object
# works

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