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.

15voto

stovfl Points 7200

J'ai essayé votre exemple

from . import config

J'ai obtenu l'erreur système suivante :
/usr/bin/python3.4 test.py
Traceback (dernier appel le plus récent) :
Fichier "test.py", ligne 1, dans
from . import config
SystemError : Le module parent '' n'est pas chargé, impossible d'effectuer une importation relative.


Ça va marcher pour moi :

import config
print('debug=%s'%config.debug)

>>>debug=True

Testé avec Python:3.4.2 - PyCharm 2016.3.2


En plus de cela, PyCharm vous offre Importez ce nom .
Vous devez cliquer sur config et un icône d'aide apparaît. enter image description here

9voto

manasouza Points 2

Définir PYTHONPATH dans le répertoire du projet Root.

Considérer comme UNIX-like :

export PYTHONPATH=.

7voto

HoangYell Points 339

Déclarer correct sys.path liste avant d'appeler le module :

import os, sys

#'/home/user/example/parent/child'
current_path = os.path.abspath('.')

#'/home/user/example/parent'
parent_path = os.path.dirname(current_path)

sys.path.append(parent_path)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'child.settings')

4voto

Carson Crane Points 1111

Cet exemple fonctionne avec Python 3.6.

Je suggère d'aller sur Run -> Edit Configurations dans PyCharm, en supprimant toutes les entrées qui s'y trouvent, et en essayant à nouveau d'exécuter le code à travers PyCharm.

Si cela ne fonctionne pas, vérifiez l'interpréteur de votre projet (Settings -> Project Interpreter) et exécutez les configurations par défaut (Run -> Edit Configurations...).

3voto

Arny Boy Points 53

Pruebe

from . import config

Il s'agit d'importer à partir du même niveau de dossier. Si vous essayez d'importer directement, il suppose qu'il s'agit d'un dossier subordonné.

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