当前位置: 首页 > news >正文

python生成动态库在c++中调用

一.Windows下生成动态库.pyd

在setup.py的同目录下使用python setup.py build_ext --inplace

二.在vscode的c++中使用.pyd文件(动态库)

1)配置python的环境

python -c "import sys; print(sys.executable)" #确定python安装位置

2)修改vscode中python的链接关系

2.1)修改tasks.json

2.2)修改launch.json

3)对应的vscode代码:

#include <iostream>
#include <Python.h>
using namespace std;int main() {Py_SetPythonHome(L"D:\\Conda\\envs\\yolo");  // 设置 Python 解释器路径Py_Initialize();  // 初始化 Python 解释器// 添加 .pyd 所在路径到 sys.path//E:\Code\VScode\Project_test\mymodule.cp39-win_amd64.pydPyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('E:\\Code\\VScode\\Project_test')");// 导入 .pyd 模块PyObject* pModule = PyImport_ImportModule("mymodule");  // 不带 .pyd 后缀if (!pModule) {PyErr_Print();std::cerr << "Failed to load module\n";return 1;}// 获取函数PyObject* pFunc = PyObject_GetAttrString(pModule, "add");  // 函数名if (PyCallable_Check(pFunc)) {PyObject* pArgs = PyTuple_Pack(2, PyLong_FromLong(10), PyLong_FromLong(32)); //传入两个参数10,32.相加为42PyObject* pValue = PyObject_CallObject(pFunc, pArgs);long result = PyLong_AsLong(pValue);std::cout << "Result from Python: " << result << std::endl;Py_XDECREF(pValue);Py_DECREF(pArgs);} else {PyErr_Print();std::cerr << "Function not callable\n";}Py_XDECREF(pFunc);Py_DECREF(pModule);Py_Finalize();  // 关闭解释器cout<<"hello world";return 0;
}

4)结果:

相关文章:

  • 基于Spring Boot实现文件秒传的完整方案
  • Hibernate的组件映射
  • RPA系统应用通用文字识别技术,推动 RPA 在各个领域的广泛应用和发展
  • 信奥中的数学
  • 进程与线程:03 用户级线程
  • 系分论文《论数据中台建设的分析和应用》
  • HADOOP 3.4.1安装和搭建(尚硅谷版~)
  • uv运行一个MCP Server的完整流程
  • XAttention
  • 人工智能100问☞第9问:什么是AI芯片?
  • 基于SpringBoot的高校体育馆场地预约管理系统-项目分享
  • 理性决策与情绪偏差
  • 永磁同步电机参数辨识算法--递推最小二乘法辨识
  • 让专业更轻盈,让启蒙更智能——特伦斯便携钢琴V30Pro
  • Stable Diffusion 制作角色三视图
  • HXBC编译相关错误
  • 深度学习:人工智能的核心驱动力
  • 影刀RPA - 简单易用且功能强大的自动化工具
  • wkhtmltopdf - HTML转PDF/图像命令行工具
  • CSS字体
  • 柬埔寨人民党中央外委会副主席:柬中友谊坚如钢铁,期待更多合作
  • 聚焦客户真实需求,平安人寿重磅推出“添平安”保险+服务解决方案
  • 在现代东京,便利店如何塑造了饮食潮流、生活方式和日本社会
  • 女子遭前男友泼汽油烧伤致残案二审庭审:检方抗诉称一审量刑不当
  • 江西九江市人大常委会原副主任戴晓慧主动交代问题,接受审查调查
  • 新片|真人版《星际宝贝史迪奇》5月23日与北美同步上映