Ich stehe vor einem sehr seltsamen Problem. Ich habe drei Dateien, die erste enthält die Basisklasse, von der die Klassen in den beiden anderen Dateien erben.Python-Modul-Import funktioniert für eine Datei, schlägt für andere
Das Seltsame ist, gestern hat alles gut funktioniert, aber eine der Dateien funktioniert heute nicht mehr. Ich habe die Importe in der Zwischenzeit nicht berührt.
.
└── orangecontrib
├──__init__.py
└── prototypes
├──__init__.py
└── widgets
├──__init__.py
├── owpythagorastree.py
├── owclassificationpythagorastree.py
└── owregressionpythagorastree.py
So sind die Klassifikations- und Regressionsklassen müssen von der Basisklasse erben, und die Importe werden in genau der gleichen Weise:
owclassificationpythagorastree.py
...
from orangecontrib.prototypes.widgets.owpythagorastree import OWPythagorasTree
...
owregressionpythagorastree .py
...
from orangecontrib.prototypes.widgets.owpythagorastree import OWPythagorasTree
...
Doch wenn ich versuche, die beiden Skripte von der Kommandozeile (mit python owregressionpythagorastree.py
) die Regressions Widget funktioniert gut, aber die Einstufung Widget erzeugt den folgenden Fehler auszuführen:
Traceback (most recent call last): File "owclassificationpythagorastree.py", line 6, in from orangecontrib.prototypes.widgets.owpythagorastree import OWPythagorasTree ImportError: No module named 'orangecontrib.prototypes'
Dieses mehrmals in anderen passiert ist Projekte auch, aber es sortiert sich schließlich aus. Aber es stört mich, dass ich nicht weiß, was das verursacht.
Ich habe versucht, dies sowohl von meinem regulären Computer und einem Python virtualenv, wo ich das Modul installiert habe (Ich tat dies mit pip install -e .
im Basisverzeichnis).
Ich sehe keinen ersichtlichen Grund für dieses Verhalten und es stört mich sehr, so jede Hilfe oder Einsicht, warum dies geschieht und wie es zu beheben wäre, würde geschätzt.
EDIT
Wie gewünscht, lief ich import sys; print(sys.path)
an der Spitze der beiden Skripte und es durch diff nach dem Laufen, sie sind beide völlig identisch. Trotzdem poste ich die Ergebnisse hier.
['/home/pavlin/dev/orange3-prototypes/orangecontrib/prototypes/widgets', '/home/pavlin/dev/orange3', '/home/pavlin/dev/orange3env/lib/python3.5/site-packages/setuptools_git-1.1-py3.5.egg', '/home/pavlin/dev/orange-bio', '/home/pavlin/dev/orange3env/lib/python3.5/site-packages/pyqtgraph-0.9.10-py3.5.egg', '/home/pavlin/dev/orange3env/lib/python3.5/site-packages/requests-2.9.1-py3.5.egg', '/home/pavlin/dev/orange3env/lib/python3.5/site-packages/slumber-0.7.1-py3.5.egg', '/home/pavlin/dev/orange3env/lib/python3.5/site-packages/Genesis_PyAPI-1.2.0-py3.5.egg', '/usr/lib/python3.5/site-packages/qt_graph_helpers-0.1.3-py3.5-linux-x86_64.egg', '/home/pavlin/dev/orange3-prototypes', '/usr/lib/python3.5/site-packages', '/home/pavlin/dev/orange3env/lib/python35.zip', '/home/pavlin/dev/orange3env/lib/python3.5', '/home/pavlin/dev/orange3env/lib/python3.5/plat-linux', '/home/pavlin/dev/orange3env/lib/python3.5/lib-dynload', '/usr/lib64/python3.5', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-linux', '/home/pavlin/dev/orange3env/lib/python3.5/site-packages', '/usr/lib/python3.5/site-packages/setuptools-18.7.1-py3.5.egg', '/home/pavlin/.local/lib/python3.5/site-packages']
In jedem Verzeichnis befinden sich '__init __. Py'-Dateien. Ich werde sie der Frage hinzufügen, um Verwirrung zu vermeiden. Dies kann nicht das Problem sein, da die Module eindeutig für eine der Dateien funktionieren, aber nicht für die andere. – Pavlin
Ich kann Ihnen das sagen, zum Beispiel, wenn ich versuche, ein Modul von mir auf dem Desktop zu importieren, wenn ich versuche, es auf der Shell zu importieren, kann ich nicht. Weil Shell auf einem anderen Pfad arbeitet, aber wenn ich es in eine .py-Datei auf dem Desktop importiere, funktioniert es. Shell ist auch auf dem Desktop. Versuche also, sie zu überprüfen, ob sie tatsächlich auf diesem Pfad laufen. Auf einem Pfad zu bleiben bedeutet nicht, dass sie auf diesem Pfad laufen, das ist der Trick. – GLHF
Was ist mit 'von .owpythagorastree importieren OWPythagorasTree'? Oder auch ohne den Punkt? –