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?
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!
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).
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.
- Ouvrir un Terminal
- Tapez ouvert .bash_profile
-
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 /
- Enregistrer le fichier, redémarrer le Terminal, et vous avez terminé
le mécanisme d'importation Python fonctionne, vraiment, donc:
- votre PYTHONPATH est faux,
- votre bibliothèque n'est pas installée là où vous pensez qu'elle est
- vous avez une autre bibliothèque avec le même nom masquant celui-ci
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
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.
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
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:
- :
-
sudo pip uninstall keyring
-
- 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.
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.
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).
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
)
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.
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 :)
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/ouecho $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
, ouwhich 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.
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.