Ich versuche ein Skript auszuführen, das unter anderem ein Python-Skript startet. Ich erhalte einen ImportError: Kein Modul mit dem Namen ... Wenn ich jedoch ipython starte und dasselbe Modul auf dieselbe Weise über den Interpreter importiere, wird das Modul akzeptiert.
Was ist los und wie kann ich das beheben? Ich habe versucht zu verstehen, wie Python PYTHONPATH verwendet, bin aber völlig verwirrt. Jede Hilfe wäre sehr dankbar.
python
ipython
jupyter-notebook
importerror
CodeOcelot
quelle
quelle
-v
Option und Sie werden sehen, wo Python die von Ihnen importierten Module findet (oder nicht).Antworten:
Dieses Problem tritt auf, wie der IPython-Befehlszeileninterpreter Ihren aktuellen Pfad verwendet und wie ein separater Prozess (sei es ein IPython-Notizbuch, ein externer Prozess usw.). IPython sucht nach zu importierenden Modulen, die sich nicht nur in Ihrem sys.path, sondern auch in Ihrem aktuellen Arbeitsverzeichnis befinden. Wenn Sie einen Interpreter über die Befehlszeile starten, ist das aktuelle Verzeichnis, in dem Sie arbeiten, dasselbe, in dem Sie ipython gestartet haben. Wenn Sie ausführen
Sie werden sehen, dass dies wahr ist.
Angenommen, Sie verwenden ein ipython-Notizbuch, führen es aus
os.getcwd()
und Ihr aktuelles Arbeitsverzeichnis ist stattdessen der Ordner, in dem Sie das Notizbuch angewiesen haben, in Ihrer Datei ipython_notebook_config.py zu arbeiten (normalerweise unter Verwendung derc.NotebookManager.notebook_dir
Einstellung).Die Lösung besteht darin, dem Python-Interpreter den Pfad zu Ihrem Modul bereitzustellen. Die einfachste Lösung besteht darin, diesen Pfad an Ihre sys.path-Liste anzuhängen. Versuchen Sie zunächst in Ihrem Notizbuch:
Wenn dies nicht funktioniert, haben Sie ein anderes Problem in den Händen, das nicht mit dem Pfad zum Import zusammenhängt, und Sie sollten weitere Informationen zu Ihrem Problem bereitstellen.
Der bessere (und dauerhaftere) Weg, dies zu lösen, besteht darin, Ihren PYTHONPATH festzulegen , der dem Interpreter zusätzliche Verzeichnisse zur Verfügung stellt, in denen nach Python-Paketen / Modulen gesucht wird. Das Bearbeiten oder Festlegen des PYTHONPATH als globale Variable ist os-abhängig und wird hier für Unix oder Windows ausführlich erläutert .
quelle
__init_.py
, oder? ... und nicht ändernPYTHONPATH
oder aufrufen wollensys.path.append
, auch wenn sie auch korrekt sind (richtig?). Ich meine, ich habe Dutzende von Verzeichnissen mit Code in ihnen, und ich werde sie nicht alle zum Pfad hinzufügen - oder andere Benutzer zu ihrer Jupyter-Konfigurationsdatei erwarten, selbst wenn es sich um ein Verzeichnis handelt.Erstellen Sie einfach eine leere Python-Datei mit dem Namen
__init__.py
unter dem Ordner, in dem Fehler angezeigt werden, während Sie das Python-Projekt ausführen.quelle
foo.ipynb
mitbar/baz.py
, leerebar/__init__.py
Datei hinzufügen , damit Notebook verwenden kannfrom bar.baz import MyClass
Stellen Sie sicher, dass beide denselben Interpreter verwenden. Das ist mir auf Ubuntu passiert:
Und
sys.path
war zwischen den beiden Dolmetschern unterschiedlich. Um das Problem zu beheben, habe ich Python 3.3 entfernt.quelle
pip install --upgrade ipython
, um die neueste Version zu erhalten, und dann wurde standardmäßig automatisch 2.7.11 verwendet.import sys; sys.version
Der Hauptgrund ist, dass die sys.paths von Python und IPython unterschiedlich sind.
Bitte beziehen Sie sich auf lucypark Link , die Lösung funktioniert in meinem Fall. Es passiert, wenn opencv von installiert wird
conda install opencv
Und es wurde ein Importfehler in iPython festgestellt. Es gibt drei Schritte, um dieses Problem zu beheben:
1. Überprüfen Sie den Pfad in Python und iPython mit dem folgenden Befehl
Sie finden andere Ergebnisse als Python und Jupyter. Im zweiten Schritt
sys.path.append
korrigieren Sie einfach den fehlenden Pfad durch Ausprobieren.2. Temporäre Lösung
In iPython:
das
ImportError:..
Problem gelöst3. Permanente Lösung
Erstellen Sie ein iPython-Profil und legen Sie den ersten Anhang fest:
In Bash Shell:
In vi an die Datei anhängen:
GETAN
quelle
Dies
sys.path.append('my-path-to-module-folder')
funktioniert, aber um zu vermeiden, dass Sie dies in IPython jedes Mal tun müssen, wenn Sie das Modul verwenden möchten, können Sieexport PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"
es Ihrer~/.bash_profile
Datei hinzufügen .quelle
Vor der Installation von ipython habe ich Module über easy_install installiert. sagen
sudo easy_install mechanize
.Nach der Installation von ipython musste ich easy_install erneut ausführen, damit ipython die Module erkennt.
quelle
Hatte ein ähnliches Problem, behebt es durch Aufrufen
python3
stattpython
, meine Module waren in Python3.5.quelle
Wenn Sie es über die Befehlszeile ausführen, kennt der Python-Interpreter manchmal nicht den Pfad, in dem nach Modulen gesucht werden soll.
Unten ist die Verzeichnisstruktur meines Projekts:
Ich lief unter Befehl:
Nachdem ich über dem Befehl ausgeführt habe, habe ich den folgenden Fehler erhalten
lib wurde in my_test.py importiert
Ich habe sys.path gedruckt und herausgefunden, dass der Pfad des Projekts, an dem ich arbeite, nicht in der sys.path-Liste verfügbar ist
Ich habe den folgenden Code am Anfang meines Skripts hinzugefügt
my_test.py
.Ich bin mir nicht sicher, ob es ein guter Weg ist, es zu lösen, aber ja, es hat bei mir funktioniert.
quelle
os.getcwd()
das Verzeichnis abgerufen wird, in dem das Skript ausgeführt wurde, und nicht das Verzeichnis, in dem sich die Skriptdatei befindet.So habe ich es behoben:
quelle
Ich habe festgestellt, dass die Lösung für dieses Problem hier ausführlich dokumentiert wurde:
https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/
Grundsätzlich müssen Sie die Pakete in der Jupyter-Umgebung installieren und Shell-Befehle wie folgt ausgeben:
Bitte überprüfen Sie den obigen Link für eine maßgebliche vollständige Antwort.
quelle
Ich habe noch eine weitere Quelle für diese Diskrepanz gefunden:
Ich habe ipython sowohl lokal als auch allgemein in virtualenvs installiert. Mein Problem war, dass in einer neu erstellten virtuellen Umgebung mit ipython die System-ipython aufgenommen wurde, die eine andere Version als die Python und ipython in der virtuellen Umgebung war (2.7.x vs. 3.5.x), und es kam zu Heiterkeit.
Ich denke, die kluge Sache, die Sie tun müssen, wenn Sie etwas installieren, in dem sich eine Binärdatei
yourvirtualenv/bin
befindet, ist, sofortrehash
oder ähnlich für die von Ihnen verwendete Shell auszuführen , damit das richtige Python / Ipython gefunden wird. (Muss überprüfen, ob es geeignetepip
Haken nach der Installation gibt ...)quelle
Lösung ohne Scripting:
quelle
Dies wird wahrscheinlich durch verschiedene auf Ihrem System installierte Python-Versionen verursacht , z. B. Python2 oder Python3 .
Führen Sie Befehl
$ pip --version
und$ pip3 --version
zu prüfen , welche pip von an ist Python 3x . ZB sollten Sie Versionsinformationen wie folgt sehen:Führen Sie dann das
example.py
Skript mit dem folgenden Befehl ausquelle
Ist mir mit dem Verzeichnis passiert
utils
. Ich habe versucht, dieses Verzeichnis wie folgt zu importieren:utils
ist bereits ein Paket in Python. Ändern Sie einfach Ihren Verzeichnisnamen in etwas anderes und es sollte gut funktionieren.quelle
Diese Art von Fehlern tritt höchstwahrscheinlich aufgrund von Python-Versionskonflikten auf. Wenn Ihre Anwendung beispielsweise nur auf Python 3 ausgeführt wird und Sie auch Python 2 haben, ist es besser anzugeben, welche Version verwendet werden soll. Zum Beispiel verwenden
anstatt
quelle
Diese Antwort gilt für diese Frage, wenn
PYTHONPATH vorübergehend ändern
Pfad unten kann relativ sein
quelle
import sys sys.path.append ('/ Users / {user} /Library/Python/3.7/lib/python/site-packages') import ta
quelle
Entfernen Sie es
pathlib
und installieren Sie es erneut. Löschen Sie die Pfadliste imsitepackages
Ordner und installieren Sie das Pfadlistenpaket mit dem Befehl pip neu:quelle