Créer un environnement pour exécuter des fonctions C ++ à partir de Python avec Pybind11 (pour les utilisateurs de Windows et Visual Studio Code)

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.

0. Environnement

Nous avons confirmé dans l'environnement suivant. CMake La méthode d'installation suivante est expliquée dans cet article.

1. Construction de l'environnement

1.1. Installation de CMake

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

1.2. Installation de Mingw-w64

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

1.3. Installation de Pybind 11

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

2. Je vais essayer (■ 1 ■)

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.

3. Conclusion

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.

référence

J'ai fait référence à l'article suivant.

Comment installer Mingw-w64

Explication de CMake

Comment utiliser Pybind 11

Recommended Posts

Créer un environnement pour exécuter des fonctions C ++ à partir de Python avec Pybind11 (pour les utilisateurs de Windows et Visual Studio Code)
Créer un environnement de développement Python avec Visual Studio Code
Environnement de développement Python avec Windows + Anaconda3 + Visual Studio Code
Environnement de développement Python avec Windows + Python + PipEnv + Visual Studio Code
Créer Python3 pour Windows 10 sur ARM avec Visual Studio 2019 (x86) sur Windows 10 sur ARM
Essayez de créer un environnement python avec Visual Studio Code et WSL
Utilisation des fonctions C ++ de python avec pybind11
Notes de l'installation de Homebrew à la création d'un environnement Anaconda pour Python avec pyenv
J'ai essayé de créer un environnement avec WSL + Ubuntu + VS Code dans un environnement Windows
Un véritable moyen pour les personnes utilisant python 3.8.0-2 à partir de Windows de travailler avec des caractères multi-octets
J'ai essayé de créer un environnement d'apprentissage automatique avec Python (Mac OS X)
Activer l'environnement virtuel Python de virtualenv pour Visual Studio Code
Exécuter du code Python à partir de l'interface graphique C #
Comment créer un environnement d'exécution virtuelle pour Python à l'aide de Visual Studio Code et de pipenv sur une machine Windows (également le notebook Jupyter)
De la création d'un environnement Python pour les personnes inexpérimentées à Hello world
Passer la liste de Python vers C ++ par référence dans pybind11
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
Créer un environnement pour Python intégré à Blender
Une introduction à Python pour les programmeurs en langage C
Créez un environnement de développement Python sur Windows (WSL distant Visual Studio Code).
Procédure de création d'un environnement virtuel Python avec VS Code sous Windows
De la construction de ré-environnement de Python au dessin graphique (sur le code Visual Studio)
Pour les débutants à créer un environnement Anaconda. (Note)
Comment créer un environnement pour utiliser plusieurs versions de Python sur un Mac
Construire un environnement Anaconda pour Python avec pyenv
Envelopper C avec Cython pour une utilisation à partir de Python
Code de caractères pour la lecture et l'écriture de fichiers csv avec python
Django avec Python Tools 2.2 pour Visual Studio (PTVS 2.2)
Traitement d'image avec la configuration de l'environnement Python pour Windows
Je l'ai personnalisé avec Visual Studio Code (principalement pour python), je vais donc le résumer
Paramètres de codage Python avec Visual Studio Code
Envelopper C ++ avec Cython pour une utilisation à partir de Python
Je veux créer du code C ++ à partir de code Python!
Une note à laquelle j'étais accro lors de l'exécution de Python avec Visual Studio Code
De la construction d'environnement Python à la construction d'environnement virtuel avec anaconda
Créez un environnement de développement local avec WSL + Docker Desktop pour Windows + docker-lambda + Python
[Visual Studio Code] [Python] Paramètres Tasks.json + problemMatcher pour Python
Créer un environnement d'exécution python avec VS Code
Une histoire sur la façon dont les utilisateurs de Windows 10 ont créé un environnement pour utiliser OpenCV3 avec Python 3.5
Construction d'environnement pour ceux qui veulent étudier Python facilement avec VSCode (pour Mac)
[Cloud 9] Essayez de créer un environnement avec django 1.11 de Python 3.4 sans même comprendre 1 mm
Créez un environnement interactif pour l'apprentissage automatique avec Python
Préparation à l'utilisation de Tensorflow (Anaconda) avec Visual Studio Code
Développement d'applications pour tweeter en Python à partir de Visual Studio 2017
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
[Linux] WSL2 Créer un environnement pour laravel7 avec Ubuntu 20.04
Créer un environnement pour le traitement du langage naturel avec Python
Faire en sorte que Visual Studio Code complète automatiquement la bibliothèque externe de Python
[Visual Studio Code] [Python] [Windows] Prise en charge des caractères japonais déformés dans la sortie de tâche / débogage VS Code
J'ai créé un environnement pour Masonite, un framework WEB Python similaire à Laravel, avec Docker!
[Sakura Rental Server] (Pour les débutants) Comment créer un environnement pour Python, pyenv et Flask. | Pour csh
Appeler des fonctions du langage C depuis Python pour échanger des tableaux multidimensionnels
Reconstruction de l'environnement pour l'apprentissage automatique avec Miniconda (version Windows)
OpenJTalk sur Windows10 (parler japonais avec Python depuis la construction de l'environnement)
Créer un environnement d'apprentissage automatique à l'aide de Python sur MacOSX
Créez un environnement pour "Deep Learning from scratch" avec Docker