wake-up-neo.com

"ImportError: No module named" beim Versuch, Python script auszuführen

Ich versuche ein Skript auszuführen, das unter anderem ein python script startet. Ich erhalte jedoch einen ImportError: No module named ..., wenn ich ipython starte und das gleiche importiere Modul in der gleichen Weise durch den Interpreter wird das Modul akzeptiert.

Was ist los und wie kann ich das beheben? Ich habe versucht zu verstehen, wie python verwendet PYTHONPATH, aber ich bin gründlich verwirrt. Jede Hilfe wäre sehr dankbar.

109
CodeOcelot

Dieses Problem tritt auf, weil der Befehlszeilen-IPython-Interpreter Ihren aktuellen Pfad verwendet, im Gegensatz zu einem separaten Prozess (sei es ein IPython-Notizbuch) , externer Prozess, etc). IPython sucht nach zu importierenden Modulen, die sich nicht nur in Ihrer Datei sys.path, sondern auch in Ihrem aktuellen Arbeitsverzeichnis befinden. Wenn Sie einen Interpreter über die Befehlszeile starten, ist das aktuelle Verzeichnis, in dem Sie sich befinden, dasselbe, in dem Sie ipython gestartet haben

import os
os.getcwd() 

sie werden sehen, dass dies wahr ist.

Nehmen wir jedoch an, Sie verwenden ein ipython-Notizbuch, führen os.getcwd() aus, und Ihr aktuelles Arbeitsverzeichnis ist stattdessen der Ordner, in dem Sie das Notizbuch angewiesen haben, in Ihrer ipython_notebook_config.py-Datei zu arbeiten (normalerweise mit c.NotebookManager.notebook_dir Einstellen).

Die Lösung besteht darin, dem Interpreter python mit dem Pfad zu Ihrem Modul zu versehen. Die einfachste Lösung besteht darin, diesen Pfad an Ihre sys.path-Liste anzuhängen. Versuchen Sie in Ihrem Notizbuch zunächst Folgendes:

import sys
sys.path.append('my/path/to/module/folder')

import module-of-interest

Wenn dies nicht funktioniert, liegt ein anderes Problem vor, das nicht mit dem Importpfad zusammenhängt, und Sie sollten weitere Informationen zu Ihrem Problem bereitstellen.

