[PYTHON] Wenn Sie beim Erstellen eines Pakets mit Cython Probleme beim Importieren zwischen Ordnern haben, lesen Sie dies.

Überblick

Als ich versuchte, ein Paket zu erstellen, indem ich `` `setup.py``` usw. in Cython schrieb Grundsätzlich finde ich die Ordnerstruktur chaotisch. Der Grund dafür ist, dass beim Umschließen von C ++ mit Cython der Teil, der die Implementierung auf der C ++ - Seite umschließt, den Code des Headers auf der C ++ - Seite auch auf die Cython-Seite kopieren muss.

Dadurch wird die Anzahl der Dateien erhöht und Sie müssen die Ordner trennen. Wenn Sie zu diesem Zeitpunkt die Bedeutung von "__init __. Py" nicht verstehen oder warum Sie es (für mich) sagen, werden Sie stecken bleiben.

Was scheint das Beste zu sein

Da es viel Quellcode gibt, ist es gut, ihn in verschiedene Ordner zu unterteilen. pyxAus DateipxdDateicimportund wann, Und wenn `pxd``` Dateien` cimport``` über Ordner hinweg sind Möglicherweise wird eine Fehlermeldung wie "Datei nicht gefunden" angezeigt.

Um Zeitverschwendung mit solchen Fehlern zu vermeiden Ich denke, es wäre besser, dies zu tun.

--C ++ - und Cython-Code sind durch Ordner getrennt --Wenn der Ordner mit Cythons Code Unterverzeichnisse enthält, geben Sie jeweils `__init __. Py``` ein. --Schreiben Sie alle `cimport``` im Cython-Code mit dem Pfad aus dem übergeordneten Verzeichnis des Projekts (wo sich setup.py befindet).

Ordnerstruktur

Erstellen Sie beispielsweise eine Ordnerstruktur wie diese.


setup.py

cpp_code/*

cython_code/
        | -- __init__.py
      folder_a
        | -- __init__.py
        | -- test_a.pyx
        | -- test_a.pxd
      folder_b
        | -- __init__.py
        | --  test_b.pyx
        | --  test_b.pxd
        

In einem solchen Fall setzen Sie `__init__. Py``` in jeden Ordner und Zum Beispiel, wenn test_b.pxd```` test_a.pxd``` importieren möchte,

test_b.pxd



from cython_code.folder_a.test_a cimport *

Wenn Sie es so einheitlich schreiben, müssen Sie sich wahrscheinlich nicht zu viele Gedanken über Importfehler machen.

Ich habe es als Memorandum zusammengefasst.

Ende.

Recommended Posts

Wenn Sie beim Erstellen eines Pakets mit Cython Probleme beim Importieren zwischen Ordnern haben, lesen Sie dies.
Schlagen Sie die Yahoo-Weisheitstasche an, wenn Sie Probleme mit Blog-Material haben
Wenn beim Tippen einer interaktiven Shell mit Anaconda eine lange Fehlermeldung angezeigt wird
Ein Memo beim Erstellen einer Python-Umgebung mit Miniconda
Was tun, wenn beim Importieren von matplotlib mit Jupyter ein Importfehler auftritt?
Wenn Sie Probleme beim Senden von E-Mails mit Python smtplib haben, rufen Sie die Befehlszeile auf