Impossible d'importer un module python qui est définitivement installé (mécaniser)

en cours avec l'installation de python (2.7.3) sur ma machine Ubuntu 12.04 et l'importation de modules.

ici, j'ai un problème où j'ai certainement installé la mécanisation à la fois sur ma machine et dans divers environnements virtuels.

j'ai essayé d'installer à partir de pip, easy_install et via python setup.py install à partir de ce rapport: https://github.com/abielr/mechanize .

Tout cela en vain, comme chaque fois que j'entre dans mon Python interactive 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 autres ordinateurs sur lesquels je l'installe n'ont pas de problème (un Mac, ou une machine Windows au travail, par exemple, tout est bon, installe et importe comme d'habitude).

ça me rend fou à ce stade, et je veux juste faire un peu de travail.

mettre à JOUR les INFOS (en réponse aux commentaires) :

easy_install mechanize et chemins:

<me>@<host>:~$ sudo easy_install mechanize
[sudo] password for <me>: 
Processing mechanize
Writing /home/<me>/mechanize/setup.cfg
Running setup.py -q bdist_egg --dist-dir /home/<me>/mechanize/egg-dist-tmp-zXwJ_d
warning: no files found matching '*.html' under directory 'docs'
warning: no files found matching '*.css' under directory 'docs'
warning: no files found matching '*.js' under directory 'docs'
mechanize 0.2.6.dev-20130112 is already the active version in easy-install.pth

Installed /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
Processing dependencies for mechanize==0.2.6.dev-20130112
Finished processing dependencies for mechanize==0.2.6.dev-20130112
<me>@<host>:~$ ^C
<me>@<host>:~$ which pip
/home/<me>/bin/pip
<me>@<host>:~$ which python
/home/<me>/bin/python
<me>@<host>:~$ which easy_install
/home/<me>/bin/easy_install
<me>@<host>:~$ 

SECOND UPDATE: Semble être quelque chose avec mechanize, comme si j'ajoutais n'importe quel autre paquet aléatoire via pip, il n'y a pas de problème (dans ce cas html5lib )

TROISIÈME MISE À JOUR (@DSM)

1)
>>> sys.path
['', '/home/<me>/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',      '/home/<me>/local/lib/python2.7/site-packages/virtualenvwrapper-2.11-py2.7.egg',    '/home/<me>/src/geopy', '/home/<me>/local/lib/python2.7/site-packages/BeautifulSoup-3.2.0-py2.7.egg', '/home/<me>/local/lib/python2.7/site-packages/django_sorting-0.1-py2.7.egg' ...  <so on and so forth but mechanize is not here>]
>>>

2) *pretty long output of which most looks like:*
<me>@<host>:~$ ls -laR /usr/local/lib/python2.7/dist-packages/mech*
/usr/local/lib/python2.7/dist-packages/mechanize:
total 1144
...lots of other files, pretty much same permissions...
-rw-r--r--  1 root staff  24916 Jan 11 01:19 _mechanize.py
...lots of other files...

3)
>>> import imp
>>> imp.find_module("mechanize")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>>

quatrième édition (cela devient ridicule :/): C'est semblable à un problème que j'ai eu avant ( Suppression complète et nouvelle installation de python sur Ubuntu 12.04 ), où si je exécute tout avec sudo, c'est très bien, mais je ne sais pas si je devrais avoir à le faire... qu'est-ce que les autorisations?

68
demandé sur cmaher 2013-01-12 21:07:14

15 réponses

dans mon cas, c'est le problème d'autorisation. Le paquet a été installé d'une façon ou d'une autre avec la permission de root rw seulement, un autre utilisateur ne peut pas juste rw le faire!

60
répondu Paul Wang 2013-05-04 17:55:33

j'ai eu le même problème: le script avec import colorama lançait et importait, mais sudo pip install colorama me disait"paquet déjà installé".

Mon correctif: l'exécution du pip sans sudo : pip install colorama . Puis pip a convenu qu'il fallait l'installer, l'installer, et mon script a fonctionné.

mon environnement est Ubuntu 14.04 32-bit; je pense que j'ai vu cela avant et après que j'ai 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 le paquet, pip installera sans équivoque le paquet dans le "bon" python. Encore une fois, don't utiliser sudo dans ce cas... ensuite, vous obtenez le paquet au bon endroit, mais peut-être avec les permissions root (indésirables).

36
répondu Dan H 2016-04-26 23:37:39

c'est le problème du chemin python.

Dans mon cas, j'ai installé python:

/Library/Frameworks / Python.framework / Versions / 2.6 / bin/ python,

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

le paquet(SOAPpy) que j'ai installé par pip est situé

/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 ajouter des paquets site à PYTHONPATH de façon permanente.

  1. Ouvrir un Terminal
  2. Tapez ouvert .bash_profile
  3. dans le fichier texte qui apparaît, ajouter cette ligne à la fin:

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

  4. Enregistrer le fichier, redémarrer le Terminal, et vous avez terminé
11
répondu user1552891 2016-11-20 04:59:40

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

  1. votre PYTHONPATH est faux,
  2. votre bibliothèque n'est pas installée là où vous pensez qu'elle est
  3. vous avez une autre bibliothèque avec le même nom masquant celui-ci
