Es gibt viele Artikel, die in C ++ geschriebene Bibliotheken von Python mit pybind11 verfügbar machen. Ich hatte das Gefühl, dass nicht viel darüber geredet wurde, wie ich das, was ich gemacht habe, veröffentlichen sollte.
In diesem Artikel werde ich die Vorgehensweise zum Erstellen eines Github-Repositorys beschreiben, das basierend auf der von pybind offiziell bereitgestellten Vorlage "cmake_example" veröffentlicht werden kann. Wenn Sie dieses Verfahren bis zum Ende ausführen, verfügen Sie über ein Repository, das Benutzer mit nur wenigen Befehlen installieren und verwenden können.
cmake_example ist eine offizielle Vorlage, die für die Erstellung mit CMake eingerichtet wurde. Holen Sie sich das zuerst.
cd work #Geben Sie ein geeignetes Arbeitsverzeichnis ein
git clone https://github.com/pybind/cmake_example.git
Das Erstellen eines Repositorys entfällt. Nehmen wir an, der Repository-Name lautet "mylib". Sie können .gitignore frei erstellen, beachten Sie jedoch, dass Sie es später mit dem von cmake_example kombinieren müssen. Sie können öffentlich / privat einstellen, wie Sie möchten. Klone es, wenn du kannst.
git clone https://github.com/*****/mylib.git
cd mylib
git submodule add -b master https://github.com/pybind/pybind11.git pybind11
Unter dem Verzeichnis "pybind11 /" werden verschiedene Downloads durchgeführt und ".gitmodules" generiert.
Kopieren Sie die erforderlichen Dateien und Verzeichnisse aus dem Verzeichnis "cmake_example /" nach "mylib /". Die minimal erforderlichen Elemente sind wie folgt.
Benennen Sie "LIZENZ" in "LIZENZ.pybind" um und bereiten Sie eine separate "LIZENZ" für Ihr Projekt vor. Wie oben erwähnt, führen Sie für .gitignore
Ihre eigene mit cmake_example zusammen.
Ändern Sie den Teil, in dem "cmake_example" geschrieben ist, in Ihren eigenen Bibliotheksnamen.
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(mylib) <--
add_subdirectory(pybind11)
pybind11_add_module(mylib src/main.cpp) <--
Schreiben Sie den Setup-Aufruf-Teil unten mit Ihren eigenen Informationen neu.
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,
)
Fügen Sie bei Bedarf die Anforderungen der externen Bibliothek wie folgt zur Beschreibung hinzu.
...
zip_safe=False,
packages=find_packages(),
install_requires=['pillow']
Schreiben Sie den Bibliotheksnamen in "mylib" unter Angabe von "PYBIND11_MODULE" in "main.cpp" um.
PYBIND11_MODULE(mylib, m) {
Erstellen Sie danach den Code nach Ihren Wünschen und fügen Sie ihn nach Bedarf zu "CMakeLists.txt" hinzu.
python setup.py build
OK, wenn keine Fehler vorliegen
python setup.py install
Verlassen Sie das Verzeichnis "mylib /", starten Sie Python, importieren Sie die Bibliothek und überprüfen Sie den Vorgang. Wenn Sie "mylib /" einchecken, besteht die Möglichkeit, dass die Datei im aktuellen Verzeichnis aufgrund des Einflusses der Dateisuchreihenfolge anstelle der installierten Datei verwendet wird.
>>> import mylib
>>> mylib.add(1, 2)
>>> 3
Führen Sie die folgenden drei Schritte aus, um Benutzer dazu zu bringen, das zu verwenden, was Sie erstellt haben.
Im Falle von Ubuntu etc.
sudo apt install build-essential cmake
Sie müssen es nur treffen. Wenn Sie ein Windows-Benutzer sind, geben Sie Ihr Bestes, um Visual Studio 2019 und CMake separat zu installieren (Sie müssen CMake auch über den Pfad führen, was schmerzhaft ist).
Bitten Sie den Benutzer, beim Klonen des Repositorys den folgenden Befehl auszuführen.
git clone --recursive https://github.com/******/mylib.git
Wenn Sie "--recursive" nicht hinzufügen, wird "pybind11" nicht heruntergeladen und Sie können es nicht erstellen. Beschreiben Sie es daher ordnungsgemäß.
python setup.py install
Ich habe dich geschlagen. das ist alles.
Wenn Sie nicht nur die C ++ - Bibliothek, sondern auch den Python-Code bereitstellen möchten, ändern Sie den Namen der C ++ - Bibliothek in "_mylib" und laden Sie ihn als Import aus "mylib / __ init __. Py".
Machen Sie zuerst CMakeLists.txt
wie folgt.
CMakeLists.txt
project(_mylib)
...
pybind11_add_module(_mylib src/main.cpp)
Dann setup.py
setup.py
ext_modules=[CMakeExtension('mylib._mylib')],
Dies bedeutet, dass die Build-Artefakte in mylib / _mylib ****
(.so oder .pyd) abgelegt werden.
Dann src / main.cpp
src/main.cpp
PYBIND11_MODULE(_mylib, m) {
Bereiten Sie abschließend das Verzeichnis "mylib /" vor, in dem sich der Python-Quellcode befindet, und schreiben Sie "__init __. Py".
mylib/__init__.py
from ._mylib import *
Fügen Sie dann den Python-Code nach Ihren Wünschen hinzu.
Da ich CMake verwende, werde ich eine Lösungsdatei für Visual Studio generieren.
Erstellen Sie ein Verzeichnis "build /" und führen Sie cmake darin aus.
mkdir build
cd build
cmake .. -G "Visual Studio 16 2019"
Da build / mylib.sln
generiert wird, entwickeln Sie damit. Das Verzeichnis "build /" ist in ".gitignore" enthalten. Wenn Sie also Lösungsdateien usw. im Repository registrieren möchten, verwenden Sie ein anderes Verzeichnis anstelle von "build".
Recommended Posts