Je vais expliquer comment créer un environnement qui permet aux fonctions C ++ d'être appelées à partir de Python en utilisant Pybind11. Il n'y avait pas beaucoup d'articles pour les personnes utilisant Windows et Visual Studio Code, je vais donc résumer ce que j'ai recherché. Toutefois, l'éditeur n'a pas besoin d'être Visual Studio Code.
Nous avons confirmé dans l'environnement suivant. CMake La méthode d'installation suivante est expliquée dans cet article.
CMake est un outil qui rend les paramètres de construction de C ++, etc. disponibles pour divers compilateurs. Cependant, je n'en suis pas sûr moi-même, alors veuillez consulter ici pour plus de détails.
Téléchargez et installez le programme d'installation Windows win64-x64 à partir de la page de téléchargement (https://cmake.org/download/).
Mingw-w64 est la version Windwos 64 bits du compilateur C ++ gratuit g ++. Je n'en suis pas sûr non plus, alors demandez à M. Google.
Téléchargez le programme d'installation, etc. depuis la page de téléchargement. Si vous êtes dans un environnement en ligne, installez-le avec le programme d'installation MinGW-W64-install.exe
. Si vous êtes dans un environnement hors ligne, installez et extrayez le fichier au format 7z.
Dans cet article, l'emplacement de g ++. Exe
est le suivant: D: \ UserProgram \ mingw-w64 \ x86_64-8.1.0-posix-seh-rt_v6-rev0 \ mingw64 \ bin \ g ++. Exe
Ensuite, ajoutez le dossier ci-dessus à la variable d'environnement Path. À ajouter avec Powershell
Par utilisateur
> $envPath = [System.Environment]::GetEnvironmentVariable("Path", "User")
> $envPath += ";D:\UserProgram\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin" #←g++.Le chemin qui contient l'exe
> [System.Environment]::SetEnvironmentVariable("Path", $envPath, "User")
Pour définir sur une base par terminal, remplacez «" Utilisateur "» sur les première et troisième lignes par «" Macine "». Dans ce cas, vous avez besoin de privilèges d'administrateur.
Unité terminale (autorisation d'administrateur requise)
> $envPath = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
> $envPath += ";D:\UserProgram\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin" #←g++.Le chemin qui contient l'exe
> [System.Environment]::SetEnvironmentVariable("Path", $envPath, "Machine")
Si vous êtes dans un environnement en ligne, installez avec pip
.
Powershell
> pip install pybind11
Pour un environnement hors ligne
Téléchargez pybind11-xyz-py2.py3-none-any.wh
(x, y, z sont des nombres) depuis la page de téléchargement PyPI Puis installez avec pip
.
Powershell
>destination de téléchargement d'installation de pip/pybind11-2.5.0-py2.py3-none-any.whl #2.5.0 partie doit être lue comme approprié
Je téléchargerai également l'exemple officiel pour une utilisation ultérieure. Si vous êtes en ligne (et que Git est installé), accédez à l'emplacement que vous souhaitez télécharger sur Powershell et
Powershell
git clone --recursive https://github.com/pybind/cmake_example.git
Téléchargez au format. Pour les environnements hors ligne, appuyez sur le bouton «Cloner ou télécharger» dans l'exemple officiel (https://github.com/pybind/cmake_example). Téléchargez également le dossier pybind11 de la même manière.
** [Important] Remplacez les fichiers sous cmake_example / pybind11 / include / pybind11
par les fichiers sous C: \ ProgramData \ Anaconda3 \ include \ pybind11
. ** Le fichier avant le remplacement semble être vieux et compilé, mais je reçois beaucoup d'avertissements warning: 'void PyThread_delete_key_value (int)' est obsolète [-Wdeprecated-declarations]
.
Depuis le dossier cmake_exmple
que vous avez téléchargé précédemment, copiez pybind11
, src
et CMakeLists.txt
dans un dossier approprié (ci-après dénommé project_root
).
Structure des dossiers
project_root
├ pybind11
│ ├ docs
│ ├ include
│ │ └pybind11 #Le contenu de ce dossier
│ │ └ ・ ・ ・# C:\ProgramData\Anaconda3\include\Remplacer par le contenu de pybind11
│ └ ・ ・ ・
├ 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) {
(Abréviation)
m.def("add", &add, R"pbdoc(
Add two numbers
Some other explanation about the add function.
)pbdoc");
(Abréviation)
}
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)
Ouvrez project_root
dans Visual Studio Code, accédez au terminal avec Ctrl + @
et procédez comme suit:
Powershell
> mkdir build #Créer un dossier de destination de construction
> cd build #Déplacer vers la destination de construction
> cmake -G "MinGW Makefiles" .. #Configurer et générer
> cmake --build .. #Construire
En cas de succès, cmake_example.cp37-win_amd64.pyd
sera créé dans le dossier build
. Essayons-le dans le terminal précédent.
Powershell
> python #Lancez Python
>>> from cmake_example import add
>>> add(1,2)
3
>>> exit() #Retour à Powershell
Si vous pouvez appeler la fonction ʻadd`, vous réussissez.
Merci d'avoir lu jusqu'au bout.
Je n'ai utilisé que l'exemple officiel de cet article, mais veuillez vous référer aux articles d'autres personnes et modifier main.cpp
et CMakeLists.txt
.
Je ne suis pas familier avec C ++, il m'a donc fallu un certain temps pour pouvoir faire exactement cela. Je voudrais faire mes débuts en C ++. Aussi, je voudrais étudier comment utiliser l'extension VS Code CMake Tools bientôt et écrire un article.
J'ai fait référence à l'article suivant.