Impossible d'importer un module définitivement installé

144

Après avoir installé Mechanize , je ne semble pas pouvoir l'importer.

J'ai essayé d'installer à partir de pip, easy_install et via python setup.py installce repo: https://github.com/abielr/mechanize . Tout cela en vain, car chaque fois que j'entre dans mon Python interactif, j'obtiens:

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'ai exécutées précédemment ont indiqué qu'elles s'étaient terminées avec succès, je m'attends donc à ce que l'importation fonctionne. Quelle pourrait être la cause de cette erreur?

roy
la source
Pouvez-vous nous montrer le résultat de la course easy_install? En outre, s'il vous plaît confirmer le chemin complet easy_install, pipet de python.
larsks
Êtes-vous sûr qu'il n'a pas été installé sur la version 2.6 (qui est par défaut sur Ubuntu? (Au moins c'est sur mon Debian)
dav1d
eh bien, le résultat de l'installation facile montre qu'il est installé sur 2.7: Installé /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
roy
@larks - a ajouté cette information dans le post original
roy
Je viens d'essayer cela dans tous les sens - setup.py, easy_install, pip - à partir de pypi et du repo, mais je ne peux pas le faire échouer. Pourriez-vous vérifier sys.pathsi vous cherchez aux bons endroits, ls -laR /usr/local/lib/python2.7/dist-packages/mech*pour vérifier les problèmes d'autorisations, et regarder pour imp.find_module("mechanize")faire la distinction entre les erreurs de ne pas trouver et de ne pas pouvoir survivre à l'importation?
DSM

Réponses:

100

Dans mon cas, c'est un problème de permission. Le package a été installé d'une manière ou d'une autre avec l'autorisation root rw uniquement, les autres utilisateurs ne peuvent tout simplement pas y accéder!

Paul Wang
la source
26
Cela m'est arrivé, juste en courant sudo pip install .... sudo chmod -R ugo+rX /lib/python2.7/site-packages/
Solution
3
J'ai rencontré cela plusieurs fois et je pense que je viens de découvrir la raison: umask est passé par sudo, donc si votre umask personnel est serré et que vous utilisez sudo pour l'installation, les fichiers et les répertoires seront trop restreints. Si vous commencez simplement par su, puis effectuez l'installation à partir d'un shell root complet, l'installation qui en résulte est utilisable (du moins c'est pour moi). C'était pour pip, mais peut également s'appliquer à apt-get. Si d'autres confirment cette cause, peuvent souhaiter modifier la réponse en conséquence?
Brandyn
Ajout aux commentaires jozxyqk: assurez-vous d'avoir le bon répertoire en faisant $ pip show <package_name>
Federico
2
Pareil pour moi. Je travaille avec Python 3.6 sur Mac, donc j'ai sudo chmod 777 /usr/local/lib/python3.6/site-packagesfait l'affaire
Antonio Serrano
3
sudo 777 est toujours une très mauvaise idée
Marx
81

J'ai eu le même problème: le script avec import coloramalançait et ImportError, mais sudo pip install coloramame disait "package déjà installé".

Mon CORRECTIF: pip courir sans sudo : pip install colorama. Puis pip a convenu qu'il devait être installé, 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.

MISE À JOUR : 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 le paquet, pip installera sans équivoque le paquet dans le «bon» python. Encore une fois, n'utilisez pas sudo dans ce cas ... alors vous obtenez le package au bon endroit, mais éventuellement avec des autorisations root (indésirables).

Dan H
la source
1
Vous pouvez également utiliser le drapeau -H de sudo
Graydyn Young
21

C'est le problème du chemin python.

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

/Library/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, tout ce que j'ai fait est d'ajouter des packages de site à 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é
user1552891
la source
Cela a fonctionné pour moi en faisant travailler Jenkins avec python de sélénium.
edst
Cela a fonctionné pour moi dans l'exécution du céleri par le superviseur, lorsque mon script bash a appelé mon script céleri; Le script céleri n'a pas pu importer les modules déjà installés dans mon pip. Merci beaucoup.
Shivam Sharma
Remarque: une autre possibilité d'erreur d'importation est que plusieurs versions de Python sont installées sur votre ordinateur. Par exemple, un du Python du système et un de Miniconda ou Anaconda. Par conséquent, veillez à toujours utiliser le bon "pip" correspondant.
Sanchit le
8

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

  1. Votre PYTHONPATH est faux,
  2. Votre bibliothèque n'est pas installée là où vous pensez qu'elle se trouve
  3. Vous avez une autre bibliothèque avec le même nom masquant celle-ci
Ali Afshar
la source
1
Cela ne peut pas être l'option 3 dans ce cas; cela ne lèverait pas une ImportError.
Martijn Pieters
2
peut-être 2? Je ne sais juste pas pourquoi il s'installerait au mauvais endroit pour cette bibliothèque, où la plupart des autres vont bien.
roy
3
Option 4: Votre PYTHONPATH a raison, votre bibliothèque est là où vous le voulez, vous n'avez pas de bibliothèque masquant cela ... mais parce que vous l'avez utilisé, sudo pip installil a été installé avec des privilèges root, et au moment de l'importation, quelque chose bombarde pour le manque de accès en lecture ou en écriture.
Dan H
2
Pas tout à fait vrai, @MartijnPieters: s'il y avait une importation de la forme "from <package> import <foo>", et si le paquet obstruant n'avait pas de "foo", alors vous obtiendriez une erreur d'importation pour l'option 3.
Dan H
@DanH bien sûr, mais ce n'est pas la forme que l'OP utilise.
Martijn Pieters
8

Je me suis cogné la tête contre mon moniteur 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 la configuration à partir de là le fait 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 de n'importe quel autre répertoire en appelant son chemin, vous vous retrouvez avec une installation bloquée.

NE MARCHE PAS:

python /root/foo/setup.py install

FONCTIONNE:

cd /root/foo
python setup.py install
Locane
la source
7

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 a fourni l'emplacement du paquet installé.

Ensuite, j'ai ouvert python et j'ai tapé 'import sys', puis 'sys.path' pour montrer où mon python recherche les packages que j'importe. Hélas, l'emplacement indiqué à la première étape n'était 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 deux pour voir l'emplacement est maintenant dans la liste.

Étape de test, essayez à nouveau d'importer le package ... cela fonctionne.

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

MJ_
la source
5

J'ai rencontré cela en essayant d'utiliser le trousseau de clés que j'ai installé via sudo pip install keyring. Comme mentionné dans les autres réponses, c'est 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' -Hoption sudo et réinstallé le trousseau de clés:
    • sudo -H pip install keyring

J'espère que cela t'aides.

jambe noire
la source
3

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

Amit Dheemate
la source
D'où, un IDE ou ???
Christopher Kikoti le
2

Je n'ai pas pu faire fonctionner mon PYTHONPATH correctement. J'ai réalisé que l'ajout exportcorrigeait le problème:

(a fonctionné)

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

contre.

(n'a pas marché)

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

Dans mon cas, j'avais couru pip install Django==1.11et il n'importerait pas de l' pythoninterprète.

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

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

Remarquez que l'emplacement dit «3.4». J'ai trouvé que la pythoncommande-é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é, j'ai trouvé un lien appelé python3alors je l'ai utilisé. Vous pouvez également modifier le lien en python3.4. Cela réglerait le problème aussi.

Chris
la source
1

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'espace de noms implicites qui lui permettent de créer des packages sans fichier init .py.

jens_laufer
la source
1

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

Scrotch
la source
1

Assurez-vous également de ne pas confondre pip3avec pip. Ce que j'ai trouvé, c'est que le package installé avec pipne fonctionnait pas python3et vice-versa.

Devansh Maurya
la source
0

Lorsque vous installez via easy_installou pip, est-il terminé avec succès? Quelle est la sortie complète? Quelle installation Python utilisez-vous? Vous devrez peut-être utiliser sudoavant votre commande d'installation, si vous installez des modules dans un répertoire système (si vous utilisez l'installation python système, peut-être). Il n'y a pas beaucoup d'informations utiles dans votre question, mais certains outils qui vous aideront probablement incluent:

  • echo $PYTHONPATHet / ou echo $PATH: lors de l'importation de modules, Python recherche dans l'une de ces variables d'environnement (listes de répertoires, :délimitées) le module souhaité. Les problèmes d'importation sont souvent dus au fait que le bon répertoire est absent de ces listes

  • which python, which pipou which easy_install: ceux-ci vous indiqueront l'emplacement de chaque exécutable. Cela peut aider à savoir.

  • Utilisez virtualenv , comme le suggère @JesseBriggs. Cela fonctionne très bien avec pippour vous aider à isoler et à gérer les modules et l'environnement pour des projets Python séparés.

Ryan Artecona
la source
0

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 avoir importé du projet parent. Il s'est avéré que j'avais utilisé importlib pour écrire une petite fonction afin d'importer un fichier ne figurant pas dans la hiérarchie du projet. Mauvaise idée: j'ai oublié que j'avais fait ça. Pire encore, le processus d'importation s'est brouillé avec le sys.path - et l'a laissé ainsi. Très mauvaise idée.

La solution était d'arrêter cela et de 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.

Ivanlan
la source
0

J'ai eu ce problème avec 2.7 et 3.5 installés sur mon système en essayant de tester un robot 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:

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 dans le répertoire courant un fichier telegram.py. Et à droite, j'avais un script là-bas appelé telegram.py et cela a été chargé par python lorsque j'ai appelé import.

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

Patrick B.
la source
0

J'ai eu un problème similaire (sous Windows) et la cause principale dans mon cas était le logiciel ANTIVIRUS ! Il a la fonction "Auto-Confinement", qui encapsule le processus en cours avec une sorte de machine virtuelle. Les symptômes sont: pip install somemodulefonctionne correctement dans une fenêtre de ligne cmd 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 :)

Dima G
la source
0

Peut-être un peu hors sujet, mais j'ai eu des problèmes import PyYAML. Souligne que vous devez import yaml. (je suppose que c'est un rtfm classique ...)

