Erreur Python "ImportError : Aucun module nommé&quot ;

Python est installé dans un répertoire local.

L'arborescence de mes répertoires ressemble à ceci :

(local directory)/site-packages/toolkit/interface.py

Mon code se trouve ici :

(local directory)/site-packages/toolkit/examples/mountain.py

Pour exécuter l'exemple, j'écris python mountain.py, et dans le code j'ai :

from toolkit.interface import interface

Et j'obtiens l'erreur :

Traceback (most recent call last):
  File "mountain.py", line 28, in ?
    from toolkit.interface import interface
ImportError: No module named toolkit.interface

J'ai déjà vérifié sys.path et j'y trouve le répertoire /site-packages. J'ai également le fichier __init__.py.bin dans le dossier toolkit pour indiquer à Python qu'il s'agit d'un paquetage. J'ai également un fichier __init__.py.bin dans le répertoire examples.

Je ne sais pas pourquoi Python ne trouve pas le fichier alors qu'il est dans sys.path. Avez-vous une idée ? Peut-il s'agir d'un problème de permissions ? Ai-je besoin d'une autorisation d'exécution ?

Solution

D'après vos commentaires sur le post d'orip, je suppose que c'est ce qui s'est passé :

  1. Vous avez édité __init__.py sous windows.
  2. L'éditeur de Windows a ajouté quelque chose de non-imprimant, peut-être un retour chariot (la fin de ligne dans Windows est CR/LF ; dans unix c'est LF seulement), ou peut-être un CTRL-Z (fin de fichier de Windows).
  3. Vous avez utilisé WinSCP pour copier le fichier sur votre machine unix.
  4. WinSCP s'est dit : " Ceci contient quelque chose qui n'est pas du texte de base ; je vais mettre une extension .bin pour indiquer des données binaires " ;
  5. L'absence de __init__.py (maintenant appelé __init__.py.bin) signifie que python ne comprend pas toolkit comme un paquet.
  6. Vous créez __init__.py dans le répertoire approprié et tout fonctionne... ?
Commentaires (7)

Fait

(local directory)/site-packages/toolkit

a un __init__.py ?

Pour permettre à import de marcher dans vos répertoires, chaque répertoire doit avoir un fichier __init__.py.

Commentaires (2)

Pour marquer un répertoire comme un paquet, vous avez besoin d'un fichier nommé __init__.py, cela vous aide-t-il ?

Commentaires (8)