c++ 调用python_C++调用python方法及环境配置(Windows环境、VS工具)

请注明转自:想造轮子的刘大胆:C++调用python方法及环境配置(Windows环境、VS工具)

c++和python使用混合编程,有四种方式来实现:

  • (1)C++调用python
  • (2)直接调用python文件并执行
  • (3)3.使用Cpython:这是一个第三方库,可以将python代码直接变成c代码
  • (4)使用pybind11库(建议),网址:pybind/pybind1

在这里描述VS写C++中调用python(方法一)的流程。

1.c++在VS中调用python的配置

其中python是一种非常强大的胶水语言,可以灵活的嵌入到c++和java等主流语言中。

1.1安装python

在python的官方网站Welcome to Python.org下载64位的安装包,在安装过程点击设置环境变量(很重要)。在目前的一些版本中,安装python是同时安装了pip的。

安装完python后,打开cmd,在其中输入

pip3 

第一句用来安装numpy库,第二句用来安装绘图matplotlib库。当python为3.0以上版本,采用pip3安装;若为python2.7,则采用pip安装。

1.2在VS中设置调用python

若下载的python版本为64位,则在VS中将Debug修改为X64;若下载的python版本为32位,则在VS中将Debug修改为X86。

0437b367e6306af51b671b34e00d6f56.png

然后在VS的项目属性>>配置属性>>C/C++>>添加包含目录中,将Python的根目录下的include文件夹添加进来。(Python的根目录:如果按照默认位置安装,目录在C:UsersAdministratorAppDataLocalProgramsPython的路径下)

然后在VS的项目属性>>配置属性>>链接器>>附件库目录中,将Python的根目录下的libs文件夹添加进来。

1.3测试编译运行

在VS中新建一个文件.cpp的源文件,然后复制如下代码:

#include

若不报错,同时打印了hello则表明完成。

2.C++调用python

python作为一种强力的胶水语言,可以在其他语言中使用,特别是目前深度学习的快速发展,使用python搭建模型,训练是非常高效的。而在部署过程中使用C++时就出现问题了。但是如何解决部署中的问题,并不是本文的主题。

2.1 基础

python的C、C++外部扩展官方教程,可以在网页的上部选择python的版本:

https://docs.python.org/3.6/extending/embedding.html​docs.python.org

python提供了一套C的API库,是的开发者能够很方便的从C、C++的程序中调用python中的各个功能模块。

此环境配置是在Windows的环境下,Linux不适用,但是方法思想一致:首先设置python的头文件,然后设置python的库文件。

首先按照1中搭建出c++和python混合编程的环境。

2.1.1 初始化Python解释器

例子:

#include

2.1.2 调用Python函数(c++不向python传参)

假设你有一个名叫plot3dfun.py的python文件,你想调用其中的名叫print_test的函数。

plot3dfun.py文件为:

import 

首先,你要将plot3dfun.py文件放到你VS项目的固定位置上:若你使用的是debug(X64)模式,则plot3dfun.py放到你的Project目录>>x64>>Debug目录下;若你使用的是Release目录,则plot3dfun.py放到你的Project目录>>x64>>Release目录下。

C++程序为:

#include

运行程序,可以看到程序能够输出hello, this is python。

2.1.3 调用Python函数(c++向python传参)

在很多时候,c++需要向python传参,让python执行相关操作。python提供了各种数据类型用于和C中的数据类型进行转换,具体的思想是相同的,这里只举几个例子。

字符串传参

假设你有一个名叫plot3dfun.py的python文件,你想调用其中的名叫print_test的函数。

plot3dfun.py文件为:

import numpy as np
def print_test1():
    print("hello, this is python")
def print_test2(string_in):
    print(string_in)

首先,你要将plot3dfun.py文件放到你VS项目的固定位置上:若你使用的是debug(X64)模式,则plot3dfun.py放到你的Project目录>>x64>>Debug目录下;若你使用的是Release目录,则plot3dfun.py放到你的Project目录>>x64>>Release目录下。

c++文件为:

#include

上述程序中,PyObject* PyTuple_New(Py_ssize_t len)返回函数所创建的元组,所创建元组的长度为len。

左边为C++中的输入形式,右边为对应的python中的高级数据结构形式。

#define PY_SSIZE_T_CLEAN  

上述的一些更详细的操作说明可以查看官方的文档,或者一下的描述:

C/C++调用Python[OpenCV与Numpy]_ziweipolaris的博客-CSDN博客_c++调用numpy

码农自来也:C++调用python脚本

2.2 c++调用numpy和Opencv

首先要查看python的版本是release版本还是debug版本,一般安装的python都是Release版本。VS编写C++时,改为Release模式,这要与python的版本一致,否则会报错:

无法解析的外部符号 __imp___Py_RefTotal

如果将版本调整为相同的Release,则不会存在此问题。

调用numpy首先要将numpy的相关目录包含到VS中,在项目》项目属性页》C/C++》附加包含目录 中添加:

C:UsersAdministratorAppDataLocalProgramsPythonPython36Libsite-packagesnumpycoreinclude

在调用numpy之前,要初始化一下,载入numpy的各个功能模块,也就是要添加代码并调用:

size_t 

给python发送numpy数组代码:

npy_intp 

更多的Numpy C API例子可以查看:

How to extend NumPy​numpy.org

2.3 c++动态画图(matplotlib)

想造轮子的刘大胆:C++中使用matplotlib绘图

你可能感兴趣的:(c++,调用python,c++调用python,c调用system,curl,finalize方法)