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:
Virtualenv neu erstellen
PYTHONPATH
einstellen
Verwenden absoluter Pfade im Code
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
.
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)
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.
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.
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
.
Es gibt verschiedene Möglichkeiten, ein Python-Skript auszuführen:
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 variable
In 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
Ich hatte auch dieses Problem, ich hatte gerade vergessen, workon myproject im Terminal einzugeben, bevor ich mein Programm ausführte.
Die PYTHONPATH
ist nicht richtig eingestellt. Exportieren Sie es mit export PYTHONPATH=$PYTHONPATH:/path/to/your/modules
.
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).
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
Das habe ich bekommen, als ich die Dinge nicht richtig geschrieben habe. ich hatte
__init.py__
anstatt von
__init__.py
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.