Ich werde erklären, wie eine Umgebung erstellt wird, in der C ++ - Funktionen mit Pybind11 aus Python aufgerufen werden können. Es gab nicht viele Artikel für Benutzer von Windows und Visual Studio Code, daher fasse ich zusammen, was ich recherchiert habe. Der Editor muss jedoch nicht Visual Studio Code sein.
Wir haben in der folgenden Umgebung bestätigt. CMake Die folgende Installationsmethode wird in diesem Artikel erläutert.
CMake ist ein Tool, das die Einstellungen zum Erstellen von C ++ usw. verschiedenen Compilern zur Verfügung stellt. Ich bin mir jedoch selbst nicht sicher. Weitere Informationen finden Sie unter hier.
Laden Sie das Windows win64-x64-Installationsprogramm von der Download-Seite (https://cmake.org/download/) herunter und installieren Sie es.
Mingw-w64 ist die Windwos 64-Bit-Version des kostenlosen C ++ - Compilers g ++. Ich bin mir auch nicht sicher, also fragen Sie bitte Herrn Google.
Laden Sie das Installationsprogramm usw. von der [Download-Seite] herunter (https://sourceforge.net/projects/mingw-w64/files/). Wenn Sie sich in einer Online-Umgebung befinden, installieren Sie sie mit dem Installationsprogramm "MinGW-W64-install.exe". Wenn Sie sich in einer Offline-Umgebung befinden, installieren und extrahieren Sie die Datei im 7z-Format.
In diesem Artikel lautet die Platzierung von g ++. Exe
wie folgt: D: \ UserProgram \ mingw-w64 \ x86_64-8.1.0-posix-seh-rt_v6-rev0 \ mingw64 \ bin \ g ++. Exe
Fügen Sie als Nächstes den obigen Ordner zur Umgebungsvariablen Pfad hinzu. Mit Powershell hinzufügen
Pro Benutzer
> $envPath = [System.Environment]::GetEnvironmentVariable("Path", "User")
> $envPath += ";D:\UserProgram\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin" #←g++.Der Pfad, der die Exe enthält
> [System.Environment]::SetEnvironmentVariable("Path", $envPath, "User")
Ersetzen Sie "Benutzer" in der ersten und dritten Zeile durch "Macine", um die Einstellung pro Terminal vorzunehmen. In diesem Fall benötigen Sie Administratorrechte.
Terminaleinheit (Administratorberechtigung erforderlich)
> $envPath = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
> $envPath += ";D:\UserProgram\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin" #←g++.Der Pfad, der die Exe enthält
> [System.Environment]::SetEnvironmentVariable("Path", $envPath, "Machine")
Wenn Sie sich in einer Online-Umgebung befinden, installieren Sie mit pip
.
Powershell
> pip install pybind11
Für die Offline-Umgebung
Laden Sie pybind11-xyz-py2.py3-none-any.wh
(x, y, z sind Zahlen) von der [PyPI-Download-Seite] herunter (https://pypi.org/project/pybind11/#files). Dann mit pip
installieren.
Powershell
>Pip Install Download-Ziel/pybind11-2.5.0-py2.py3-none-any.whl #2.5.0 Teil sollte entsprechend gelesen werden
Ich werde auch das offizielle Beispiel zur späteren Verwendung herunterladen. Wenn Sie online sind (und Git installiert haben), gehen Sie zu dem Speicherort, den Sie auf Powershell und herunterladen möchten
Powershell
git clone --recursive https://github.com/pybind/cmake_example.git
Herunterladen als. Klicken Sie in Offline-Umgebungen im offiziellen Beispiel auf die Schaltfläche "Klonen oder Herunterladen" (https://github.com/pybind/cmake_example). Laden Sie auf die gleiche Weise auch den Ordner pybind11 herunter.
** [Wichtig] Ersetzen Sie die Dateien unter "cmake_example / pybind11 / include / pybind11" durch die Dateien unter "C: \ ProgramData \ Anaconda3 \ include \ pybind11". ** Die Datei vor dem Ersetzen scheint alt zu sein und wird kompiliert, aber ich erhalte viele Warnungen "Warnung:" void PyThread_delete_key_value (int) "ist veraltet [-Wdeprecated-Deklarationen]".
Kopieren Sie aus dem zuvor heruntergeladenen Ordner "cmake_exmple" "pybind11", "src" und "CMakeLists.txt" in einen geeigneten Ordner (im Folgenden als "project_root" bezeichnet).
Ordnerstruktur
project_root
├ pybind11
│ ├ docs
│ ├ include
│ │ └pybind11 #Der Inhalt dieses Ordners
│ │ └ ・ ・ ・# C:\ProgramData\Anaconda3\include\Durch den Inhalt von pybind11 ersetzen
│ └ ・ ・ ・
├ src
│ └main.cpp
└ CMakeLists.txt
project_root/src/main.cpp
#include <pybind11/pybind11.h>
int add(int i, int j) {
return i + j;
}
namespace py = pybind11;
PYBIND11_MODULE(cmake_example, m) {
(Abkürzung)
m.def("add", &add, R"pbdoc(
Add two numbers
Some other explanation about the add function.
)pbdoc");
(Abkürzung)
}
project_root/CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(cmake_example)
add_subdirectory(pybind11)
pybind11_add_module(cmake_example src/main.cpp)
Öffnen Sie "project_root" in Visual Studio Code, gehen Sie mit "Strg + @" zum Terminal und gehen Sie wie folgt vor:
Powershell
> mkdir build #Erstellen Sie einen Build-Zielordner
> cd build #Zum Erstellen des Ziels verschieben
> cmake -G "MinGW Makefiles" .. #Konfigurieren und generieren
> cmake --build .. #Bauen
Bei Erfolg wird "cmake_example.cp37-win_amd64.pyd" im Ordner "build" erstellt. Versuchen wir es im vorherigen Terminal.
Powershell
> python #Starten Sie Python
>>> from cmake_example import add
>>> add(1,2)
3
>>> exit() #Kehre zu Powershell zurück
Wenn Sie die Funktion "Hinzufügen" aufrufen können, sind Sie erfolgreich.
Vielen Dank für das Lesen bis zum Ende. Ich habe nur das offizielle Beispiel in diesem Artikel verwendet, aber bitte beziehen Sie sich auf die Artikel anderer Leute und ändern Sie "main.cpp" und "CMakeLists.txt". Ich bin mit C ++ nicht vertraut, daher habe ich eine Weile gebraucht, um genau dies zu tun. Ich möchte mein C ++ - Debüt geben. Außerdem möchte ich in Kürze untersuchen, wie die VS-Code-Erweiterung CMake Tools verwendet wird, und einen Artikel schreiben.
Ich habe auf den folgenden Artikel verwiesen.