Ein definitiv installiertes Modul kann nicht importiert werden

144

Nach der Installation von mechanize kann ich es anscheinend nicht importieren.

Ich habe versucht, über pip, easy_install und über python setup.py installdieses Repo zu installieren : https://github.com/abielr/mechanize . All dies ohne Erfolg, da ich jedes Mal, wenn ich mein interaktives Python betrete, Folgendes erhalte:

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
>>> 

Die Installationen, die ich zuvor ausgeführt habe, haben gemeldet, dass sie erfolgreich abgeschlossen wurden, sodass ich davon ausgehe, dass der Import funktioniert. Was könnte diesen Fehler verursachen?

Roy
quelle
Können Sie uns die Ausgabe des Laufens zeigen easy_install? Auch bestätigen Sie bitte den vollständigen Pfad easy_install, pipund von python.
Larsks
Sind Sie sicher, dass es nicht auf 2.6 installiert wurde (was bei Ubuntu Standard ist? (Zumindest bei meinem Debian)
dav1d
Nun, die Ausgabe von easy install zeigt, dass es auf 2.7 installiert ist: Installed /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
roy
@ Larks - fügte hinzu, dass Informationen in Original Post
Roy
Ich habe es gerade auf jede Art und Weise versucht - setup.py, easy_install, pip - von pypi und dem Repo, aber ich kann es nicht zum Scheitern bringen. Könnten Sie überprüfen sys.path, ob Sie an den richtigen Stellen suchen, auf Berechtigungsprobleme ls -laR /usr/local/lib/python2.7/dist-packages/mech*prüfen und imp.find_module("mechanize")zwischen Fehlern, die nicht gefunden werden können, und Fehlern, die nicht importiert werden können, unterscheiden?
DSM

Antworten:

100

In meinem Fall handelt es sich um ein Berechtigungsproblem. Das Paket wurde irgendwie nur mit der Berechtigung root rw installiert, andere Benutzer können einfach nicht darauf rw!

Paul Wang
quelle
26
Das ist mir passiert, nur gerannt sudo pip install .... Einfache Lösung:sudo chmod -R ugo+rX /lib/python2.7/site-packages/
jozxyqk
3
Ich bin schon oft darauf gestoßen und ich glaube, ich habe gerade den Grund entdeckt: umask wird durch sudo geleitet. Wenn also Ihre persönliche umask eng ist und Sie sudo für die Installation verwenden, werden die Dateien und Verzeichnisse übermäßig eingeschränkt. Wenn Sie einfach zuerst su und dann die Installation von einer vollständigen Root-Shell aus durchführen, ist die resultierende Installation verwendbar (zumindest für mich). Dies war für pip, kann aber auch für apt-get gelten. Wenn andere diese Ursache bestätigen, möchten Sie die Antwort möglicherweise entsprechend ändern?
Brandyn
Hinzufügen zu jozxyqk Kommentaren: Stellen Sie sicher, dass Sie das richtige Verzeichnis haben, indem Sie $ pip show <Paketname>
Federico
2
Auch für mich. Ich arbeite mit Python 3.6 auf dem Mac, genau sudo chmod 777 /usr/local/lib/python3.6/site-packageswie der Trick
Antonio Serrano
3
sudo 777 ist immer eine sehr schlechte Idee
Marx
81

Ich hatte das gleiche Problem: Skript mit import coloramawarf und ImportError, sudo pip install coloramasagte mir aber "Paket bereits installiert".

Mein Fix: Pip ohne Sudo ausführen : pip install colorama. Dann stimmte pip zu, dass es installiert werden musste, installierte es und mein Skript lief.

Meine Umgebung ist Ubuntu 14.04 32-Bit; Ich glaube, ich habe das vor und nach der Aktivierung meiner virtuellen Umgebung gesehen.

UPDATE : noch besser verwenden python -m pip install <package>. Dies hat den Vorteil, dass pip das Paket eindeutig in der "richtigen" Python installiert, da Sie die spezifische Python-Version ausführen, in der das Paket enthalten sein soll. Auch hier nicht sudo in diesem Fall benutzt ... dann bekommen Sie das Paket an der richtigen Stelle, aber möglicherweise mit (unerwünschten) root - Rechten.

Dan H.
quelle
1
Alternativ können Sie
Sudos
21

Es ist das Python-Pfad-Problem.

In meinem Fall habe ich Python installiert in:

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

und es gibt kein Site-Packages-Verzeichnis in Python2.6.

Das von pip installierte Paket (SOAPpy) befindet sich

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

Und das Site-Paket befindet sich nicht im Python-Pfad. Ich habe lediglich PYTHONPATH dauerhaft Site-Pakete hinzugefügt.

  1. Terminal öffnen
  2. Geben Sie open .bash_profile ein
  3. Fügen Sie in der angezeigten Textdatei diese Zeile am Ende hinzu:

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

  4. Speichern Sie die Datei, starten Sie das Terminal neu und fertig
user1552891
quelle
Dies hat mir geholfen, Jenkins dazu zu bringen, mit Selenpython zu arbeiten.
15.
Dies funktionierte für mich beim Ausführen von Sellerie durch den Supervisor, als mein Bash-Skript mein Sellerieskript aufrief. Sellerieskript konnte die bereits installierten Module nicht in meinen Pip importieren. Danke vielmals.
Shivam Sharma
Hinweis: Eine weitere Möglichkeit des Importfehlers besteht darin, dass auf Ihrem Computer mehrere Versionen von Python installiert sind. Zum Beispiel eine aus Python des Systems und eine aus Miniconda oder Anaconda. Verwenden Sie daher immer den richtigen "pip".
Sanchit
8

Der Python-Importmechanismus funktioniert auch wirklich:

  1. Dein PYTHONPATH ist falsch,
  2. Ihre Bibliothek wird nicht dort installiert, wo Sie denken
  3. Sie haben eine andere Bibliothek mit demselben Namen, die diese maskiert
Ali Afshar
quelle
1
In diesem Fall kann es nicht Option 3 sein. das würde keinen ImportError auslösen.
Martijn Pieters
2
vielleicht 2? Ich weiß nur nicht, warum es für diese eine Bibliothek am falschen Ort installiert wird, wo die meisten anderen in Ordnung sind.
Roy
3
Option 4: Ihr PYTHONPATH ist richtig, Ihre Bibliothek ist dort, wo Sie es möchten, Sie haben keine Bibliothek, die dies maskiert ... aber weil Sie sie verwendet haben, wurde sudo pip installsie mit Root-Privilegien installiert, und zum Zeitpunkt des Imports bombardiert etwas aus Mangel an Lese- oder Schreibzugriff.
Dan H
2
Nicht ganz richtig, @MartijnPieters: Wenn das Formular "aus <Paket> import <foo>" importiert wurde und das blockierende Paket kein "foo" hatte, wird für Option 3 ein Importfehler angezeigt.
Dan H
@ DanH sicher, aber das ist nicht die Form, die das OP verwendet.
Martijn Pieters
8

Ich habe meinen Kopf gegen meinen Monitor geschlagen, bis mir ein Praktikant mit jungen Hüften sagte, das Geheimnis sei, "python setup.py install" im Modulverzeichnis zu installieren .

Wenn Sie das Setup von dort aus ausführen, funktioniert es aus irgendeinem Grund einfach.

Um klar zu sein, wenn der Name Ihres Moduls "foo" ist:

[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-->

Wenn Sie versuchen, setup.py von einem anderen Verzeichnis aus auszuführen, indem Sie dessen Pfad aufrufen, erhalten Sie eine fehlerhafte Installation.

FUNKTIONIERT NICHT:

python /root/foo/setup.py install

FUNKTIONIERT:

cd /root/foo
python setup.py install
Locane
quelle
7

Ich konnte dieses Problem mit einem kombinierten Ansatz beheben. Zuerst folgte ich Chris 'Rat, öffnete eine Befehlszeile und tippte' pip show packagename 'ein. Dies gab den Speicherort des installierten Pakets an.

Als nächstes öffnete ich Python und tippte 'import sys' und dann 'sys.path' ein, um zu zeigen, wo mein Python nach Paketen sucht, die ich importiere. Leider war der im ersten Schritt gezeigte Ort NICHT in der Liste enthalten.

Im letzten Schritt habe ich 'sys.path.append (' package_location_seen_in_step_1 ') eingegeben. Optional können Sie Schritt zwei wiederholen, um zu sehen, dass sich der Speicherort jetzt in der Liste befindet.

Testschritt, versuche das Paket erneut zu importieren ... es funktioniert.

Der Nachteil? Es ist vorübergehend und muss jedes Mal zur Liste hinzugefügt werden.

MJ_
quelle
5

Ich bin darauf gestoßen, als ich versucht habe, einen Schlüsselring zu verwenden, über den ich installiert habe sudo pip install keyring. Wie in den anderen Antworten erwähnt, handelt es sich in meinem Fall um ein Berechtigungsproblem.

Was hat bei mir funktioniert:

  1. Deinstallierter Schlüsselbund:
    • sudo pip uninstall keyring
  2. Ich habe die -HOption von sudo verwendet und den Schlüsselring neu installiert:
    • sudo -H pip install keyring

Hoffe das hilft.

Schwarzbein
quelle
3

Ich bin neu in Python. Ich habe dieses Problem behoben, indem ich den Pfad des Projektinterpreters geändert habe.
File -> Settings -> Project -> Project Interpreter

Amit Dheemate
quelle
Von wo eine IDE oder ???
Christopher Kikoti
2

Ich konnte meinen PYTHONPATH nicht richtig zum Laufen bringen. Ich habe festgestellt, dass exportdas Problem durch Hinzufügen behoben wurde:

(funktionierte)

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

vs.

(funktioniert nicht)

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

In meinem Fall war ich gelaufen pip install Django==1.11und es würde nicht vom pythonInterpreter importiert .

Beim Durchsuchen der Befehle von pip habe ich Folgendes gefunden pip show:

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

Beachten Sie, dass an der Stelle "3.4" steht. Ich fand, dass der python-Befehl mit verknüpft warpython2.7

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

Gleich daneben habe ich einen Link namens gefunden, python3also habe ich diesen benutzt. Sie können auch den Link zu ändern python3.4. Das würde es auch beheben.

Chris
quelle
1

In meinem Fall war es ein Problem mit einer fehlenden init .py-Datei im Modul, das ich in eine Python 2.7-Umgebung importieren wollte.

Python 3.3+ verfügt über implizite Namespace-Pakete, mit denen Pakete ohne init .py-Datei erstellt werden können.

jens_laufer
quelle
1

Wenn die anderen genannten Antworten für Sie nicht funktionieren, löschen Sie den Pip-Cache und installieren Sie das Paket neu. Auf meinem Computer läuft Ubuntu14.04 und es befand sich unter ~/.cache/pip. Das Löschen dieses Ordners hat den Trick für mich getan.

Scrotch
quelle
1

Stellen Sie außerdem sicher , dass Sie nicht zu verwechseln pip3mit pip. Was ich fand, war, dass das mit installierte Paket pipnicht funktionierte python3und umgekehrt.

Devansh Maurya
quelle
0

Wenn Sie über easy_installoder installieren pip, wird die Installation erfolgreich abgeschlossen? Was ist die volle Ausgabe? Welche Python-Installation verwenden Sie? Möglicherweise müssen Sie sudovor Ihrem Installationsbefehl verwenden, wenn Sie Module in einem Systemverzeichnis installieren (wenn Sie möglicherweise die Systempython-Installation verwenden). Ihre Frage enthält nicht viele nützliche Informationen, aber einige Tools, die wahrscheinlich helfen werden, sind:

  • echo $PYTHONPATHund / oder echo $PATH: Beim Importieren von Modulen durchsucht Python eine dieser Umgebungsvariablen (Liste der Verzeichnisse, getrennt :) nach dem gewünschten Modul. Importprobleme sind häufig darauf zurückzuführen, dass in diesen Listen nicht das richtige Verzeichnis vorhanden ist

  • which python,, which pipoder which easy_install: Diese geben Ihnen den Speicherort jeder ausführbaren Datei an. Es kann helfen zu wissen.

  • Verwenden Sie virtualenv , wie @JesseBriggs vorschlägt. Es funktioniert sehr gut pip, um die Module und die Umgebung für separate Python-Projekte zu isolieren und zu verwalten.

Ryan Artecona
quelle
0

Ich hatte genau dieses Problem, aber keine der obigen Antworten hat funktioniert. Es machte mich verrückt, bis ich bemerkte, dass sys.path anders war, nachdem ich aus dem übergeordneten Projekt importiert hatte. Es stellte sich heraus, dass ich importlib verwendet hatte, um eine kleine Funktion zu schreiben, um eine Datei zu importieren, die nicht in der Projekthierarchie enthalten ist. Schlechte Idee: Ich habe vergessen, dass ich das getan habe. Schlimmer noch, der Importprozess hat sich mit dem sys.path vermischt - und es so belassen. Sehr schlechte Idee.

Die Lösung bestand darin, dies zu stoppen und einfach die Datei zu platzieren, die ich zum Importieren in das Projekt benötigte. Ein anderer Ansatz wäre gewesen, die Datei in ein eigenes Projekt zu stellen, da sie von Zeit zu Zeit neu erstellt werden muss und die Neuerstellung möglicherweise mit der Neuerstellung des Hauptprojekts zusammenfällt oder nicht.

ivanlan
quelle
0

Ich hatte dieses Problem mit 2.7 und 3.5 auf meinem System installiert und versuchte, einen Telegramm-Bot mit Python-Telegram-Bot zu testen .

Ich konnte es nach der Installation mit pip und pip3, mit oder ohne sudo, nicht zum Laufen bringen. Ich habe immer:

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

Das korrekte Lesen der Fehlermeldung zeigt an, dass Python im aktuellen Verzeichnis nach a sucht telegram.py. Und richtig, ich hatte dort ein Skript namens telegram.py und dieses wurde von Python geladen, als ich anrief import.

Fazit: Stellen Sie sicher, dass Sie package.pybeim Importieren keine in Ihrem aktuellen Arbeitsverzeichnis haben. (Und lesen Sie die Fehlermeldung gründlich durch).

Patrick B.
quelle
0

Ich hatte ein ähnliches Problem (unter Windows) und die Hauptursache in meinem Fall war ANTIVIRUS- Software! Es verfügt über die Funktion "Auto-Containment", die den laufenden Prozess mit einer Art virtueller Maschine umschließt. Die Symptome sind: Funktioniert pip install somemoduleeinwandfrei in einem Cmd-Zeilenfenster und import somemoduleschlägt fehl, wenn es von einem anderen Prozess mit dem Fehler ausgeführt wird

ModuleNotFoundError: No module named 'somemodule'

Ich hoffe es wird jemandem etwas Zeit sparen :)

Dima Gershman
quelle
0

Vielleicht ein bisschen abseits des Themas, aber ich hatte Probleme damit import PyYAML. Weist darauf hin, dass Sie müssen import yaml. (Vermutlich ist es ein klassisches RTFM ...)

huch
quelle
0

Ich hatte ein ähnliches Problem mit Django. In meinem Fall konnte ich das Modul aus der Django-Shell importieren, aber nicht aus einer .py, die das Modul importierte.
Das Problem war, dass ich den Django-Server (daher die .py- Datei ) von einer anderen virtuellen Umgebung aus ausführte aus von der das Modul installiert worden war.

Stattdessen wurde die Shell-Instanz in der richtigen virtuellen Umgebung ausgeführt. Daher, warum es funktioniert hat.

aleclara95
quelle
0

Das funktioniert!!!

Dies passiert häufig, wenn das Modul in einer älteren Version von Python oder einem anderen Verzeichnis installiert wird. Keine Sorge, da die Lösung einfach ist. - Importieren Sie das Modul aus dem Verzeichnis, in dem das Modul installiert ist. Sie können dies tun, indem Sie zuerst das Python- sysModul importieren und dann aus dem Pfad importieren, in dem das Modul installiert ist

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

import <module_name>
Terrence_Freeman
quelle
0

Die meisten möglichen Fälle wurden bereits in Lösungen behandelt. Ich habe nur meinen Fall geteilt. Es ist mir passiert, dass ich ein Paket in einer Umgebung installiert habe (z. B. X) und das Paket in eine andere Umgebung importiert habe (z Y. B. ). Stellen Sie daher immer sicher, dass Sie das Paket aus der Umgebung importieren, in der Sie das Paket installiert haben.

Pedram
quelle
0

Etwas, das für mich funktioniert hat, war:

python -m pip install -user {package name}

Der Befehl erfordert kein sudo. Dies wurde unter OSX Mojave getestet.

IShaan
quelle
0

In meinem Fall musste ich auch die Module für den Superuser installieren.

sudo su
pip install <module>

Anscheinend kann der Superuse unter bestimmten Umständen nicht auf die normalen Benutzerdateien zugreifen.

Zciurus-Alt-Del
quelle
0

Für mich war es wichtig sicherzustellen, dass die Version des Moduls mit der von mir verwendeten Python-Version übereinstimmt. Ich habe das Image auf einer Box mit Python 3.6 erstellt und es dann in ein Docker-Image mit 3.7 eingefügt installiert war, und dann meinen Kopf geschlagen als Python mir sagte, dass das Modul nicht installiert war ...

36m für Python 3.6 bsonnumpy.cpython-36m-x86_64-linux-gnu.so

37m für Python 3.7 bsonnumpy.cpython-37m-x86_64-linux-gnu.so

Streetster
quelle
pip installDie Version, die der von Ihnen verwendeten Python-Version entspricht. Welchen Fehler bekommen Sie und was ist die Ausgabe vonpython --version
Streetster
python --version gibt mir: Python 3.7.7 und wenn ich prüfe, wo die Pakete mit pip installiert sind, gibt librosa; Speicherort: /home/ec2-user/anaconda3/lib/python3.7/site-packages Wie bedeutet das, dass sich das Paket am richtigen Ort befindet, aber wenn ich das Paket importiere, wird Folgendes angegeben: Kein Modulname Ich arbeite an der AWS Sagemaker-Umgebung Pytorch_p36
Walid Bousseta
Vermutlich möchten Sie pytorch_p37 verwenden?
Streetster
Es gibt kein pytorch_p37
Walid Bousseta
0

Ich weiß, dass dies ein super alter Beitrag ist, aber für mich hatte ich ein Problem mit einer 32-Bit-Python und einer 64-Bit-Python installiert. Nachdem ich die 32-Bit-Python deinstalliert hatte, funktionierte alles wie es sollte.

Moultrie
quelle
0

Ich habe mein Problem gelöst, dass dieselben Bibliotheken in einem Projekt (A) einwandfrei funktionierten, aber das Importieren derselben Bibliotheken in ein anderes Projekt (B) Fehler verursachte. Ich verwende Pycharm als IDE unter Windows. Nachdem ich viele mögliche Lösungen ausprobiert und das Problem nicht gelöst hatte, habe ich diese beiden Dinge getan (Ordner "Venv" gelöscht und Interpreter neu konfiguriert):

1-In Projekt (B) gab es einen Ordner mit dem Namen ("venv") in External Libraries /. Ich habe diesen Ordner gelöscht.

2-Schritt 1 (Löschen des Ordners "venv") führt zu einem Fehler in der Python-Interpreter-Konfiguration. Oben auf dem Bildschirm wird die Meldung "Ungültiger Python-Interpreter für das Projekt ausgewählt" und "Python-Interpreter konfigurieren" angezeigt. Wählen Sie diesen Link aus öffnet ein neues Fenster. Dort in der Dropdown-Liste "Projektinterpreter" befindet sich eine rote Linie, die den vorherigen ungültigen Interpreter anzeigt. Öffnen Sie nun diese Liste und wählen Sie den Python-Interpreter aus (in meinem Fall ist es Python 3.7). Drücken Sie unten auf "Übernehmen" und "OK" und los geht's.

Hinweis: Möglicherweise hat die virtuelle Umgebung meines Projekts (B) die bereits installierten und funktionierenden Bibliotheken nicht erkannt.

Hasnain Haider
quelle
0

Wenn Sie eine virtuelle Umgebung verwenden, verwenden Sie pipenv install <module name>anstelle vonpip install <module name>

Hat für mich gearbeitet.

Manu
quelle
pipenv nicht gefunden
Walid Bousseta
0

Hatte auch dieses Problem. Das Paket wurde auf Python 3.8.0 installiert, aber VS Code führte mein Skript mit einer älteren Version (3.4) aus.

Fix im Terminal:

py .py

Stellen Sie sicher, dass Sie das Paket auf der richtigen Python-Version installieren

Aramich100
quelle
0

Wie ein Freund heute für mich getan hat, hat mir Folgendes geholfen (ich verwende Windows):

Drücken Sie 'Einstellung' -> 'Projekt' -> 'Projektinterpreter'. Hier im Fenster rechts befindet sich links eine Zeile mit dem Titel 'Projektinterpreter'. Klicken Sie auf diese Zeile, um mehrere zusätzliche Zeilen zu öffnen.

Drücken Sie nun die Zeile 'Alle anzeigen'. Ein Fenster wird geöffnet. In diesem Fenster drücken Sie das kleine Pluszeichen in der oberen rechten Ecke.

Ein neues Fenster wird geöffnet. Auf der linken Seite befinden sich 4 Registerkarten. Drücken Sie die oberste, auf der "Virtualenv Environment" steht. Markieren Sie nun im Fenster rechts die Option "Vorhandene Umgebung". Die Zeile 'Interpreter' wird gut sichtbar. Drücken Sie die Taste '...' rechts in der Zeile.

Nun öffnet sich ein Browserfenster. Navigieren Sie zu dem Verzeichnis, in dem Sie Python selbst installiert haben . Nicht der mit PyCharm. Wenn Sie dort angekommen sind, wählen Sie die Datei 'python.exe' und drücken Sie OK (das Fenster wird ausgeblendet).

Drücken Sie erneut OK (dieses Fenster verschwindet ebenfalls).

Stellen Sie nun in diesem Fenster sicher, dass die neu erstellte Zeile markiert ist, und drücken Sie erneut OK.

Jetzt sollten alle installierten Pakete im Projektinterpreter sichtbar sein und von Ihrem Programm gelesen werden.

römisch
quelle
0

Die einfachste Lösung, die für mich funktioniert hat und die ich in diesem Thread nicht erwähnt sehe:

Ich habe mehrere Versionen von Python installiert, habe aber versucht, Python3.7 zu verwenden - also musste ich Folgendes verwenden:

sudo pip3.7 install <package>

J. Saw
quelle