[PYTHON] Rufen Sie den von Cython aus C / C ++ (Windows-Version) generierten Code auf.

Heute

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.)

Umgebung

Erstellen einer Umgebung mit Visual Studio

Lösungserstellung

project.png

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 der Quelldatei Code hinzu

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.

Kennen Sie den Standort von Python

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. pythonhome.png

Notieren Sie sich den Pfad dieses Verzeichnisses, wie es als nächstes verwendet wird.

Eigenschaftsbearbeitung

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.

propety.png

Einführung von Debug-Binärdateien und Debugging-Symbolen

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. install.png next.png debug.png

Ü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.

Build-Check

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.

Cython-Codeerstellung

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

Generierter Code hinzugefügt

Zu diesem Zeitpunkt generiert Fügen Sie cytest.c cytest.h zur Visual Studio-Quelldatei bzw. zur Header-Datei hinzu.

Bearbeiten Sie Source.cpp

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.

vstotal.png

Bei der Ausführung ist dies wie folgt.

result.png

Schließlich

Es ist schwer ... Als Referenz

Ich werde erwähnen.

Recommended Posts

Rufen Sie den von Cython aus C / C ++ (Windows-Version) generierten Code auf.
Rufen Sie den von Cython aus C / C ++ (Mac-Version) generierten Code auf.
Aufrufbefehle von Python (Windows Edition)
Rufen Sie C von Python mit DragonFFI auf
Rufen Sie popcount von Ruby / Python / C # auf
Führen Sie Python-Code über die C # -GUI aus
Holen Sie sich eine Adresse aus einer Postleitzahl
Rufen Sie C / C ++ von Python auf dem Mac auf
Rufen Sie die c-Sprache von Python aus auf (python.h)
Laden Sie die Datei herunter, indem Sie das Download-Ziel mit Python & Selemiun & Chrome (Windows-Version) angeben.
Installieren Sie, indem Sie die Version mit pip angeben
Lesen Sie die Datei, indem Sie den Zeichencode angeben.
Stellen Sie die von Eigen of C ++ erstellte Bibliothek mit Boost.Numpy in Python zur Verfügung.