Python wird in einem lokalen Verzeichnis installiert.
Mein Verzeichnisbaum sieht folgendermaßen aus:
(local directory)/site-packages/toolkit/interface.py
Mein Code ist hier drin:
(local directory)/site-packages/toolkit/examples/mountain.py
Um das Beispiel auszuführen, schreibe ich python mountain.py
und in den Code, den ich habe:
from toolkit.interface import interface
Und ich bekomme den Fehler:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
Ich habe bereits geprüft sys.path
und dort habe ich das Verzeichnis /site-packages
. Außerdem habe ich die Datei __init__.py.bin
im Toolkit-Ordner, um Python anzuzeigen, dass dies ein Paket ist. Ich habe auch ein __init__.py.bin
im Beispielverzeichnis.
Ich weiß nicht, warum Python die Datei nicht finden kann, wenn sie sich befindet sys.path
. Irgendwelche Ideen? Kann es ein Berechtigungsproblem sein? Benötige ich eine Ausführungserlaubnis?
python
importerror
python-import
Eduardo
quelle
quelle
755
. Dies lag daran, dassumask
auf dem Computer0027
aufgrund dessenothers
keineread
Berechtigung vorhanden war, wodurch das Modul nicht gelesen wurde. Das Hinzufügen einerread
Berechtigung hat mein Problem behoben. Es lohnt sich, die Berechtigung des Zielverzeichnisses nach der Installation zu überprüfen.interface
(war ein Konflikt).Antworten:
Aufgrund Ihrer Kommentare zu orips Beitrag denke ich, dass Folgendes passiert ist:
__init__.py
unter Windows bearbeitet .__init__.py
(jetzt aufgerufene__init__.py.bin
) bedeutet, dass Python das Toolkit nicht als Paket versteht.__init__.py
im entsprechenden Verzeichnis und alles funktioniert ...?quelle
.bin
.python driver.py
als ich espython3 driver.py
seit meiner Installation mit hätte verwenden sollenpip3
.Tut
haben eine
__init__.py
?Damit der Import durch Ihre Verzeichnisse läuft, muss jedes Verzeichnis eine
__init__.py
Datei haben.quelle
Als ich diese Übung in LPTHW machte, stieß ich auf etwas sehr Ähnliches. Ich konnte Python nie dazu bringen zu erkennen, dass ich Dateien in dem Verzeichnis hatte, aus dem ich anrief. Aber ich konnte es am Ende zum Laufen bringen. Was ich getan habe und was ich empfehle, ist Folgendes zu versuchen:
(HINWEIS: Von Ihrem ersten Beitrag an gehe ich davon aus, dass Sie einen * NIX-basierten Computer verwenden und Dinge über die Befehlszeile ausführen. Daher ist dieser Rat darauf zugeschnitten. Da ich Ubuntu ausführe, habe ich dies getan.)
1) Wechseln Sie in das Verzeichnis (cd) über dem Verzeichnis, in dem sich Ihre Dateien befinden. In diesem Fall versuchen Sie, die
mountain.py
Datei auszuführen und dastoolkit.interface.py
Modul aufzurufen , das sich in separaten Verzeichnissen befindet. In diesem Fall würden Sie zu dem Verzeichnis wechseln, das Pfade zu diesen beiden Dateien enthält (oder mit anderen Worten zu dem nächstgelegenen Verzeichnis, das die Pfade dieser beiden Dateien gemeinsam nutzen). Welches ist in diesem Fall dietoolkit
Verzeichnis.2) Wenn Sie sich im
tookit
Verzeichnis befinden, geben Sie diese Codezeile in Ihre Befehlszeile ein:export PYTHONPATH=.
Dies setzt Ihren PYTHONPATH auf ".", Was im Grunde bedeutet, dass Ihr PYTHONPATH jetzt nach aufgerufenen Dateien in dem Verzeichnis sucht, in dem Sie sich gerade befinden (und genauer gesagt in den Unterverzeichniszweigen des Verzeichnisses , in dem Sie sich befinden. Es wird also nicht nur in Ihrem aktuellen Verzeichnis angezeigt, sondern in allen Verzeichnissen, die sich in Ihrem aktuellen Verzeichnis befinden.
3) Nachdem Sie Ihren PYTHONPATH im obigen Schritt eingestellt haben, führen Sie Ihr Modul aus Ihrem aktuellen Verzeichnis (dem
toolkit
Verzeichnis) aus. Python sollte nun die von Ihnen angegebenen Module finden und laden.Hoffe das hilft. Ich war selbst ziemlich frustriert darüber.
quelle
set PYTHONPATH=.
.Stellen Sie unter * nix außerdem sicher, dass PYTHONPATH korrekt konfiguriert ist, insbesondere, dass es das folgende Format hat:
(Beachten Sie das
.:
am Anfang, damit es auch im aktuellen Verzeichnis suchen kann.)Abhängig von der Version kann es sich auch an anderen Orten befinden:
quelle
.:/usr/lib/python
,.:/usr/lib/python2.6
,.:/usr/lib/python2.7
usw. je nach Version#!/usr/bin/python
am Ende einer Datei sollte auch funktionieren, oder?Ich habe mein eigenes Problem gelöst und werde eine Zusammenfassung der Fehler und der Lösung schreiben:
Die Datei muss genau aufgerufen werden
__init__.py
. Wenn die Erweiterung anders ist als in meinem Fall,.py.bin
kann Python nicht durch die Verzeichnisse navigieren und dann die Module nicht finden. Zum Bearbeiten der Dateien benötigen Sie einen Linux-Editor wie vi oder nano . Wenn Sie einen Windows-Editor verwenden, werden einige versteckte Zeichen geschrieben.Ein weiteres Problem, das sich darauf auswirkte, war, dass ich eine andere Python-Version vom Root installiert hatte. Wenn also jemand mit einer lokalen Python-Installation arbeitet, stellen Sie sicher, dass die Python-Installation, auf der die Programme ausgeführt werden, die lokale Python ist. Um dies zu überprüfen, überprüfen Sie einfach
which python
, ob sich die ausführbare Datei in Ihrem lokalen Verzeichnis befindet. Wenn nicht, ändern Sie den Pfad, aber stellen Sie sicher, dass das lokale Python-Verzeichnis vor dem anderen Python liegt.quelle
__init__.py
Dateien in einem relevanten Verzeichnis abgelegt, aber ich habe ein Paket manuell mit installiertsetup.py
. Wie würde die Installation eines neuen Pakets den Import stören?Eine einfache Lösung besteht darin, das Modul mit zu installieren,
python -m pip install <library-name>
anstattpip install <library-name>
bei Administratorbeschränkungen sudo zu verwendenquelle
python -m
man vorpip install
?python -m pip...
, aberpip...
nicht: Sie sind praktisch dasselbe, vorausgesetzt, sie befinden sich tatsächlich im selbenpython
Verzeichnis. Möglicherweise war die beobachtete Situation, dass das eigenständigepip
Programm in einigen älteren Python -Versionen nicht verfügbar war (aber es ist jetzt in den neuesten Versionen 2.7 und 3.x verfügbar). In diesem Fall befand sich daspython
in einer lokalen virtuellen Umgebung undpip
war es nicht. Daher wurdepython -m pip install
es in der lokalen virtuellen Umgebung installiert, währendpip
versucht wurde, es in der Systempython zu installieren (und ohne Sudo fehlschlug). Auf jeden Fall macht es keinen Sinn.Um ein Verzeichnis als Paket zu markieren, benötigen Sie eine Datei mit dem Namen
__init__.py
. Hilft dies?quelle
Mit
PyCharm
(Teil der JetBrains-Suite) müssen Sie Ihr Skriptverzeichnis als Quelle definieren:Right Click > Mark Directory as > Sources Root
quelle
Wenn Sie diese Antwort lesen, heißt es, dass Sie
__init__.py
am richtigen Ort sind, alle Abhängigkeiten installiert haben und immer noch die erhaltenImportError
.Ich hatte ein ähnliches Problem, außer dass mein Programm bei Ausführung mit PyCharm einwandfrei lief, aber der obige Fehler, wenn ich es vom Terminal aus ausführte. Nachdem ich weiter gegraben hatte, stellte ich fest, dass
PYTHONPATH
der Eintrag für das Projektverzeichnis nicht vorhanden war. Also setze ichPYTHONPATH
per Import Anweisung funktioniert auf PyCharm aber nicht vom Terminal :Es gibt eine andere Möglichkeit, dies zu tun, indem Sie
sys.path
Folgendes verwenden:Sie können Einfügen / Anhängen basierend auf der Reihenfolge verwenden, in der Ihr Projekt durchsucht werden soll.
quelle
Für mich war es etwas wirklich Dummes. Ich habe die Bibliothek mit installiert,
pip3 install
aber mein Programmpython program.py
im Gegensatz zu ausgeführtpython3 program.py
.quelle
Jep. Sie benötigen das Verzeichnis, um die
__init__.py
Datei zu enthalten. Dies ist die Datei, die das Paket initialisiert. Hier haben Sie einen Blick auf diese .quelle
zB: / etc / environment
PYTHONPATH = $ PYTHONPATH: / opt / folder1: / opt / folder2
/ opt / folder1 / foo
/ opt / folder2 / foo
Und wenn Sie versuchen, eine foo-Datei zu importieren, weiß Python nicht, welche Sie möchten.
von foo import ... >>> importerror: kein modul namens foo
quelle
Meine zwei Cent:
Spucke:
Das hat mich verdammt verwirrt - ich habe Posts und Posts durchgesehen, die auf hässliche Syspath-Hacks hinweisen (wie Sie sehen, waren meine
__init__.py
alle da). Nun stellt sich heraus, dass game / oblivion.py und game / oblivion Python verwirrten, was das eher wenig hilfreiche "Kein Modul namens RecordGroups" ausspuckte. Ich würde mich für eine Problemumgehung und / oder Links interessieren, die dieses (gleichnamige) Verhalten dokumentieren -> BEARBEITEN (2017.01.24) - Was ist, wenn ich ein Modul und ein Paket mit demselben Namen habe ? Interessanterweise haben normalerweise Pakete Vorrang, aber anscheinend verstößt unser Launcher dagegen.EDIT (2015.01.17): Ich habe nicht erwähnt, dass wir einen benutzerdefinierten Launcher verwenden, der seziert wurde hier .
quelle
game.oblivion.RecordGroups !== game/oblivion/patchers/RecordGroups.py
Vielleicht möchten Sie das beheben, indem Sie Ihren Python-Code anhängen, um Folgendes zu verwenden:game.oblivion.patchers.RecordGroups
game.oblivion.__init__.py
habe, muss dies aber möglicherweise überprüfenLinux: Importierte Module befinden sich in /usr/local/lib/python2.7/dist-packages
Wenn Sie ein in C kompiliertes Modul verwenden, vergessen Sie nicht, die .so-Datei danach zu ändern
sudo setup.py install
.quelle
In meinem Fall bestand das Problem darin, dass ich eine Verknüpfung zu debug
python
& herstellteboost::Python
, was erfordert, dass die ErweiterungFooLib_d.pyd
nicht nurFooLib.pyd
; Durch Umbenennen der Datei oder Aktualisieren derCMakeLists.txt
Eigenschaften wurde der Fehler behoben.quelle
Wenn Sie alle oben angegebenen Methoden ausprobiert haben, aber fehlgeschlagen sind, hat Ihr Modul möglicherweise denselben Namen wie ein integriertes Modul. Oder ein Modul mit demselben Namen, das in einem Ordner mit hoher Priorität vorhanden ist
sys.path
als das Ihres Moduls hat.Sagen Sie zum Debuggen Ihre
from foo.bar import baz
BeschwerdenImportError: No module named bar
. Wechseln zuimport foo; print foo
, um den Pfad von anzuzeigenfoo
. Ist es das, was du erwartest?Wenn nicht, benennen Sie entweder um
foo
oder verwenden Sie absolute Importe .quelle
ImportError: No module named foo
.Mein Problem war, dass ich das Verzeichnis mit der
__init__.py
Datei zu PYTHONPATH hinzugefügt habe, als ich tatsächlich das übergeordnete Verzeichnis hinzufügen musste.quelle
An alle, die dieses Problem noch haben. Ich glaube, Pycharm wird mit Importen verwechselt. Wenn ich 'aus dem Namespace etwas importieren' schreibe, wird die vorherige Zeile rot unterstrichen, was darauf hinweist, dass ein Fehler vorliegt, aber funktioniert. '' Aus .namespace etwas importieren 'wird jedoch nicht unterstrichen, funktioniert aber auch nicht.
Versuchen
quelle
Ich habe mein Problem durch Schreiben behoben
print (sys.path)
und festgestellt, dass Python trotz einer Neuinstallation veraltete Pakete verwendet. Beim Löschen dieser erstellten Python werden automatisch die richtigen Pakete verwendet.quelle
In meinem Fall, weil ich PyCharm und PyCharm verwende, erstellen Sie für jedes Projekt im Projektordner ein 'venv', aber es ist nur eine Mini-Umgebung von Python. Sie haben zwar die Bibliotheken installiert, die Sie in Python benötigen, aber in Ihrem benutzerdefinierten Projekt 'venv' ist es nicht verfügbar. Dies ist der eigentliche Grund für 'ImportError: In PyCharm ist kein Modul mit dem Namen xxxxxx' aufgetreten. Um dieses Problem zu beheben, müssen Sie Ihrem benutzerdefinierten Projektumfang mithilfe der folgenden Schritte Bibliotheken hinzufügen:
Genießen.
quelle
Nachdem ich nur das gleiche Problem hatte, stellte ich fest, dass meine Lösung darin bestand, alle
pyc
Dateien aus meinem Projekt zu löschen. Es scheint, dass diese zwischengespeicherten Dateien diesen Fehler irgendwie verursacht haben.Der einfachste Weg, dies zu tun, bestand darin, im Windows-Explorer zu meinem Projektordner zu navigieren und zu suchen
*.pyc
, dann alle auszuwählen ( Ctrl+ A) und sie zu löschen ( Ctrl+ X).Es ist möglich, dass ich meine Probleme durch Löschen der spezifischen
pyc
Datei hätte lösen können, aber ich habe es nie versuchtquelle
Ich hatte das gleiche Problem :
Import error
. Außerdem wurde die Bibliothek zu 100% korrekt installiert. Die Ursache des Problems war, dass auf meinem PC 3 eine Version von Python (Anaconda-Paket) installiert wurde. Aus diesem Grund wurde die Bibliothek nicht am richtigen Ort installiert. Danach habe ich in meiner IDE PyCharm einfach auf die richtige Version von Python umgestellt.quelle
Ich hatte den gleichen Fehler. Dies wurde dadurch verursacht, dass jemand einen Ordner im selben Ordner wie mein Skript erstellt hat, dessen Name mit einem Modul in Konflikt stand, das ich von einem anderen Ort importiert habe. Anstatt das externe Modul zu importieren, sah es sich in diesem Ordner um, der offensichtlich nicht die erwarteten Module enthielt.
quelle
Ich hatte das gleiche Problem (Python 2.7 Linux), ich habe die Lösung gefunden und möchte sie teilen. In meinem Fall hatte ich die folgende Struktur:
In 'main.py' hatte ich alle folgenden Kombinationen erfolglos ausprobiert:
Die Lösung war viel einfacher als ich dachte. Ich habe den Ordner "Booklet" in "Booklet" umbenannt und das wars. Jetzt kann Python die Klasse Question normal importieren, indem der Code in 'main.py' verwendet wird:
Daraus kann ich schließen, dass Paketnamen (Ordner) wie 'booklet' in Kleinbuchstaben beginnen müssen, sonst verwechselt Python sie mit Klassennamen und Dateinamen.
Anscheinend war dies nicht Ihr Problem, aber John Fouhys Antwort ist sehr gut und dieser Thread enthält fast alles, was dieses Problem verursachen kann. Das ist also noch eine Sache und ich hoffe, dass dies vielleicht anderen helfen könnte.
quelle
In meinem Fall habe ich den Pfad zum Ordner package.egg und nicht das eigentliche Paket darunter eingefügt. Ich habe das Paket auf die oberste Ebene kopiert und es hat funktioniert.
quelle
Das hat bei mir funktioniert:
__init__.py
Datei im übergeordneten Ordner erstellt (in Ihrem Fall imsite-packages
Ordner). Und so importiert:Hoffe, es wird auch für Sie nützlich sein!
quelle
In Linux Server versuchen
dos2unix script_name
(Entfernen Sie alle (falls vorhanden)
pyc
Dateien mit dem Befehl.find . -name '*.pyc' -delete
)und in dem Fall erneut ausführen, wenn Sie an einem Skript unter Windows gearbeitet haben
quelle
In meinem Fall habe ich
sys.path.insert()
ein lokales Modul importiert undmodule not found
aus einer anderen Bibliothek abgerufen. Ich musstesys.path.insert()
die gemeldeten Importe unterschreibenmodule not found
. Ich denke, die beste Vorgehensweise ist es,sys.path.insert()
Ihre Importe ganz unten zu platzieren.quelle