请注明转自:想造轮子的刘大胆:C++调用python方法及环境配置(Windows环境、VS工具)
c++和python使用混合编程,有四种方式来实现:
在这里描述VS写C++中调用python(方法一)的流程。
其中python是一种非常强大的胶水语言,可以灵活的嵌入到c++和java等主流语言中。
在python的官方网站Welcome to Python.org下载64位的安装包,在安装过程点击设置环境变量(很重要)。在目前的一些版本中,安装python是同时安装了pip的。
安装完python后,打开cmd,在其中输入
pip3
第一句用来安装numpy库,第二句用来安装绘图matplotlib库。当python为3.0以上版本,采用pip3安装;若为python2.7,则采用pip安装。
若下载的python版本为64位,则在VS中将Debug修改为X64;若下载的python版本为32位,则在VS中将Debug修改为X86。
然后在VS的项目属性>>配置属性>>C/C++>>添加包含目录中,将Python的根目录下的include文件夹添加进来。(Python的根目录:如果按照默认位置安装,目录在C:UsersAdministratorAppDataLocalProgramsPython的路径下)
然后在VS的项目属性>>配置属性>>链接器>>附件库目录中,将Python的根目录下的libs文件夹添加进来。
在VS中新建一个文件.cpp的源文件,然后复制如下代码:
#include
若不报错,同时打印了hello则表明完成。
python作为一种强力的胶水语言,可以在其他语言中使用,特别是目前深度学习的快速发展,使用python搭建模型,训练是非常高效的。而在部署过程中使用C++时就出现问题了。但是如何解决部署中的问题,并不是本文的主题。
python的C、C++外部扩展官方教程,可以在网页的上部选择python的版本:
https://docs.python.org/3.6/extending/embedding.htmldocs.python.orgpython提供了一套C的API库,是的开发者能够很方便的从C、C++的程序中调用python中的各个功能模块。
此环境配置是在Windows的环境下,Linux不适用,但是方法思想一致:首先设置python的头文件,然后设置python的库文件。
首先按照1中搭建出c++和python混合编程的环境。
例子:
#include
假设你有一个名叫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。
在很多时候,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脚本
首先要查看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 NumPynumpy.org想造轮子的刘大胆:C++中使用matplotlib绘图