Un manuel de procédure pour publier rapidement une bibliothèque C ++ Python à l'aide de pybind11 sur Github

Il existe de nombreux articles qui rendent les bibliothèques écrites en C ++ disponibles à partir de Python en utilisant pybind11, J'ai senti qu'il n'y avait pas beaucoup de discussions sur la façon de publier ce que je faisais.

Dans cet article, je vais décrire la procédure pour créer un référentiel Github qui peut être publié sur la base du modèle cmake_example officiellement fourni par pybind. Si vous suivez cette procédure jusqu'à la fin, vous disposerez d'un référentiel que les utilisateurs peuvent installer et commencer à utiliser avec seulement quelques commandes.

1. Cloner cmake_example

cmake_example est un modèle officiel configuré pour construire avec CMake. Obtenez ceci en premier.

cd work  #Entrez un répertoire de travail approprié
git clone https://github.com/pybind/cmake_example.git

2. Créez et clonez votre propre référentiel Github

Comment créer un référentiel est omis. Supposons que le nom du référentiel soit mylib. Vous pouvez créer librement .gitignore, mais sachez que vous devrez le combiner avec celui de cmake_example plus tard. Vous pouvez définir public / privé comme vous le souhaitez. Clonez-le si vous le pouvez.

git clone https://github.com/*****/mylib.git

3. Ajoutez pybind11 en tant que sous-module à votre référentiel Github

cd mylib
git submodule add -b master https://github.com/pybind/pybind11.git pybind11

Divers téléchargements sont effectués dans le répertoire pybind11 / et .gitmodules est généré.

4. Copiez les fichiers minimum requis

Copiez les fichiers et répertoires requis du répertoire cmake_example / vers mylib /. Les éléments minimum requis sont les suivants.

Renommez «LICENSE» en «LICENSE.pybind» et préparez une «LICENCE» distincte pour votre projet. Comme mentionné ci-dessus, pour .gitignore, fusionnez le vôtre avec cmake_example.

5. Modifiez CMakeLists.txt

Changez la partie où cmake_example est écrit dans votre propre nom de bibliothèque.

CMakeLists.txt


cmake_minimum_required(VERSION 2.8.12)
project(mylib) <--

add_subdirectory(pybind11)
pybind11_add_module(mylib src/main.cpp) <--

6. Modifiez setup.py

Réécrivez la partie appel setup en bas avec vos propres informations.

setup.py


setup(
    name='mylib', <-
    version='1.0.0', <-
    author='oreore', <-
    author_email='[email protected]', <-
    description='HogeHoge', <-
    long_description='', <-
    ext_modules=[CMakeExtension('mylib')], <-
    cmdclass=dict(build_ext=CMakeBuild),
    zip_safe=False,
)

Si nécessaire, ajoutez les exigences de la bibliothèque externe à la description comme suit.

    ...
    zip_safe=False,
    packages=find_packages(),
    install_requires=['pillow']

7. Modifiez le code source

Réécrivez le nom de la bibliothèque en mylib à la spécification de PYBIND11_MODULE dans main.cpp.

