Ich habe ein Python-Projekt, in dem ich eine C++
Klasse verwenden möchte, die ich über Cython verfügbar gemacht habe (wirklich, ich brauche nur eine bestimmte Instanz der Klasse, wie der folgende Code demonstriert). Da es eine Reihe von Dateien gab, die mit der Klasse verbunden waren, entschied ich mich, sie in ein eigenes Paket zu schreiben.Cython exposed-Klasse aus einem anderen Verzeichnis importieren
In der __init__.py
Datei dieses Pakets habe ich was zu dem folgenden Code beträgt:
from foo import Foo # import the class
bar = Foo(some_parameters)
__all__ = ["bar"]
Das funktioniert gut, wenn ich __init__.py
von selbst laufen. Allerdings, wenn ich versuche, darauf zuzugreifen von außerhalb des Verzeichnisses:
from qux import bar # inside main.py in the parent directory
bekomme ich den Fehler an die gleichen zurückverfolgt __init__.py
:
File "D:\path\to\qux\\__init__.py", line 2, in <module>
from foo import Foo
ImportError: No module named 'foo'
Daran erinnern, dass foo
ist eine Cython Datei, nicht rein Python-Code.
Die Verzeichnisstruktur sieht wie folgt aus:
main_project\
main.py
(more supporting files here)
qux\
__init__.py
cy_foo.cpp
cy_foo.pyx
foo.cpp
foo.h
foo.cp35-win_amd64.pyd
(more supporting files here)
Was ist los?
Das hat es behoben! Ich glaube, ich habe versucht, etwas wie "Import scipy" zu machen; von Optimize Import Brentq ohne Qualifizierung 'Optimize' als' Scipy'. Es kam mir einfach nicht in den Sinn, dass Python immer noch im obersten Verzeichnis suchen würde, während er ein Skript in einem Unterverzeichnis ausführte. –