zoukankan      html  css  js  c++  java
  • C++调用python

    前言:我是在Visual studio中使用C++调用python的。如果需要使用QT编译器,QT中的环境配置自行查找。

    C++调用python步骤:

    第一步:在VS中进行环境配置,使得可以调用python.h库。

    找到包含.h文件的Include文件夹,将其绝对路径添加到包含目录中;找到包含.lib文件的libs文件夹,并将其绝对路径添加到库目录中。

     

     

    此处的注意事项:原本在libs文件中是没有python39_d.lib文件的,此时需要手动的对python39.lib文件进行复制并重命名为python39_d.lib,以免发生错误,如下图所示:

     

    此时使用#include”Python.h”库函数可能会出现找不到.dll文件的问题,此时的解决办法有两个:一:将python39.dll文件拷贝到system32文件夹下。二:将python39.dll文件拷贝到此C++工程目录下。两种方法都可解决此问题。

     

    第二步:在VS编译器中调用python程序。程序如下图所示:

     

    首先需要设置python解释器的位置,如我是用的是miniconda中虚拟环境pytorch中的python解释器,则使用main主函数中的第一句,大写L不要落下。在使用python解释器前需要对其进行初始化的操作。

    随后的PyRun_SimpleString()函数是在C++中使用python中的语句,例如Import torch,则是测试调用torch包是否成功。注:我在调用Numpy这个包的时候,出现未找到的问题,但是在下载pytorch时确实是有这个包的,删除原numpy包,重新安装即可成功引用。

    为了能够方便的执行python程序,我直接将python程序拷贝到C++项目目录下,如图:

     

    此时通过设置相对路径则可查找到目标文件。

     

    下面的PyImport_ImportModule函数是找到需要执行的文件,PyObject_GetAttrString函数是找到文件中需要执行的函数(一般的情况下,我们在python中都是执行一个主函数,但是在C++中是无法直接调用主函数的,此时可以将主函数中的所有语句调出,拷贝到一个新的函数中,在C++中调用这个新的函数即可)。Py_BuildValue函数是设置调用的python函数的形参。PyObject_CallObject函数是接受python执行程序的返回值。我的python程序新建函数如下:

     

    注明:如果不需要传递参数的话或者无返回值的话也无所谓,这个就是一个语法,简单设置一下即可。

     

    最后,最难调的一个bug:

    所有网上的教程都是调用一个python文件中一个函数,没有关联关系,但是在实际的项目中,我们的一个python文件关联了其他python文件和不同各种各样的包,我们需要通过一个函数将所有的这些运行起来,解决办法如下:

     

    C++文件中,对你引用的函数,包进行一一测试,直到所有的包,函数都测试通过,此时整个程序即可正确运行。

     

    我的程序正确运行展示:

    C++运行如下

     

    Python程序运行如下

    运行结果相同,C++调用python成功。

  • 相关阅读:
    maven打包将依赖和配置外置的配置方式
    AngularJS零碎总结
    Python零碎总结
    win10 平台 elasticsearch 与 elasticsearch-head 的安装
    DDD中的分层架构
    读书有感--------软件的设计原则
    DDD初探
    HTTP could not register URL http://+:86/. 设置VS默认以管理员权限打开
    .net 实战 根据configuration选项生成不同的config文件
    asp.net mvc5轻松实现插件式开发
  • 原文地址:https://www.cnblogs.com/liweikuan/p/14803411.html
Copyright © 2011-2022 走看看