webentwicklung-frage-antwort-db.com.de

importfehler: 'Kein Modul mit dem Namen' * existiert *

Ich bekomme diese Stack-Spur, wenn ich Pyramid pserve starte:

% python $(which pserve) ../etc/development.ini
Traceback (most recent call last):
  File "/home/hughdbrown/.local/bin/pserve", line 9, in <module>
    load_entry_point('pyramid==1.5', 'console_scripts', 'pserve')()
  File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.Egg/pyramid/scripts/pserve.py", line 51, in main
    return command.run()
  File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.Egg/pyramid/scripts/pserve.py", line 316, in run
    global_conf=vars)
  File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.Egg/pyramid/scripts/pserve.py", line 340, in loadapp
    return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/loadwsgi.py", line 247, in loadapp
    return loadobj(APP, uri, name=name, **kw)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/loadwsgi.py", line 271, in loadobj
    global_conf=global_conf)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/loadwsgi.py", line 296, in loadcontext
    global_conf=global_conf)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/loadwsgi.py", line 320, in _loadconfig
    return loader.get_context(object_type, name, global_conf)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/loadwsgi.py", line 454, in get_context
    section)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/loadwsgi.py", line 476, in _context_from_use
    object_type, name=use, global_conf=global_conf)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/loadwsgi.py", line 406, in get_context
    global_conf=global_conf)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/loadwsgi.py", line 296, in loadcontext
    global_conf=global_conf)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/loadwsgi.py", line 337, in _loadfunc
    return loader.get_context(object_type, name, global_conf)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/loadwsgi.py", line 681, in get_context
    obj = lookup_object(self.spec)
  File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.Egg/paste/deploy/util.py", line 68, in lookup_object
    module = __import__(parts)
  File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/ponder-0.0.40-py2.7.Egg/ponder/server/__init__.py", line 10, in <module>
    from ponder.server.views import Endpoints, route
ImportError: No module named views

Dies funktioniert gut von einer Python-REPL:

% python
Python 2.7.5+ (default, Feb 27 2014, 19:37:08) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ponder.server.views import Endpoints, route
>>> 

und von einem Befehlszeilenimport:

% python -c "from ponder.server.views import Endpoints, route"

Eine gekürzte tree-Ausgabe zeigt, woran ich arbeite:

% tree
├── __init__.py
├── ponder
│   ├── __init__.py
│   ├── server
│   │   ├── __init__.py
│   │   └── views
│   │       ├── environment_templates.py
│   │       ├── groups.py
│   │       ├── __init__.py
│   │       ├── instances.py
│   │       ├── tasks.py
│   │       └── users.py

Mein PYTHONPATH ist auf die Wurzel dieses Baums gesetzt:

% echo $PYTHONPATH
/home/hughdbrown/workspace/ept/ponder/lib

Ich führe dies in einer virtualenv aus, die Python 2.7 verwendet. Ich habe das heute ab und zu laufen lassen, aber ich kann nicht herausfinden, wo das Problem liegt. Zum einen scheint der __init__.py mit einigen Importen, die kurz davor kommen, in Ordnung zu sein:

from .database import get_db
from .config import parser
from .views import Endpoints, route

(Ich habe die letzte Zeile in einen absoluten Import geändert. Kein Glück.)

Dinge, die ich ausprobiert habe:

  1. Virtualenv neu erstellen

  2. PYTHONPATH einstellen

  3. Verwenden absoluter Pfade im Code

  4. Suche nach Zirkularimporten

Ich bin offen für weitere Vorschläge, wie Sie diesen Fehler beheben können.


Der Fehler, den ich gemacht habe, war, nur den Quellbaum zu betrachten. Das Problem lag wirklich in der Laufzeitumgebung, in meiner virtuellen Umgebung. Und als ich dort nachgesehen habe, stellte ich fest, dass die gewünschten Dateien nicht installiert wurden. Bei root war das Problem der setup.py.

41
hughdbrown

Mein üblicher Trick ist, sys.path einfach in dem Kontext zu drucken, in dem das Importproblem auftritt. In Ihrem Fall scheint der Ort für den Druck in /home/hughdbrown/.local/bin/pserve zu sein. Überprüfen Sie dann die Verzeichnisse und Dateien an den Stellen, an denen der Pfad angezeigt wird.

Sie tun das, indem Sie zuerst:

import sys

und in Python 2 mit Druckausdruck:

print sys.path

oder in Python 3 mit der Druckfunktion:

print(sys.path)
40
antont

Ich habe die PYTHONPATH auf '.' gesetzt und das hat es für mich gelöst.

export PYTHONPATH='.'

Für einen Einliner könnten Sie genauso einfach folgendes tun:

PYTHONPATH='.' your_python_script

Diese Befehle werden voraussichtlich in einem Terminal ausgeführt.

45
javabeangrinder

Ich hatte das gleiche Problem und löste es, indem ich den folgenden Code oben in der Python-Datei hinzufügte:

import sys
import os

sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))

Die Anzahl der Wiederholungen von os.path.dirname hängt davon ab, wo sich die Datei in Ihrer Projekthierarchie befindet. In meinem Fall ist die Projektwurzel beispielsweise drei Ebenen höher. 

4
Karin Lahyani

Ich traf das gleiche Problem und probiere pdb.set_trace () vor der Fehlerzeile aus. 

