web-dev-qa-db-fra.com

ImportError: Aucun module nommé - Python

J'ai une application python avec la structure de répertoire suivante:

src
 |
 +---- main
 |
 +---- util
 |
 +---- gen_py
         |
         +---- lib

Dans le package principal, j'ai un python nommé MyServer.py qui contient une instruction d'importation telle que:

from gen_py.lib import MyService

Pour que cette déclaration fonctionne, j'ai placé la ligne suivante au début de MyServer.py:

import sys
sys.path.append('../gen_py/lib')

Lorsque j'exécute MyServer.py dans le terminal, le message d'erreur suivant s'affiche:

ImportError: Aucun module nommé gen_py.lib

Qu'est-ce qui me manque ici?

66
F. Aydemir

Votre modification de sys.path suppose que le répertoire de travail actuel est toujours dans main/. Ce n'est pas le cas. Au lieu de cela, ajoutez simplement le répertoire parent à sys.path:

import sys
import os.path

sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import gen_py.lib

N'oubliez pas d'inclure un fichier __init__.py dans gen_py et lib - sinon, ils ne seront pas reconnus en tant que Python modules.

78
phihag

Pour que l’importation du module Python fonctionne, vous devez avoir "src" dans votre chemin, pas "gen_py/lib".

Lors du traitement d'une importation telle que import gen_py.lib, Il cherche un module gen_py, Puis un sous-module lib.

Comme le module gen_py Ne sera pas dans "../gen_py/lib" (ce sera dans ".."), le chemin que vous avez ajouté ne fera rien pour faciliter le processus d'importation.

Selon l'endroit où vous l'exécutez, essayez d'ajouter le chemin relatif au dossier "src". Peut-être que c'est sys.path.append('..'). Vous pouvez également avoir réussi à exécuter le script directement dans le dossier src, via des chemins relatifs tels que python main/MyServer.py

6
lunixbochs
from ..gen_py.lib import MyService

ou

from main.gen_py.lib import MyService

Assurez-vous d'avoir un (au moins vide) __init__.py fichier sur chaque répertoire.

5
JBernardo

C'est si vous construisez un paquet et que vous trouvez une erreur dans les importations. La réponse n’est pas d’ajouter le paquet à python ou de le faire par programme (que se passe-t-il si votre module est installé et que votre commande l’ajoute à nouveau?) mauvaise façon.

La bonne chose à faire est de: 1) utiliser virtualenv pyvenv-3.4 ou quelque chose de similaire. 2) activer le mode de développement - $ python setup.py develop

3
harishkashyap

assurez-vous d'inclure __init__.py, ce qui fait Python savoir que ces répertoires contiennent des paquets

3
aychen0110

Assurez-vous que le répertoire du projet racine apparaît dans la sortie sys.path. Sinon, veuillez ajouter le chemin du répertoire du projet racine à sys.path.

0
Raghav salotra