PYBIND11_MODULE(mylib, m) {

Après cela, créez le code comme vous le souhaitez et ajoutez-le à CMakeLists.txt si nécessaire.

8. Construire

python setup.py build

OK s'il n'y a pas d'erreur

9. Installer

python setup.py install

10. Vérifiez le fonctionnement

Sortez du répertoire mylib /, démarrez python, importez la bibliothèque et vérifiez l'opération. Si vous archivez mylib /, il est possible que le fichier sous le répertoire courant soit utilisé à la place du fichier installé en raison de l'influence de l'ordre de recherche des fichiers, alors faites-le à l'extérieur.

>>> import mylib
>>> mylib.add(1, 2)
>>> 3

11. Engager et publier

Pour inciter les utilisateurs à utiliser ce que vous avez créé, procédez comme suit.

11.1. Préparez le compilateur et CMake

Dans le cas d'Ubuntu, etc.

sudo apt install build-essential cmake

Vous devez juste le frapper. Si vous êtes un utilisateur Windows ..., faites de votre mieux pour que Visual Studio 2019 et CMake soient installés séparément (vous devez également faire suivre à CMake le chemin, ce qui est douloureux).

11.2. Faire cloner le référentiel

Demandez à l'utilisateur d'exécuter la commande suivante lors du clonage du référentiel.

git clone --recursive https://github.com/******/mylib.git

Si vous n'ajoutez pas --recursive, pybind11 ne sera pas téléchargé et vous ne pourrez pas le construire, alors décrivez-le correctement.

11.3. Lancez setup.py

python setup.py install

Je t'ai frappé. c'est tout.

Supplément 1. Si vous souhaitez inclure du code Python

Si vous souhaitez fournir non seulement la bibliothèque C ++ mais également le code Python, changez le nom de la bibliothèque C ++ en _mylib et chargez-le comme import depuis mylib / __ init __. Py.

Spécifiquement, commencez par créer CMakeLists.txt comme suit.

CMakeLists.txt


project(_mylib)
...
pybind11_add_module(_mylib src/main.cpp)

Puis setup.py

setup.py


ext_modules=[CMakeExtension('mylib._mylib')],

Cela signifie mettre les artefacts de construction dans mylib / _mylib **** (.so ou .pyd).

Puis src / main.cpp

src/main.cpp


PYBIND11_MODULE(_mylib, m) {

Enfin, préparez le répertoire mylib / dans lequel le code source Python est placé et écrivez __init __. Py.

mylib/__init__.py


from ._mylib import *

Ajoutez ensuite le code Python comme vous le souhaitez.

Supplément 2. Lors du développement avec Visual Studio 2019

Puisque j'utilise CMake, je vais générer un fichier de solution pour Visual Studio.

Créez un répertoire build / et exécutez cmake dedans.

mkdir build
cd build
cmake .. -G "Visual Studio 16 2019"

Puisque build / mylib.sln est généré, développez en utilisant ceci. Le répertoire build / est inclus dans .gitignore, donc si vous voulez enregistrer des fichiers de solution etc. dans le référentiel, utilisez un répertoire différent au lieu de build.

Recommended Posts

Un manuel de procédure pour publier rapidement une bibliothèque C ++ Python à l'aide de pybind11 sur Github
Procédure de création d'un environnement CDK sous Windows (Python)
Exécuter du code Python sur C ++ (en utilisant Boost.Python)
Installez la bibliothèque python sur Lambda à l'aide de [/ tmp]
Création d'un outil de gestion de bibliothèque d'en-tête uniquement pour C / C ++
Procédure de création d'un LineBot réalisé avec Python
Procédure de création d'un environnement d'isolation Python (environnement venv)
Faisons un module pour Python en utilisant SWIG
Installez PyCall sur Raspberry PI et essayez d'utiliser la bibliothèque GPIO pour Python de Ruby
Paramètres initiaux pour l'utilisation de Python3.8 et pip sur CentOS8
Installez psycopg2 (bibliothèque pgsql pour python3) sur Apple Silicon
Construire l'extension Python E-Cell 4 sur Windows 7 (64 bits)
[Heroku] Mémo pour le déploiement d'applications Python à l'aide d'Heroku sous Windows [Python]
Essayez d'incorporer Python dans un programme C ++ avec pybind11
Faire un point d'arrêt sur la couche c avec python
[Introduction à python] Introduction rapide à Python pour les programmeurs C ++ occupés
Créez un environnement Python sur votre Mac en utilisant pyenv
J'ai construit une roue pour Windows à l'aide d'actions Github
Créer un environnement de développement Python à l'aide de pyenv sur MacOS
Procédure de création d'un Line Bot sur AWS Lambda
Paramètres de test des modules Python C ++ 11 avec Travis CI
Mémo de construction d'environnement d'apprentissage automatique par Python
Incorporer un interpréteur Python dans une application C ++ avec pybind11 + cmake
Créer un environnement d'apprentissage automatique à l'aide de Python sur MacOSX
Construire un environnement Python sur un Mac, jusqu'au point d'utiliser Jupyter Lab
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
Utilisez python sur Raspberry Pi 3 pour détecter la "température (en utilisant un convertisseur A / N)"!
Accédez aux feuilles de calcul Google en utilisant python avec raspberry pi (pour vous-même)
Un exemple pour dessiner des points avec PIL (Python Imaging Library).
Essayez de créer un réseau de neurones en Python sans utiliser de bibliothèque
Mémo pour la création d'un environnement Python à l'aide de Docker sur Windows 10 Famille
Construire l'extension Python E-Cell 4 sur Mac OSX (Yosemite)
Créer un script Python pour Wake on LAN (Wake on LAN over NAT [5])
Bibliothèque pour spécifier un serveur de noms en python et dig
Créer un environnement virtuel pour python sur mac [Très facile]
Créez un environnement python sur CentOS 7.7 pour votre serveur domestique
Utilisez un langage de script pour une vie C ++ confortable-OpenCV-Port Python vers C ++ -