huch
la source
0

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

Au lieu de cela, l'instance de shell était exécutée dans le virtualenv correct. Par conséquent, pourquoi cela a fonctionné.

aleclara95
la source
0

Cela marche!!!

Cela se produit souvent lorsque le module est installé sur une ancienne version de python ou un autre répertoire, pas de soucis car la solution est simple. - importer le module du répertoire dans lequel le module est installé. Vous pouvez le faire en important d'abord le sysmodule python puis en important à partir du chemin dans lequel le module est installé

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

import <module_name>
Terrence_Freeman
la source
0

La plupart des cas possibles ont déjà été couverts dans des solutions, juste en partageant mon cas, il m'est arrivé que j'ai installé un package dans un environnement (par exemple X) et que j'importais le package dans un autre environnement (par exemple Y). Assurez-vous donc toujours d'importer le package depuis l'environnement dans lequel vous avez installé le package.

Pedram
la source
0

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.

IShaan
la source
0

Dans mon cas, je devais également installer le (s) module (s) pour le superutilisateur.

sudo su
pip install <module>

Apparemment, la superutilisation ne peut pas accéder aux fichiers des utilisateurs normaux dans certaines circonstances.

Zciurus-Alt-Del
la source
0

Pour moi, cela garantissait que la version du module était alignée sur la version de Python que j'utilisais. J'ai construit l'image sur une boîte avec Python 3.6 puis je l'ai injectée dans une image Docker sur laquelle la version 3.7 était installée, puis je me suis cogné la tête quand Python me disait que le module n'était pas installé ...

