web-dev-qa-db-fra.com

ImportError: aucun module nommé utils

J'essaie d'importer un fichier d'utilitaires mais je rencontre une erreur bizarre uniquement lorsque j'exécute le code via un script.

Quand je lance test.py

emplacement: /home/amourav/Python/proj/test.py

code:

import os
os.chdir(r'/home/amourav/Python/')
print os.listdir(os.getcwd())
print os.getcwd()
from UTILS import *

La sortie est:

['UTILS_local.py', 'UTILS.py', 'proj', 'UTILS.pyc']

/ accueil/amourav/Python

Traceback (dernier appel le plus récent): fichier "UNET_2D_AUG17.py", ligne 11, depuis l'importation UTILS * ImportError: aucun module nommé UTILS

mais quand j'exécute le code via le terminal bash, il semble bien fonctionner

bash-4.1$ python
>>> import os
>>> os.chdir(r'/home/amourav/Python/')
>>> print os.listdir(os.getcwd())

['UTILS_local.py', 'UTILS.py', 'proj', 'UTILS.pyc']

>>> from UTILS import *

bla bla -tout va bien- bla bla

J'exécute Python 2.7.10 sur une machine Linux

11
A.Mouraviev

Votre projet ressemble à ceci:

+- proj
|  +- test.py
+- UTILS.py
+- ...

Si vous souhaitez importer UTILS.py, vous pouvez choisir:

(1) ajoutez le chemin d'accès à sys.path dans test.py

import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
# now you may get a problem with what I wrote below.
import UTILS

(2) créer un package (importations uniquement)

Python
+- proj
|  +- test.py
|  +- __init__.py
+- UTILS.py
+- __init__.py
+- ...

Maintenant, vous pouvez écrire ceci dans test.py si vous import Python.proj.test:

from .. import UTILS

Mauvaise réponse

J'ai eu cette erreur plusieurs fois. Je pense, je me souviens.

Correction: ne pas exécuter test.py, courir ./test.py.

Si vous regardez sys.path, vous pouvez voir qu'il y a une chaîne vide à l'intérieur qui est le chemin du fichier exécuté.

  • test.py ajoute '' à sys.path
  • ./test.py ajoute '.' à sys.path

Les importations ne peuvent être effectuées qu'à partir de ".", Je pense.

6
User