it-swarm.com.de

Python-Fehler: ImportError: Name Akismet kann nicht importiert werden

Ich habe viele ähnliche Fehler gesehen, aber ich sehe keine Lösung, die für mein spezielles Problem zutrifft.

Ich versuche, das Akismet-Modul zu verwenden, das sich auf meinem PYTHONPATH befindet. Wenn ich dann den interaktiven Interpreter starte und from akismet import Akismet (wie der docstring sagt) ausführt, erhalte ich die folgende Fehlermeldung:

from akismet import Akismet
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name Akismet
12
Doppelganger

Es wird perfekt funktionieren, wenn Ihr PYTHONPATH korrekt und global eingestellt ist (ich habe es gerade selbst getestet).

  • Muss auf das Verzeichnis gesetzt werden, das "akismet.py" enthält, nicht den Dateipfad! Stellen Sie sicher, dass Sie keine relativen Pfade verwenden.
  • Beachten Sie, dass Sie möglicherweise einen Neustart/Abmelden durchführen müssen, um Änderungen der Umgebungsvariablen auf alle Programme anzuwenden.
6
AndiDog

Ich möchte nur mehr auf Doppelgangers eigene Antwort auf seine Frage aufmerksam machen. Ich hatte diesen Fehler und die Situation ist folgende:

Sie versuchen die Funktion/Klasse X aus einem Modul namens "strategie.py" zu importieren.

Leider haben Sie auch ein Python-Paketverzeichnis mit dem Namen "strategie" erstellt, dh Sie haben ein Verzeichnis mit dem Namen "strategie" und mindestens eine einzige Datei im Verzeichnis "strategie" mit dem Namen "____init___.py".

root folder\
    strategy.py (contains function/class called X)
    strategy\
        __init__.py

Sie vergessen dann die Tatsache, dass Sie das Python-Paketverzeichnis erstellt haben, und versuchen, eine Klasse oder Funktion zu importieren, die in der Datei strategy.py im 'root'-Verzeichnis definiert ist

from strategy import X

Was Sie dann bekommen, ist der Python error: ImportError: cannot import name X Fehler.

Das eigentliche Problem besteht, wie Doppelganger bemerkt, darin, dass der Python-Interpretor dem von Ihnen erstellten Paketverzeichnis Vorrang einräumt und nach einem FILE/MODULE mit dem Namen X im Paketverzeichnis sucht und das eigentliche Modul strategy.py und die Funktion/Klasse ignoriert X darin, nach dem Sie eigentlich suchen.

Das ist genau das, was Sie erwarten und wünschen würden, wenn Sie die Dokumentation zu Python-Paketen lesen. Wenn Sie jedoch Ihre Meinung auf halbem Weg ändern, habe ich Ihren Kopf zerkratzt.

15

Prüfen Sie, ob Ihr PYTHONPATH wirklich das ist, was Sie erwarten, z. in einer interaktiven Konsole:

In [1]: import sys

In [2]: print sys.path

ist akismet.py wirklich in einem dieser Ordner?

4

Das Verzeichnis mit dem Verzeichnis 'akismet' sollte sich in Ihrem Pfad befinden. Ich denke, Sie haben das Verzeichnis 'akismet' selbst zu $ ​​PYTHONPATH hinzugefügt. 

Wenn du schreibst:

from akismet import Akismet

Python versucht, die Datei akismet/Akismet.py irgendwo in ihrem Suchpfad zu öffnen.

All dies setzt voraus, dass Akismet eine Datei ist und akismet ein Verzeichnis ist. Wenn es eine akismet.py-Datei gibt, sollte das Verzeichnis, das diese Datei enthält, in $PYTHONPATH aufgeführt sein.

2
Jacek Konieczny

Einfach:

  1. Vergewissern Sie sich, dass Sie akismet (systemweit oder virtualenv) installiert haben.
  2. Überprüfen Sie dies durch Einfügen (Importieren von Akismet) in eine Python-Shell
  3. CD in das Stammverzeichnis Ihres Projekts und führen Sie aus ( find. -Name akismet.py )
  4. Wenn Sie eine Datei mit diesem Namen finden, prüfen Sie, ob Sie sie umbenennen können
  5. Dann führe aus ( find. -Name akismet.pyc -print0 | xargs -0 rm -rf )

Führen Sie jetzt Ihre Anwendung aus und Sie sollten gut sein.

1
un33k

Ich vergesse immer, dass ipython die Module importiert, wenn Sie den Befehl run im ipython-Interpreter verwenden. Es werden keine von Ihnen geänderten Module erneut importiert, sodass keine neuen Variablen oder Funktionen gefunden werden. Dies ist ein bekanntes Problem mit ipython.

Schlussfolgerung: Vermeiden Sie die Verwendung von run, da Ihre Module nicht erneut geladen werden.

0
david_adler