web-dev-qa-db-fra.com

Impossible d'importer un module définitivement installé

Après l'installation de mechanize , il semble que je ne puisse pas l'importer.

J'ai essayé d'installer depuis pip, easy_install et via python setup.py install depuis ce dépôt: https://github.com/abielr/mechanize . Tout cela en vain, car chaque fois que j'entre dans mon interactif Python, je reçois:

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mechanize
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>> 

Les installations que j’avais exécutées précédemment indiquaient qu’elles s’étaient bien terminées. L’importation devrait donc fonctionner. Qu'est-ce qui pourrait causer cette erreur?

76
roy

dans mon cas, c'est un problème de permission. Le paquet était en quelque sorte installé avec la permission root seulement, les autres utilisateurs ne peuvent pas y accéder!

66
Paul Wang

J'ai eu le même problème: script avec import colorama jetait et ImportError, mais Sudo pip install colorama me disait "paquet déjà installé".

Mon correctif: exécutez pip sans Sudo : pip install colorama. Puis pip a convenu qu'il devait être installé, l'a installé et mon script a été exécuté.

Mon environnement est Ubuntu 14.04 32 bits; Je pense avoir vu cela avant et après avoir activé mon virtualenv.

UPDATE: Encore mieux, utilisez python -m pip install <package>. L'avantage de ceci est que, puisque vous exécutez la version spécifique de python dans laquelle vous voulez insérer le paquet, pip l'installera sans équivoque sur le "bon" python. Encore une fois, not n'utilise pas Sudo dans ce cas ... alors vous obtenez le paquet au bon endroit, mais éventuellement avec des permissions root (non désirées).

43
Dan H

C'est le problème du chemin de python.

Dans mon cas, j'ai installé python dans:

/Bibliothèque/Frameworks/Python.framework/Versions/2.6/bin/python,

et il n'y a pas de répertoire site-packages dans python2.6.

Le package (SOAPpy) que j'ai installé par pip se trouve 

/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

Et site-package n’est pas dans le chemin python, je n’ai fait qu’ajouter site-packages à PYTHONPATH de manière permanente.

  1. Ouvrir le terminal
  2. Tapez open .bash_profile
  3. Dans le fichier texte qui apparaît, ajoutez cette ligne à la fin: 

    export PYTHONPATH = $ PYTHONPATH: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

  4. Enregistrez le fichier, redémarrez le terminal et vous avez terminé
12
user1552891

Le mécanisme d'importation Python fonctionne, vraiment, donc, soit:

  1. Votre PYTHONPATH est faux,
  2. Votre bibliothèque n'est pas installée où vous pensez qu'elle est
  3. Vous avez une autre bibliothèque avec le même nom masquant celui-ci
5
Ali Afshar

Je me suis cogné la tête contre mon moniteur à ce sujet jusqu’à ce qu’un jeune stagiaire me dise que le secret est de "python setup.py install" dans le répertoire du module.

Pour une raison quelconque, exécuter le programme d'installation à partir de là le fait simplement fonctionner.

Pour être clair, si le nom de votre module est "foo":

[burnc7 (2016-06-21 15:28:49) git]# ls -l
total 1
drwxr-xr-x 7 root root  118 Jun 21 15:22 foo
[burnc7 (2016-06-21 15:28:51) git]# cd foo
[burnc7 (2016-06-21 15:28:53) foo]# ls -l
total 2
drwxr-xr-x 2 root root   93 Jun 21 15:23 foo
-rw-r--r-- 1 root root  416 May 31 12:26 setup.py
[burnc7 (2016-06-21 15:28:54) foo]# python setup.py install
<--snip-->

Si vous essayez d'exécuter setup.py à partir d'un autre répertoire en appelant son chemin, vous obtenez une installation compliquée.

NE MARCHE PAS:

python /root/foo/setup.py install

FONCTIONNE:

cd /root/foo
python setup.py install
5
Locane

Je n'arrivais pas à faire fonctionner mon PYTHONPATH correctement. J'ai réalisé que l'ajout de export corrigeait le problème:

(a travaillé)

export PYTHONPATH=$PYTHONPATH:~/test/site-packages

vs.