36m pour Python 3.6 bsonnumpy.cpython-36m-x86_64-linux-gnu.so

37m pour Python 3.7 bsonnumpy.cpython-37m-x86_64-linux-gnu.so

streetster
la source
pip installla version qui correspond à la version de Python que vous utilisez. Quelle erreur obtenez-vous et quelle est la sortie depython --version
streetster
python --version me donne: Python 3.7.7 et quand je vérifie où le paquet est installé avec pip, show librosa donne; Emplacement: /home/ec2-user/anaconda3/lib/python3.7/site-packages comment signifie que le package est au bon endroit, mais lorsque j'importe le package donne: aucun nom de module Je travaille sur l'environnement AWS Sagemaker Pytorch_p36
Walid Bousseta
vous voulez probablement utiliser pytorch_p37?
streetster
il n'y a pas de pytorch_p37
Walid Bousseta
0

Je sais que c'est un article très ancien, mais pour moi, j'ai eu un problème avec un python 32 bits et un python 64 bits installés. Une fois que j'ai désinstallé le python 32 bits, tout a fonctionné comme il se doit.

Moultrie
la source
0

J'ai résolu mon problème selon lequel les mêmes bibliothèques fonctionnaient correctement dans un projet (A), mais l'importation de ces mêmes bibliothèques dans un autre projet (B) provoquait une erreur. J'utilise Pycharm comme IDE sous Windows OS. Donc, après avoir essayé de nombreuses solutions potentielles et échoué à résoudre le problème, j'ai fait ces deux choses (dossier «Venv» supprimé et interpréteur reconfiguré):

