Einführung in die Verwendung von Cython zum Aufrufen von Python aus C / C ++.
Es ist üblich, einen äußeren Wassergraben in Python zu schreiben und den Kernteil C / C ++ zur Beschleunigung aufzurufen. Diesmal ist es das ** Gegenteil **. Im Gegenteil, es gibt nicht viel anderes als das offizielle Dokument ... Bitte lassen Sie mich wissen, wenn Sie welche haben. OTL.
(Ergänzung: Ich habe die Mac-Version geschrieben.)
Visual C ++ -> Leeres Projekt auswählen-> Drücken Sie vorerst die OK-Taste. Jetzt können Sie ein leeres Projekt erstellen. Die Lösung und der Name des ersten erstellten Projekts lautet Project1.
Fügen Sie eine leere C ++ - Datei mit Strg + Umschalt + A hinzu. Der Standardname ist Source.cpp, aber verwenden Sie ihn so wie er ist. Wir werden den Code später in Source.cpp schreiben. Lassen Sie es vorerst leer.
Bitte beachten Sie, dass dies von nun an von Ihrer eigenen Umgebung abhängt.
Ich denke, die Leser sind mit Python vertraut, sodass Sie wissen, welches Python Sie verwenden. Aber lass uns nachsehen.
Öffnen Sie eine Eingabeaufforderung
> where python
Wird ausgeführt. In meinem Fall war es "C: \ ProgramData \ Miniconda3 \ python.exe".
Gehen Sie zu C: \ ProgramData \ Miniconda3
.
In der Abbildung unten sind "include" und "libs" ausgewählt.
Notieren Sie sich den Pfad dieses Verzeichnisses, wie es als nächstes verwendet wird.
Fügen Sie den oben angegebenen vollständigen Pfad von include zu Eigenschaften> VC ++ - Verzeichnis> Include-Verzeichnis hinzu. In meinem Fall "C: \ ProgramData \ Miniconda3 \ include" ist.
Fügen Sie den vollständigen Pfad der oben angegebenen Bibliotheken zu Eigenschaften> VC ++ - Verzeichnis> Verzeichnis einschließen hinzu. In meinem Fall "C: \ ProgramData \ Miniconda3 \ libs" ist.
Lassen wir es wie den roten Rahmen aussehen, der von der Abbildung unten umgeben ist. Stellen Sie die Plattform außerdem auf x64 ein.
Holen Sie sich das Installationsprogramm von der offiziellen Python-Homepage und starten Sie das Installationsprogramm. Klicken Sie auf Installation anpassen und dann auf die Schaltfläche Weiter.
Überprüfen Sie die Download-Debug-Binärdateien und die Debugging-Symbole. Wenn Sie diesen Python nicht als Hauptversion verwenden, müssen Sie PATH nicht hinzufügen.
Schreiben Sie Folgendes in Source.cpp
source.cpp
#include<Python.h>
int main() {
Py_Initialize();
printf("Hello");
Py_Finalize();
return 0;
}
Wenn Sie im Release-Modus bauen können, ist dies vorerst in Ordnung. Wenn Sie sich darüber ärgern, dass Python.h fehlt, ist das Hinzufügen des Include-Verzeichnisses fehlgeschlagen. Beruhigen wir uns und stellen es wieder ein.
Und im Debug-Modus benötigen Sie eine DLL mit dem gleichen Namen wie python35_d.lib, also müssen Sie sie erhalten.
Sie können es erhalten, indem Sie das Python 3-Installationsprogramm auf der offiziellen Python-Seite starten und als Option "Debug-Binärdateien herunterladen" auswählen. Dies bezieht sich auf den obigen Stapelüberlauf. Lass es uns finden.
Erstellen Sie Folgendes in derselben Ebene wie Source.cpp, die oben erstellt wurde.
Jeder Code lautet wie folgt.
setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("cytest.pyx"))
cytest.pyx
from libc.stdio cimport printf
cdef public struct Point:
double x
double y
cdef public Point DoubleCoord(Point p):
cdef Point q
q.x=2*p.x
q.y=2*q.x
printf("q.x=%f, q.y=%f\n",q.x,q.y)
return q
Vorerst habe ich mit Cython eine Funktion erstellt, die die Scheitelpunktstruktur definiert und die Koordinaten verdoppelt.
setup Öffnen Sie eine Eingabeaufforderung und erstellen Sie Ihren Cython-Code.
> python setup.py build_ext --inplace
Zu diesem Zeitpunkt generiert Fügen Sie cytest.c cytest.h zur Visual Studio-Quelldatei bzw. zur Header-Datei hinzu.
Source.cpp
#include<Python.h>
#include<stdio.h>
#include "cytest.h"
int main() {
Py_Initialize();
struct Point p;
p.x = 3.5;
p.y = 7.0;
struct Point q = DoubleCoord(p);
printf("q.x=%f,q.y=%f", q.x, q.y);
Py_Finalize();
}
Bisher sollte dies wie in der folgenden Abbildung in Visual Studio gezeigt sein.
Bei der Ausführung ist dies wie folgt.
Es ist schwer ... Als Referenz
Ich werde erwähnen.
Recommended Posts