"ImportError: aucun module nommé" lors de l'exécution du script Python

j'essaye de lancer un script qui lance, entre autres choses, un script python. Je reçois un ImportError: aucun module nommé ... cependant, si je lance ipython et que j'importe le même module de la même manière par l'intermédiaire de l'interpréteur, le module est accepté.

que se passe-t-il, et comment puis-je le réparer? J'ai essayé de comprendre comment python utilise PYTHONPATH mais je suis complètement confus. Toute aide serait grandement appréciée.

91
demandé sur michael 2013-03-20 07:10:19

11 réponses

cette question se pose en raison de la façon dont L'interpréteur IPython en ligne de commande utilise votre chemin courant par rapport à la façon dont un processus séparé fait (que ce soit un ordinateur portable IPython, un processus externe, etc.). IPython cherchera des modules à importer qui ne se trouvent pas seulement dans votre système.chemin d'accès, mais aussi sur votre répertoire de travail courant. Lorsque vous démarrez un interpréteur à partir de la ligne de commande, le répertoire courant dans lequel vous travaillez est le même que celui dans lequel vous avez démarré ipython. Si vous run

import os
os.getcwd() 

vous verrez que c'est vrai.

cependant, disons que vous utilisez un notebook ipython, Lancez os.getcwd() et votre répertoire de travail actuel est à la place le dossier dans lequel vous avez dit au notebook d'opérer dans votre ipython_notebook_config.py fichier (typiquement en utilisant le paramètre c.NotebookManager.notebook_dir ).

la solution est de fournir à l'interpréteur python le chemin-vers-votre-module. La solution la plus simple est de ajoutez ce chemin à votre sys.liste des chemins. Dans votre carnet, essayez d'abord:

import sys
sys.path.append('my/path/to/module/folder')

import module-of-interest

si cela ne fonctionne pas, vous avez un problème différent sur vos mains sans rapport avec le chemin-à-importer et vous devriez fournir plus d'informations sur votre problème.

la meilleure façon (et plus permanente) de résoudre ce problème est de définir votre PYTHONPATH , qui fournit à l'interpréteur des répertoires supplémentaires pour rechercher des paquets/modules python. L'édition ou de l' définir le PYTHONPATH comme un var global dépend de l'os, et est discuté en détail ici pour Unix ou Windows .

119
répondu tyleha 2017-05-23 11:33:26

il suffit de créer un fichier Python vide avec le nom __init__.py sous le dossier qui affiche l'erreur, pendant que vous exécutez le projet python.

11
répondu Mohideen ibn Mohammed 2017-11-20 11:23:11

assurez-vous qu'ils utilisent tous les deux le même interprète. Cela m'est arrivé sur Ubuntu:

$ ipython3
> sys.version
'3.4.2 (default, Jun 19 2015, 11:34:49) \n[GCC 4.9.1]'

$ python3
> sys.version
'3.3.0 (default, Nov 27 2012, 12:11:06) \n[GCC 4.6.3]'

et sys.path étaient différents entre les deux interprètes. Pour le réparer, J'ai enlevé Python 3.3.

8
répondu z0r 2015-07-24 01:08:40

faire sys.path.append('my-path-to-module-folder') marchera, mais pour éviter d'avoir à faire cela en IPython chaque fois que vous voulez utiliser le module, vous pouvez ajouter export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH" à votre fichier ~/.bash_profile .

4
répondu acannon828 2014-07-29 18:37:11

la principale raison est le sys.les chemins de Python et D'IPython sont différents.

consultez lucypark lien , la solution fonctionne dans mon cas. Cela se produit lors de l'installation opencv par

conda install opencv

et obtenu erreur d'importation dans iPython, Il ya trois étapes pour résoudre ce problème:

import cv2
ImportError: ...

1. Vérifier le chemin en Python et iPython avec la commande suivante

import sys
sys.path

vous devriez trouver qu'ils sont différents résultat. Deuxième étape, il suffit d'utiliser sys.path.append pour résoudre le raté chemin par essai et erreur.

2. Solution temporaire

Dans iPython:

import sys
sys.path.append('/home/osboxes/miniconda2/lib/python2.7/site-packages')
import cv2

le ImportError:.. Problème résolu

3. Solution permanente

créer un profil iPython et mettre l'ajout initial:

Dans le shell bash:

ipython profile create
... CHECK the path prompted , and edit the prompted config file like my case
vi /home/osboxes/.ipython/profile_default/ipython_kernel_config.py

dans vi, ajouter au dossier:

c.InteractiveShellApp.exec_lines = [
 'import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")'
]

fait

3
répondu Jesse 2017-05-28 13:08:42

avant d'installer ipython, j'ai installé des modules via easy_install; dites sudo easy_install mechanize .

après avoir installé ipython, j'ai dû relancer easy_install pour qu'ipython reconnaisse les modules.

2
répondu pandorabob 2013-10-01 19:40:03

si vous l'exécutez depuis la ligne de commande, parfois l'interpréteur python n'est pas au courant du chemin où chercher les modules.

ci-dessous est la structure de l'Annuaire de mon projet:

/project/apps/..
/project/tests/..

je courais sous la commande:

>> cd project

>> python tests/my_test.py

après avoir exécuté au-dessus de la commande j'ai obtenu au-dessous de l'erreur

no module named lib

lib a été importé en my_test.py

j'ai imprimé sys.chemin d'accès et j'ai découvert que le chemin du projet sur lequel je travaille n'est pas disponible dans LA SAJR.chemin list

j'ai ajouté le code ci-dessous au début de mon script my_test.py .

import sys
import os

module_path = os.path.abspath(os.getcwd())    

if module_path not in sys.path:       

    sys.path.append(module_path)

Je ne suis pas sûr que ce soit une bonne façon de le résoudre, mais oui, ça a marché pour moi.

1
répondu Raghav salotra 2017-09-11 10:22:50

avait un problème similaire, corrigé en appelant python3 au lieu de python , mes modules étaient en Python3.5.

0
répondu peter n 2016-05-01 21:38:21

j'ai trouvé une autre source de cet écart:

j'ai ipython installé à la fois localement et en commun dans virtualenvs. Mon problème était que, à l'intérieur d'un virtualenv nouvellement créé avec ipython, le système ipython a été repris, qui était une version différente que le python et ipython dans le virtualenv (a 2.7.x Contre a 3.5.x), et de l'hilarité s'ensuivit.

je pense que la chose intelligente à faire chaque fois que l'installation de quelque chose qui aura un binaire dans yourvirtualenv/bin est d'exécuter immédiatement rehash ou similaire pour n'importe quel shell que vous utilisez afin que le bon python/ipython soit détecté. (Vérifier s'il y a des crochets pip post-installation appropriés...)

0
répondu kaleissin 2017-07-12 09:59:55

supprimer pathlib et le réinstaller.

supprimer le pathlib dans le dossier sitepackages et réinstaller le paquet pathlib en utilisant la commande pip.

pip install pathlib

-1
répondu user3233042 2017-06-05 05:22:48

C'est ainsi que je l'ai fixé:

import os
import sys
module_path = os.path.abspath(os.getcwd() + '\..')
if module_path not in sys.path:
    sys.path.append(module_path)
-1
répondu pomber 2017-06-14 22:07:19