Mein Problem ist das Duplikat des Paketnamens mit dem Modulnamen wie:

test
├── __init__.py
├── a
│   ├── __init__.py
│   └── test.py
└── b
    └── __init__.py

und in der Datei a/__init__.py führt from test.b import xxx zu ImportError: No module named b.

3
joest

Es gibt verschiedene Möglichkeiten, ein Python-Skript auszuführen:

  • ausführen durch Doppelklick auf file.py (öffnet die Python-Befehlszeile)
  • führen Sie Ihre file.py von der cmd-Eingabeaufforderung (cmd) aus (ziehen Sie/ziehen Sie Ihre Datei darauf ).
  • führe deine file.py in deiner IDE aus (zB pyscripter oder Pycharm)

Jede dieser Möglichkeiten kann eine andere Version von Python ausführen (¤)


Überprüfen Sie, welche Python-Version von cmd ausgeführt wird: Geben Sie cmd ein:

python --version 

Prüfen Sie, welche Python-Version ausgeführt wird, wenn Sie auf .py klicken:  

Option 1:

erstellen Sie ein test.py, das Folgendes enthält: 

import sys print (sys.version)
input("exit")

Option 2

geben Sie in cmd ein:

assoc .py
ftype Python.File

Überprüfe den Pfad und ob das Modul (zB win32clipboard) in der cmd erkannt wird:

erstellen Sie ein test.py, das Folgendes enthält: 

python
import sys
sys.executable
sys.path
import win32clipboard
win32clipboard.__file__

Überprüfen Sie den Pfad und ob das Modul in der .py erkannt wird

erstellen Sie ein test.py, das Folgendes enthält:

import sys
print(sys.executable)
print(sys.path)
import win32clipboard
print(win32clipboard.__file__)

Wenn die Version in cmd in Ordnung ist, aber nicht in .py, liegt dies daran, dass das mit .py verknüpfte Standardprogramm nicht das richtige ist. Python-Version für .py ändern

So ändern Sie die mit cmd verknüpfte Python-Version:

Control Panel\All Control Panel Items\System\Advanced system setting\Environnement variableIn SYSTEM-Variable setzen Sie die Variable path auf Ihre Python-Version (der Pfad wird durch ;: cmd getrennt. Verwenden Sie den FIRST-Pfad, z benutze python27)

So ändern Sie die mit der Erweiterung .py verknüpfte Python-Version:

Führen Sie cmd als admin aus:

Write: ftype Python.File="C:\Python35\python.exe" "%1" %* Es wird die letzte Python-Version (zB Python3.6) festgelegt. Wenn Ihre letzte Version 3.6 ist und Sie 3.5 möchten, fügen Sie einfach xxx in Ihrem Ordner (xxxpython36) hinzu, sodass die letzte erkannte Version, Python3.5, verwendet wird (nachdem cmd das xxx entfernt).

Andere:

"No modul error" könnte auch von einem Syntaxfehler zwischen python et 3 herrühren (zB fehlende Klammer für die Druckfunktion ...)

¤ Somit hat jeder von ihnen eine eigene Pip-Version

2
JinSnow

Ich hatte auch dieses Problem, ich hatte gerade vergessen, workon myproject im Terminal einzugeben, bevor ich mein Programm ausführte.

1
Hawker65

Die PYTHONPATH ist nicht richtig eingestellt. Exportieren Sie es mit export PYTHONPATH=$PYTHONPATH:/path/to/your/modules.

1
SaGeSpidy

Ich hatte das gleiche Problem. Ich habe es gelöst, indem ich den Befehl in einer anderen Python-Version ausgeführt habe. Ich habe python3 filename.py ausprobiert. Früher habe ich Python 2.7 verwendet.

Eine andere Möglichkeit ist, dass die Datei, aus der etwas importiert wird, eine Stückliste (Byte Order Mark) enthält. Sie können dieses Problem lösen, indem Sie die Datei in einem Editor öffnen, der mehrere Codierungen wie VSCode (Notepad ++) unterstützt, und das Speichern in einem anderen Codierungsstandard wie ANSI, UTF-8 (ohne BOM).

0

Für den Fall, dass dies für jeden von Interesse ist, hatte ich das gleiche Problem, als ich Python in Cygwin betrieb. In meinem Fall war es kompliziert, dass Pandas nicht installiert wurden, obwohl dies der Fall war. Das Problem war, dass ich zwei Installationen von Python hatte - eine in Windows und eine weitere in Cygwin (unter Verwendung des Cygwin-Installationsprogramms). Obwohl beide Versionen die gleiche Version von Python waren, war die Cygwin-Installation verwirrt, wo Pandas installiert wurde. Als ich Cygwins Python deinstallierte und Cygwin auf die Windows-Installation zeigte, war alles in Ordnung

0
S.N.

Das habe ich bekommen, als ich die Dinge nicht richtig geschrieben habe. ich hatte

__init.py__ 

anstatt von

__init__.py
0
Brig

Wenn Sie ein Skript mit demselben Namen wie Ihr Modul in einem anderen Verzeichnis haben, wird dieses stattdessen verwendet. Zum Beispiel:

module.py

module
|
|--module
|  |
|  |--__init__.py
|  |--module.py

Dadurch wird das erste module.py verwendet, nicht das zweite.

0
Arcsector