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 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> windows下visual studio基于pybind11和cmake的python扩展开发环境搭建 -> 正文阅读

[开发工具]windows下visual studio基于pybind11和cmake的python扩展开发环境搭建

  1. visual studio cpp cmake 开发环境
  2. windos 下python3安装,以及pybind11库安装

    说明:1. 对于linux货mac 环境需要安装python-dev版本,如python3.9-dev,但在windows环境无 dev版本,直接使用 非dev的常规版本即可,windows常规版本即带有 Python.h 等各种头文件,可以支持python 扩展模块开发
  3. 源码
#include <iostream>
#include <Python.h>
#include <pybind11/pybind11.h>


namespace py = pybind11;

int add(int a, int b) {
	return a + b;
}


std::string  hello(std::string someone) {
	std::cout << "hello " << someone << std::endl;
	return "hello" + someone;
}


// pybind11使用参照pybind11 官方教程即可
PYBIND11_MODULE(pytry, m) {
	m.doc() = "pybind11 example in win";  //optional module docstring

	m.def("add", &add, "A function that adds two numbers");

	m.def("hello", &hello, "A function that hello some one");
}
  1. 编译
    cmake 编译配置
cmake_minimum_required (VERSION 3.8)

project ("CMakeProject1")

set(CMAKE_EXPORT_COMPILE_COMMANDS on)   # 输出compile_command.json

set(Python_DIR,"C:/Users/xxxx/AppData/Local/Programs/Python/Python39" )   # 用于设定查找python模块的指定路径
find_package(Python COMPONENTS Interpreter Development)   # findpython 可参考 https://cmake.org/cmake/help/v3.12/module/FindPython.html
find_package(pybind11 PATHS "C:/workplace/pythonProject/firstpython/venv/Lib/site-packages/pybind11" )   // 用于给查找指定 pybind11 模块指定路径

message(${Python_FOUND})        # 输出查找结果
message(${pybind11_FOUND})    # 输出查找结果

include_directories(${pybind11_INCLUDE_DIRS})    # include  pybind11 和  python的头文件

add_library(pytry SHARED "pytry.cpp")    # 必须是生成动态库
target_link_libraries(pytry ${Python_LIBRARIES})    # 链接 python.lib 库

# TODO: 如有需要,请添加测试并安装目标。

说明: 编译时如果提示缺少python39_d.lib 等,复制 python39.lib为 python39_d.lib即可, 或者将vs 的配置由debug 改为为release, 如下图
在这里插入图片描述

  1. 修改生成的动态库文件名

windows中的 识别的动态库后缀必须是.pyd, 复制生成pytry.dll pytry.pyd 即可
说明: 文件名必须与python模块名一致,python模块名在cpp脚本PYBIND11_MODULE部分设定。
生成好的.pyd, 在当前目录下打开python可以直接通过import pytry 导入模块。

  1. linux 环境下
    cmake:
#c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3 -m pybind11 --includes) spam.cpp -o spam.so   #命令行执行原始
cmake_minimum_required(VERSION 3.0.0)
project(spam VERSION 0.1.0)

# set(CMAKE_CXX_STANDARD 11)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_FLAGS "-Wall")
set(CMAKE_CXX_FLAGS "-fPIC")
set(CMAKE_CXX_FLAGS "-std=c++11")

include(CTest)
enable_testing()


#python  package find
set(Python3_ROOT_DIR  "/home/xxxx/.pyenv/versions/3.9-dev")
find_package (Python3 COMPONENTS Interpreter Development  REQUIRED)
find_package(pybind11  CONFIG  PATHS "/home/xxxxx/.pyenv/versions/py39dev/lib64/python3.9/site-packages/pybind11" REQUIRE)

message(${Python3_FOUND})
message(${pybind11_FOUND})

# add_subdirectory()

include_directories(${pybind11_INCLUDE_DIRS})

# set(CMAKE_SHARED_LIBRARY_PREFIX "")
# set(CMAKE_STATIC_LIBRARY_PREFIX "")
add_library(spam SHARED spam.cpp)
# set_target_properties(spam PROPERTIES SUFFIX  "_add")   # 目标文件前缀
# set_target_properties(spam PROPERTIES SUFFIX  "_add")   # 目标文件后缀 
# set_target_properties(spam PROPERTIES RELEASE_PREFIX "")   # 可执行文件后缀


# add_executable(spam_ spam.cpp)
# pybind11_add_module(spam spam.cpp)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

linux下python对动态库的识别,文件名后缀为.so, 文件名必须和模块名一致,即不能带有lib前缀。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:45:36  更:2022-03-08 22:46:16 
 
开发: 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/26 6:48:21-

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