1-Dans le projet (B), il y avait un dossier nommé ("venv"), situé dans les bibliothèques externes /. J'ai supprimé ce dossier.

2-Étape 1 (suppression du dossier "venv") provoque une erreur dans la configuration de l'interpréteur Python, et un message s'affiche en haut de l'écran indiquant "Interpréteur python non valide sélectionné pour le projet" et "configurer l'interpréteur python", sélectionnez ce lien et il ouvre une nouvelle fenêtre. Là, dans la liste déroulante "Project Interpreter", il y a une ligne de couleur rouge montrant l'interpréteur invalide précédent. Maintenant, ouvrez cette liste et sélectionnez l'interpréteur Python (dans mon cas, c'est Python 3.7). Appuyez sur "Appliquer" et "OK" en bas et vous êtes prêt à partir.

Remarque: c'était potentiellement le problème où l'environnement virtuel de mon projet (B) ne reconnaissait pas les bibliothèques déjà installées et fonctionnelles.

Hasnain Haider
la source
0

Si vous utilisez un environnement virtuel, utilisez pipenv install <module name>au lieu depip install <module name>

A travaillé pour moi.

Manu
la source
pipenv not found
Walid Bousseta
0

Eu ce problème aussi .. le package a été installé sur Python 3.8.0 mais VS Code exécutait mon script en utilisant une version plus ancienne (3.4)

correction dans le terminal:

py .py

Assurez-vous que vous installez le package sur la bonne version de Python

Aramich100
la source
0

Comme un ami l'a fait pour moi aujourd'hui, voici ce qui m'a aidé (j'utilise Windows):

Appuyez sur «Paramètres» -> «Projet» -> «Interpréteur de projet». Ici, dans la fenêtre de droite, il y a une ligne avec le titre «Interprète de projet» à gauche. Cliquez sur cette ligne et cela ouvrira plusieurs lignes supplémentaires.

Appuyez maintenant sur la ligne «Afficher tout». Une fenêtre s'ouvrira. Dans cette fenêtre, appuyez sur le petit signe «+» dans le coin supérieur droit.

Une nouvelle fenêtre s'ouvrira. Sur la gauche, il y a 4 onglets, appuyez sur le plus en haut, qui dit «Environnement Virtualenv». Maintenant, dans la fenêtre de droite, cochez l'option «Environnement existant». La ligne «Interpreter» deviendra bien visible. Appuyez sur le bouton «...» à droite de la ligne.

Maintenant, une fenêtre de navigation va s'ouvrir. Accédez au répertoire dans lequel vous avez installé Python lui-même . Pas celui avec PyCharm. Lorsque vous y arrivez, choisissez le fichier 'python.exe' et appuyez sur OK (la fenêtre disparaîtra).

Appuyez à nouveau sur OK (cette fenêtre disparaîtra également).

Maintenant, dans cette fenêtre, assurez-vous que la nouvelle ligne que vous avez créée est marquée et appuyez à nouveau sur OK.

Désormais, tous les packages installés doivent être visibles dans l'interpréteur de projet et lus par votre programme.

romain
la source
0

La solution la plus simple qui a fonctionné pour moi que je ne vois pas mentionnée dans ce fil:

J'ai plusieurs versions de Python installées mais j'essayais d'utiliser Python3.7 - j'ai donc dû utiliser:

sudo pip3.7 install <package>

J. Saw
la source