VS2022+Python3.11实现C++调用python接口

 更新时间:2023年12月04日 10:16:56   作者:编码小哥  
在C/C++中嵌入Python,可以使用Python提供的强大功能,通过嵌入Python可以替代动态链接库形式的接口,本文主要介绍了VS2022+Python3.11实现C++调用python接口,感兴趣的可以了解一下

查了一些资料,不是报这个错,就是报哪个错,没有找到和我安装的环境的一致的案例,于是将自己的摸索分享出来。

一、环境准备

1、Visual Studio 2022,下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/

2、Python版本是3.11,下载地址:https://www.python.org/downloads/

3、安装Visual Studio 2022和Python3.11

安装过程简单,此处不再赘述,我们的重点是看如何实现接口调用的。

二、配置Visual Studio 2022

安装好环境后,使用Visual Studio 2022创建一个新项目,我这里取名c++python。需要配置3个地方:

1、右击项目名称-->属性,选择VC++目录,根据python安装路径,配置包含目录库目录。python安装路径怎么查看?打开cmd,输入python回车,使用如下两个命令即可看到python路径。

>>> import sys
>>> sys.path

将python安装路径下的include文件夹和libs文件夹复制到刚才新建的项目c++python目录下,配置如图所示:

2、右击项目名称-->属性,选择C/C++下的常规,配置附加包含目录,加上项目中include的路径,如图所示:

3、右击项目名称-->属性,选择链接器下的输入,配置附加依赖项,将项目中的libs目录中python311.lib复制一份,改名为python311_d.lib,附加依赖项的内容填写C:\Users\source\repos\c++python\libs\python311_d.lib;如图所示:

三、编写python代码和C++代码

1. 首先,创建一个名为test_python.py的Python文件,内容如下:

def add(a, b):
    return a + b

2. 然后,创建一个名为main.cpp的C++文件,内容如下:

#include <iostream>
#include <Python.h>

int main() 
{
    /*初始化python*/
    Py_Initialize();

    /*初始化python系统文件路径,否则加载不到要调用的test_python.py文件*/
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");

    /*加载要调用的python文件名称,当前测试文件名称:test_python.py*/
    PyObject* pName = PyUnicode_DecodeFSDefault("test_python");

    PyObject* pModule = PyImport_Import(pName);

    Py_XDECREF(pName);

    if (pModule != NULL) 
    {
        /*加载python模块中的函数*/
        PyObject* pFunc = PyObject_GetAttrString(pModule, "add");

        if (PyCallable_Check(pFunc)) 
        {
            /*给pythonm模块中的函数add传递2个参数,以元组的形式传递*/
            PyObject* pArgs = PyTuple_New(2);

            /*给add函数传递第一个参数6*/
            PyTuple_SetItem(pArgs, 0, PyLong_FromLong(6));
            /*给add函数传递第二个参数10*/
            PyTuple_SetItem(pArgs, 1, PyLong_FromLong(10));
            /*C++的python接口调用add函数,返回计算结果*/
            PyObject* pValue = PyObject_CallObject(pFunc, pArgs);

            Py_XDECREF(pArgs);

            if (pValue != NULL) 
            {
                /*打印计算结果*/
                std::cout << "\n " << std::endl;
                std::cout << "Result of call: " << PyLong_AsLong(pValue) << std::endl;
                std::cout << "\n " << std::endl;

                Py_XDECREF(pValue);

            }
            else 
            {
                PyErr_Print();
            }
        }
        else 
        {
            if (PyErr_Occurred()) 
            {
                PyErr_Print();
            }

            fprintf(stderr, "Cannot find function \"add\"");
        }

        Py_XDECREF(pFunc);

        Py_XDECREF(pModule);
    }
    else 
    {
        PyErr_Print();

        fprintf(stderr, "Failed to load \"%s\"", "test");

        return 1;
    }

    /*结束python初始化*/
    Py_Finalize();

    return 0;
}

test_python.py和main.cpp在同一目录,如图所示:

3. 编译

1>正在生成代码

1>Previous IPDB not found, fall back to full compilation.

1>All 16 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.

1>已完成代码的生成

1>c++python.vcxproj -> C:\Users\source\repos\c++python\x64\Release\c++python.exe

========== “全部重新生成”: 1 成功,0 失败,0已跳过 ==========

========== 占用时间 00:02.052 ==========

4. 点击菜单"调试-->开始执行(不调试)运行,可以看到输出结果:

到此这篇关于VS2022+Python3.11实现C++调用python接口的文章就介绍到这了,更多相关C++调用python接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python调用百度OCR实现图片文字识别的示例代码

    Python调用百度OCR实现图片文字识别的示例代码

    这篇文章主要介绍了Python调用百度OCR实现图片文字识别的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • centos系统升级python 2.7.3

    centos系统升级python 2.7.3

    CentOS上安装的python版本是2.6,不能满足我运行软件的要求,所以对python进行升级。Python的最新版本已经是3.3,但是Python3的兼容性可能还有一定的问题,所以还是升级到2.7较为保险。
    2014-07-07
  • Python+Selenium浏览器自动化测试与网页自动登录

    Python+Selenium浏览器自动化测试与网页自动登录

    在日常开发、测试和办公自动化中,我们经常会遇到一些重复性的浏览器操作,如果这些操作每天都要重复执行,手动处理不仅浪费时间,还容易因为漏点、输错、忘记截图而出错,本文面向Python自动化测试初学者,通过一个完整案例讲解如何使用Selenium自动打开网页
    2026-05-05
  • Python可视化工具Plotly的应用教程

    Python可视化工具Plotly的应用教程

    对于Python语言来说,比较传统的数据可视化模块是Matplotlib,但它存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化方面的发展。为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。本文将为大家详细介绍Plotly的用法,需要的可以参考一下
    2021-12-12
  • 解决Python requests 报错方法集锦

    解决Python requests 报错方法集锦

    这篇文章主要介绍了解决Python requests 报错方法集锦的相关资料,需要的朋友可以参考下
    2017-03-03
  • 利用pyuic5将ui文件转换为py文件的方法

    利用pyuic5将ui文件转换为py文件的方法

    今天小编就为大家分享一篇利用pyuic5将ui文件转换为py文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 基于python爬取梨视频实现过程解析

    基于python爬取梨视频实现过程解析

    这篇文章主要介绍了基于python爬取梨视频实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 在 Python 中进行 One-Hot 编码

    在 Python 中进行 One-Hot 编码

    这篇文章主要介绍了在 Python 中进行 One-Hot 编码,  在计算机科学的许多分支中,尤其是机器学习和数字电路设计中,One-Hot Encoding 被广泛使用,下文我们就来实操在 Python 中进行 One-Hot 编码吧,需要的朋友可以参考一下
    2022-02-02
  • 关于Python调用百度语音合成SDK实现文字转音频的方法

    关于Python调用百度语音合成SDK实现文字转音频的方法

    这篇文章主要介绍了关于Python调用百度语音合成SDK实现文字转音频的方法,AipSpeech是语音合成的Python SDK客户端,为使用语音合成的开发人员提供了一系列的交互方法,需要的朋友可以参考下
    2023-07-07
  • Python大数据用Numpy Array的原因解读

    Python大数据用Numpy Array的原因解读

    一个Numpy数组由许多值组成,所有值的类型是相同的,Numpy 是Python科学计算的一个核心模块,本文重点给大家介绍Python大数据Numpy Array的相关知识,感兴趣的朋友一起看看吧
    2022-02-02

最新评论