(n'a pas marché)

PYTHONPATH=$PYTHONPATH:~/test/site-packages
2
George Weber

Dans mon cas, j'avais exécuté pip install Django==1.11 et il n'importerait pas à partir de l'interprète python.

En parcourant les commandes de pip, j'ai trouvé pip show qui ressemblait à ceci:

> pip show Django
Name: Django
Version: 1.11
...
Location: /usr/lib/python3.4/site-packages
...

Notez que l'emplacement indique '3.4'. J'ai trouvé que la commande python- était liée à python2.7

/usr/bin> ls -l python
lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7

Juste à côté de cela, j'ai trouvé un lien appelé python3 et je l'ai donc utilisé. Vous pouvez également changer le lien en python3.4. Cela réglerait le problème aussi.

2
Chris

Dans mon cas, c’était un problème avec un fichier init . Py manquant dans le module, que je voulais importer dans un environnement Python 2.7.

Python 3.3+ a des packages d’espaces de noms implicites qui lui permettent de créer des packages sans fichier init . Py.

1
jens_laufer

Je l'ai rencontré en essayant d'utiliser un trousseau que j'avais installé via Sudo pip install keyring. Comme mentionné dans les autres réponses, il s'agit d'un problème d'autorisations dans mon cas.

Ce qui a fonctionné pour moi:

  1. Porte-clés désinstallé:
    • Sudo pip uninstall keyring
  2. J'ai utilisé l'option -H de Sudo et réinstallé le trousseau de clés:
    • Sudo -H pip install keyring

J'espère que cela t'aides.

1
blackleg

J'ai pu corriger ce problème avec une approche combinée. Tout d'abord, j'ai suivi les conseils de Chris, ouvert une ligne de commande et tapé 'pip show packagename' Cela fournissait l'emplacement du paquet installé.

Ensuite, j'ai ouvert python et tapé "import sys", puis "sys.path" pour indiquer où mon python recherche les packages que je importe. Hélas, l'emplacement indiqué à la première étape ne figurait PAS dans la liste. 

Dernière étape, j'ai tapé 'sys.path.append (' package_location_seen_in_step_1 '). Vous pouvez éventuellement répéter l'étape 2 pour voir que l'emplacement est maintenant dans la liste.

Étape de test, essayez d’importer à nouveau le paquet ... ça marche. 

Le mauvais côté? C'est temporaire et vous devez l'ajouter à la liste à chaque fois.

1
MJ_

J'ai eu ce problème exact, mais aucune des réponses ci-dessus n'a fonctionné. Cela m'a rendu fou jusqu'à ce que je remarque que sys.path était différent après l'importation du projet parent. Il s'est avéré que j'avais utilisé importlib pour écrire une petite fonction afin d'importer un fichier ne se trouvant pas dans la hiérarchie du projet. Mauvaise idée: j'ai oublié que j'avais fait ça. Pire encore, le processus d’importation mis à mal avec le sys.path - et l’a laissé ainsi. Très mauvaise idée.

La solution consistait à arrêter cela et à mettre simplement le fichier que je devais importer dans le projet. Une autre approche aurait été de placer le fichier dans son propre projet, car il doit être reconstruit de temps en temps, et la reconstruction peut ou non coïncider avec la reconstruction du projet principal. 

0
ivanlan

Peut-être un peu hors sujet, mais j'avais des problèmes à import PyYAML. Fait remarquer que vous devez import yaml. (suppose que c'est un RTF classique ...)

0
Thomas Kettenbach

Quelque chose qui a fonctionné pour moi était:

python -m pip install -user {package name}

La commande ne nécessite pas Sudo. Cela a été testé sur OSX Mojave.

0
IShaan

J'ai eu un problème similaire en utilisant Django. Dans mon cas, je pouvais importer le module à partir du shell Django, mais pas à partir d'un fichier .py qui importait le module.
Le problème était que j'exécutais le serveur Django (et donc le fichier .py) à partir d'un virtualenv différent à partir duquel le module avait été installé.

Au lieu de cela, l'instance du shell était en cours d'exécution dans le fichier virtualenv approprié. Par conséquent, pourquoi cela a fonctionné.

0
aleclara95

Cela marche!!!

Cela se produit souvent lorsque le module est installé dans une version plus ancienne de python ou dans un autre répertoire. Aucun problème, la solution est simple. - importer le module à partir du répertoire dans lequel le module est installé. Pour ce faire, commencez par importer le module python sys à partir de son chemin d'installation.

import sys
sys.path.append("directory in which module is installed")

import <module_name>
0
Terrence_Freeman

Si les autres réponses mentionnées ne fonctionnent pas pour vous, essayez de supprimer votre cache pip et de réinstaller le paquet. Ma machine fonctionne sous Ubuntu14.04 et se trouvait sous ~/.cache/pip. Supprimer ce dossier a fait l'affaire pour moi.

0
Scrotch

Je suis nouveau sur python .. J'ai résolu ce problème en modifiant le chemin de l'interpréteur de projet.
File -> Settings -> Project -> Project Interpreter

0
Amit Dheemate

La plupart des cas possibles ont déjà été traités dans des solutions. Tout en partageant mon cas, il m'est arrivé d'installer un package dans un environnement (par exemple, X) et de l'importer dans un autre environnement (par exemple, Y). Veillez donc toujours à importer le package à partir de l'environnement dans lequel vous l'avez installé.

0
Pedram

J'ai eu un problème similaire (sur Windows) et la cause principale dans mon cas étaitANTIVIRUSlogiciel! Il a la fonctionnalité "Autonferment" qui enveloppe le processus en cours avec une sorte de machine virtuelle . Les symptômes sont: pip install somemodule fonctionne correctement dans une fenêtre de ligne de commande et import somemodule échoue lorsqu’il est exécuté à partir d’un autre processus avec l’erreur 

ModuleNotFoundError: No module named 'somemodule'

J'espère que cela fera gagner du temps à quelqu'un :)

0
Dima Gershman

J'ai eu ce problème avec 2.7 et 3.5 installés sur mon système essayant de tester un bot de télégramme avec Python-Telegram-Bot .

Je ne pouvais pas le faire fonctionner après l'installation avec pip et pip3, avec Sudo ou sans. J'ai toujours eu:

Traceback (most recent call last):
  File "telegram.py", line 2, in <module>
    from telegram.ext import Updater
  File "$USER/telegram.py", line 2, in <module>
    from telegram.ext import Updater
ImportError: No module named 'telegram.ext'; 'telegram' is not a package

La lecture correcte du message d'erreur m'indique que python recherche un telegram.py dans le répertoire en cours. Et à droite, j’avais un script appelé télégramme.py qui était chargé par python lorsque j’ai appelé import.

Conclusion, assurez-vous que vous n’avez pas de package.py dans votre répertoire de travail actuel lorsque vous essayez d’importer. (Et lisez attentivement le message d'erreur).

0
Patrick B.