IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Pybinder -> 正文阅读

[系统运维]Pybinder

目录

A really good project.

Export Cpp to python uner Linux platform


A really good project.

https://github.com/pybind/pybind11https://github.com/pybind/pybind11The meaning of this project:

pybind11?is a lightweight header-only library that exposes C++ types in Python and vice versa, mainly to create Python bindings of existing C++ code. Its goals and syntax are similar to the excellent?Boost.Python?library by David Abrahams.

The main issue with Boost.Python—and the reason for creating such a similar project—is Boost. Boost is an enormously large and complex suite of utility libraries that works with almost every C++ compiler in existence. This compatibility has its cost: arcane template tricks and workarounds are necessary to support the oldest and buggiest of compiler specimens. Now that C++11-compatible compilers are widely available, this heavy machinery has become an excessively large and unnecessary dependency.

Think of this library as a tiny self-contained version of Boost.Python with everything stripped away that isn't relevant for binding generation. Without comments, the core header files only require ~4K lines of code and depend on Python (3.6+, or PyPy) and the C++ standard library. This compact implementation was possible thanks to some of the new C++11 language features (specifically: tuples, lambda functions and variadic templates). Since its creation, this library has grown beyond Boost.Python in many ways, leading to dramatically simpler binding code in many common situations.

?I have used in some projects, it's really a large suit of library. Just like pybinder, standalone asio(http://think-async.com/Asio/AsioStandalone) is always used by some people as a clean aiso library from boost.
?

Export Cpp to python uner Linux platform

1) A basic example without the help of cmake:?


https://github.com/FrankKuiFang/playGround/tree/main/pybinder/cpp2python/basicExample
编译:?
Execute bash build.sh, this script call c++ complier directly to compile cpp2python.cpp, a so file will be generated uner the same dir.
执行
Execute python3 test.py,? 该python文件需要与编译生成的.so在同一个目录,否则,如下面的基于CMake的例子,?
需要设置PYTHONPATH环境变量。??
? Note:
? 该例子官方文档:https://pybind11.readthedocs.io/en/latest/basics.html#creating-bindings-for-a-simple-function
? 需要先装pybind11: https://pybind11.readthedocs.io/en/latest/installing.html#include-with-pypi
? python3 -m pybind11 --includes指令可以查看pybind pkg的头文件安装目录;
?
2) ./my_cmake_example/在CMake工程中使用pybind11:?
?https://github.com/FrankKuiFang/playGround/tree/main/pybinder/cpp2python/my_cmake_example
?编译:运行bash build.sh, 该脚本借助Cmake编译, CMakeLists.txt中有两种方式来使用pybind库,都测试ok。??
?????? 该脚本生成一个.so并安装到install/bin目录;
?执行:运行bash run.sh, 该脚本设置PYTHONPATH环境变量,并执行tests/test_basic.py。
?
?Note:?
?https://pybind11.readthedocs.io/en/latest/compiling.html#find-package-vs-add-subdirectory
?CMakeLists.txt中有两种方式来使用pybind库:
?? 1)
?? 下载pybind11源码到你的cpp工程, 例如https://github.com/pybind/cmake_example这个官方的demo就是这个样子的,?
?? 其pybind11文件夹下就是https://github.com/pybind/pybind11源码。
?? 有了源码,直接使用cmake的add_subdir;
?? 根据demo和自己的修改,这里是一个比demo精简的(不用像demo中那样执行setup.py)
?
?? 2)
?? 在系统中install pybind11,然后camake里面就可以使用find_package了。
?? 使用了pip install pybind11这种方式安装,但是cmake中find_packet依然找不到pybind11,因为pip install?这种方式安装后,安装路径需要通过python3 -m pybind11 --includes指令查看,例如 /home/xxx/.local/lib/python3.8/site-packages/pybind11,
?? 所以需要在CMakeLists.txt中设置pybind11_ROOT变量来引导cmake发现这个pkg。
?? 上面文档里(https://pybind11.readthedocs.io/en/latest/compiling.html#find-package-vs-add-subdirectory)提到的另一种
?? 从源码安装的方式,以后可以试试。?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:35:20  更:2022-03-06 13:37:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:19:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码