5
répondu Ali Afshar 2013-01-12 17:19:35

j'ai frappé ma tête contre mon moniteur sur ce jusqu'à ce qu'un interne jeune-hanche m'a dit le secret est à "python setup.py installez " dans le répertoire du module.

pour une raison quelconque, exécuter la configuration à partir de là fait que cela fonctionne.

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 de courir setup.py de n'importe quel autre répertoire en appelant son chemin, vous finissez avec une installation bornée.

NE FONCTIONNE PAS:

python /root/foo/setup.py install

DOES WORK:

cd /root/foo
python setup.py install
3
répondu Locane 2016-06-21 22:32:23

dans mon cas j'avais lancé pip install Django==1.11 et il ne voulait pas importer de l'interpréteur 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é j'ai trouvé un lien appelé python3 donc j'ai utilisé ça. Vous pouvez également changer de lien vers python3.4 . Que serait-il fixer, trop.

2
répondu Chris 2017-06-19 10:39:42

Je ne pouvais pas faire fonctionner correctement mon PYTHONPATH. J'ai réalisé que l'ajout de export a corrigé le problème:

(n'travail)

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

vs.

(n'a pas fonctionné)

PYTHONPATH=$PYTHONPATH:~/test/site-packages
1
répondu George Weber 2016-12-06 17:59:32

j'ai rencontré ceci en essayant d'utiliser le porte-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. :
    • sudo pip uninstall keyring
  2. j'ai utilisé l'option -H de sudo et j'ai réinstallé le porte-clés:
    • sudo -H pip install keyring

Espérons que cette aide.

1
répondu blackleg 2018-09-04 05:56:08

j'ai eu ce même problème, mais aucune des réponses ci-dessus n'a fonctionné. Ça m'a rendue folle jusqu'à ce que je remarque ce système.path était différent après que j'ai importé du projet parent. Il s'est avéré que j'avais utilisé importlib d'écrire une petite fonction pour importer un fichier pas dans la hiérarchie du projet. Mauvaise idée: j'ai oublié que j'avais fait ça. Pire encore, le processus d'importation a été perturbé par le SAJR.chemin--et laissé comme ça. très mauvaise idée.

La solution était d'arrêter ça, et de simplement mettre le fichier que j'avais besoin d'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
répondu user2489809 2016-04-17 19:08:39

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

Je n'ai pas pu 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

lire le message d'erreur correctement me dit que python cherche dans le répertoire courant un telegram.py . Et c'est vrai, j'avais un script qui s'appelait telegram.py et cela a été chargé par python quand j'ai appelé import .

Conclusion, assurez-vous que vous n'avez pas de package.py dans votre dir de travail actuel lorsque vous essayez d'importer. (Et de lire des message d'erreur à fond).

0
répondu Patrick B. 2017-01-10 07:09:29

python -m pip install - m'a aidé à résoudre ce problème. J'ai commencé à faire face à ce problème après la mise à niveau du python to 2.7.14 (de 12 )

0
répondu Rajesh K Jeyapaul 2018-02-07 12:13:34

j'ai pu corriger ce problème par une approche combinée. Tout d'abord, J'ai suivi les conseils de Chris, j'ai ouvert une ligne de commande et j'ai 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 paquets que j'importe. Hélas, au lieu indiqué dans la première étape n'était PAS dans la liste.

dernière étape, j'ai tapé "sys.chemin.annexe ("package_location_seen_in_step_1"). Vous pouvez répéter l'étape deux pour voir l'emplacement est maintenant dans la liste.

étape de Test, essayer d'importer le paquet à nouveau... elle fonctionne.

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

0
répondu MJ_ 2018-04-01 22:34:23

j'ai eu le même problème (sur Windows) et la cause fondamentale dans mon cas était ANTIVIRUS logiciel! Il a la fonctionnalité "Auto-confinement", qui enveloppe le processus d'exécution avec une sorte de machine virtuelle. Les symptômes sont: pip install somemodule fonctionne bien dans une fenêtre cmd-ligne 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 qu'il va gagner du temps à quelqu'un :)

0
répondu Dima Gershman 2018-05-07 06:42:49

lorsque vous installez via easy_install ou pip , est-ce que l'installation est terminée avec succès? Quelle est la sortie complète? Quelle installation python utilisez-vous? Vous devrez peut-être utiliser sudo avant votre commande d'installation, si vous installez des modules dans un répertoire système (Si vous utilisez l'installation du système python, peut-être). Il n'y a pas beaucoup d'information utile dans votre question, mais certains outils qui seront probablement utiles comprennent:

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

  • which python , which pip , ou which easy_install : ceux-ci vous indiqueront l'emplacement de chaque exécutable. Ça peut aider de savoir.

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

-2
répondu Ryan Artecona 2013-01-12 17:26:56

Si vous apprenez à utiliser virtualenv (ce qui est assez mort simple), vous aurez moins de ces questions. Vous allez juste source le virtualenv et ensuite vous utiliserez des paquets locaux (pour le projet).

Il résout beaucoup de maux de tête pour moi, avec des sentiers, des versions, etc.

-5
répondu Jesse Briggs 2013-01-12 17:18:56