Die bessere (und dauerhaftere) Möglichkeit, dies zu lösen, besteht darin, Ihren [~ # ~] Pythonpfad [~ # ~] festzulegen, der dem Interpreter zur Verfügung steht Weitere Verzeichnisse suchen nach python packages/modules. Das Bearbeiten oder Festlegen von PYTHONPATH als globale Variable hängt vom Betriebssystem ab und wird hier für nix oder - ausführlich beschrieben. Windows .

152
tyleha

Erstellen Sie einfach eine leere python Datei mit dem Namen __init__.py unter dem Ordner, der Fehler anzeigt, während Sie das python project.

13

Stellen Sie sicher, dass beide denselben Interpreter verwenden. Das ist mir auf Ubuntu passiert:

$ ipython3 -c 'import sys; print(sys.version)'
3.4.2 (default, Jun 19 2015, 11:34:49) \n[GCC 4.9.1]

$ python3 -c 'import sys; print(sys.version)'
3.3.0 (default, Nov 27 2012, 12:11:06) \n[GCC 4.6.3]

Und sys.path unterschied sich zwischen den beiden Dolmetschern. Um das Problem zu beheben, entfernte ich Python 3.3.

10
z0r

Das Ausführen von sys.path.append('my-path-to-module-folder') funktioniert. Um dies jedoch nicht jedes Mal in IPython ausführen zu müssen, wenn Sie das Modul verwenden möchten, können Sie Ihrer export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH" - Datei ~/.bash_profile Hinzufügen.

6
acannon828

Der Hauptgrund sind die sys.paths von Python und IPython sind unterschiedlich.

Bitte beachten Sie Lucypark Link , die Lösung funktioniert in meinem Fall. Es passiert, wenn opencv von installiert wird

conda install opencv

Und ich habe einen Importfehler in iPython bekommen. Es gibt drei Schritte, um dieses Problem zu lösen:

import cv2
ImportError: ...

1. Überprüfen Sie den Pfad in Python und iPython mit folgendem Befehl

import sys
sys.path

Sie werden unterschiedliche Ergebnisse von Python und Jupyter finden. Zweiter Schritt, verwenden Sie einfach sys.path.append, um den fehlenden Pfad durch Ausprobieren zu beheben.

2. Temporäre Lösung

In iPython:

import sys
sys.path.append('/home/osboxes/miniconda2/lib/python2.7/site-packages')
import cv2

das ImportError:.. Problem gelöst

3. Permanente Lösung

Erstellen Sie ein iPython-Profil und legen Sie das erste Anhängen fest:

In bash Shell:

ipython profile create
... CHECK the path prompted , and edit the prompted config file like my case
vi /home/osboxes/.ipython/profile_default/ipython_kernel_config.py

In vi an die Datei anhängen:

c.InteractiveShellApp.exec_lines = [
 'import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")'
]

GETAN

5
Jesse

Vor der Installation von ipython habe ich Module über easy_install installiert. sagen Sudo easy_install mechanize.

Nach der Installation von ipython musste easy_install erneut ausgeführt werden, damit ipython die Module erkennt.

2
pandorabob

Wenn Sie es über die Befehlszeile ausführen, ist dem python interpreter manchmal nicht bekannt, wo nach Modulen gesucht werden muss.

Unten ist die Verzeichnisstruktur meines Projekts:

/project/apps/..
/project/tests/..

Ich lief unter Befehl:

>> cd project

>> python tests/my_test.py

Nachdem ich über Befehl gelaufen bin, habe ich unter Fehler

no module named lib

lib wurde in my_test.py importiert

ich habe sys.path ausgedruckt und herausgefunden, dass der Pfad des Projekts, an dem ich arbeite, nicht in der sys.path-Liste verfügbar ist

ich habe folgenden Code am Anfang meines Skripts hinzugefügt my_test.py.

import sys
import os

module_path = os.path.abspath(os.getcwd())    

if module_path not in sys.path:       

    sys.path.append(module_path)

Ich bin mir nicht sicher, ob es ein guter Weg ist, es zu lösen, aber ja, es hat bei mir funktioniert.

2
Raghav salotra

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 dabei Shell-Befehle wie die folgenden eingeben:

!{sys.executable} -m pip install numpy

Bitte überprüfen Sie den obigen Link für eine verbindliche vollständige Antwort.

1
Rui Guerra

Hatte ein ähnliches Problem, das durch Aufrufen von python3 Anstelle von python behoben wurde. Meine Module waren in Python3.5.

1
peter n

Ich habe noch eine andere Quelle für diese Diskrepanz gefunden:

Ich habe ipython sowohl lokal als auch gemeinsam in virtualenvs installiert. Mein Problem war, dass in einem neu erstellten Virtualenv mit ipython das System ipython aufgegriffen wurde, das eine andere Version als python und ipython in virtualenv (a 2.7.x vs. a 3.5.x) und Heiterkeit folgte.

Ich denke, das Kluge bei der Installation von etwas, das eine Binärdatei in yourvirtualenv/bin Enthält, ist, sofort rehash oder ähnliches für die von Ihnen verwendete Shell auszuführen, damit das richtige Python/Ipython abgerufen wird . (Muss überprüft werden, ob es geeignete pip Post-Install-Hooks gibt ...)

0
kaleissin

Lösung ohne Scripting:

  1. Öffnen Sie Spyder -> Tools -> PYTHONPATH-Manager
  2. Fügen Sie Python Pfade hinzu, indem Sie auf "Pfad hinzufügen" klicken. Beispiel: 'C:\Benutzer\Benutzer\AppData\Local\Programme\Python\Python37\Lib\site-packages'
  3. Klicken Sie auf "Synchronisieren ...", damit andere Programme (z. B. Jupyter Notebook) die in Schritt 2 festgelegten Pythonpfade verwenden können.
  4. Starten Sie Jupyter neu, wenn es geöffnet ist
0
Wen

Dies ist wahrscheinlich verursacht durch verschiedene python auf Ihrem System installierte Versionen, d. H. Python2 oder Python.

Führen Sie den Befehl aus $ pip --version und $ pip3 --version um zu überprüfen, von welchem ​​ pip um Python 3x stammt. Z.B. Sie sollten die folgenden Versionsinformationen sehen:

pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

Führen Sie dann das example.py Skript mit dem folgenden Befehl

$ python3 example.py
0
shizhen

So habe ich es behoben:

import os
import sys
module_path = os.path.abspath(os.getcwd() + '\\..')
if module_path not in sys.path:
    sys.path.append(module_path)
0
pomber