136 votes

Comment résoudre le problème "ImportError : No module named ..." en Python ?

Quelle est la bonne façon de corriger cette erreur ImportError ?

J'ai la structure de répertoire suivante :

/home/bodacydo
/home/bodacydo/work
/home/bodacydo/work/project
/home/bodacydo/work/project/programs
/home/bodacydo/work/project/foo

Et je suis dans le répertoire

/home/bodacydo/work/project

Maintenant, si je tape

python ./programs/my_python_program.py

Je reçois instantanément

ImportError: No module named foo.tasks

En ./programs/my_python_program.py contient la ligne suivante :

from foo.tasks import my_function

Je ne comprends pas pourquoi python ne trouve pas ./foo/tasks.py - il est là.

Si je le fais à partir du shell Python, cela fonctionne :

python
>>> from foo.tasks import my_function

Il ne fonctionne que si je l'appelle via python ./programs/my_python_program.py script.

2voto

quamrana Points 6411

Dans mon esprit, je dois considérer que la foo est une bibliothèque autonome. Je pourrais envisager de la déplacer dans le dossier Lib\site-packages dans une installation python. Je pourrais envisager d'ajouter un foo.pth dans ce fichier.

Je sais qu'il s'agit d'une bibliothèque puisque le ./programs/my_python_program.py contient la ligne suivante :

from foo.tasks import my_function

Il n'est donc pas important que ./programs est un dossier frère de ./foo . C'est le fait que my_python_program.py est exécuté comme un script comme ceci :

python ./programmes/mon_programme_python.py

1voto

Danon Points 1064

Si vous rencontrez ce problème lors de l'utilisation d'une version installée, lors de l'utilisation de setup.py Assurez-vous que votre module est inclus dans packages

setup(name='Your program',
    version='0.7.0',
    description='Your desccription',
    packages=['foo', 'foo.bar'], # add `foo.bar` here

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