一、说明
有时候一个功能用C++实现是困难的,但是用python实现却很简单。二者如果能混合使用,相互协调,岂不美滋滋。
本文中,笔者将讲述如何在Visual Stdio 2019(其他版本应该也通用)中搭建C++调用python的环境,
C++调用python语法可参考如下博客:
https://blog.csdn.net/itas109/article/details/78733478
https://blog.csdn.net/nynyvkhhiiii/article/details/17525865
QT C++调用python可参考笔者另一篇博客:
https://blog.csdn.net/qq_36290650/article/details/89684476
二、实验环境
操作系统:windows 10 64位
IDE:Visual Stdio 2019 Community
Python版本:3.7 64位
三、添加python环境变量
- 找到python的安装目录,笔者这里是:C:\Users\ASUS\AppData\Local\Programs\Python\Python37\
注:务必确保Visual Stdio中C++调用python时使用的是此目录中的python环境,否则可能出现无法成功运行、无法调用第三方库等情况
- 添加环境变量(此电脑-右键-属性-高级系统设置-高级-环境变量-系统变量-双击path-新建)
环境变量1:C:\Users\ASUS\AppData\Local\Programs\Python\Python37\
环境变量2:C:\Users\ASUS\AppData\Local\Programs\Python\Python37\Scripts
四、环境搭建
1、打开Visual Stdio,新建C++ 空项目,命名自定义就好
2、配置Visual Stdio Debug环境
- 调整Visual Stdio为debug模式,由于python为64位,故调试器选择64位
- VS - 项目 - 右键 - 属性 - C/C++ - 常规 - 附加包含目录
- 构建debug版本python静态链接库
进入路径:C:\Users\ASUS\AppData\Local\Programs\Python\Python37\libs\,复制并原路径粘贴“python3.lib”和“python37.lib”产生副本
修改副本名称,“python3 - 副本.lib”重命名为“python3_d.lib” ; "python37 - 副本.lib"重命名为“python37_d.lib”
- VS - 项目 - 右键 - 属性 - 链接器 - 常规 - 附加库目录
- VS - 项目 - 右键 - 属性 - 链接器 - 输入 -附加依赖项(此处与debug版本设置不同)
3、配置Visual Stdio Release环境,与Debug环境配置相似,但不完全一样
- 调整Visual Stdio为Release模式,由于python为64位,故调试器选择64位
- VS - 项目 - 右键 - 属性 - C/C++ - 常规 - 附加包含目录
- VS - 项目 - 右键 - 属性 - 链接器 - 常规 - 附加库目录
- VS - 项目 - 右键 - 属性 - 链接器 - 输入 -附加依赖项
五、环境验证
- 新建源文件test.cpp,内容如下
#include<iostream>
#include<Python.h>
using namespace std;
int main()
{
//初始化python模块
Py_Initialize();
if (!Py_IsInitialized())
{
exit(1);
}
PyRun_SimpleStringFlags("print('hello C++ and python ! --from C++ Python37_64')", 0); //执行python的pint函数
Py_Finalize();
return 0;
}
- Visual Stdio选择Debug x64,运行
- Visual Stdio选择Release x64,运行
- 如果Debug和Release模式下都能正常执行,说明环境搭建完毕
注:(发布应用注意事项)
- 发布Release版本,应该复制C:\Users\ASUS\AppData\Local\Programs\Python\Python37\python37.dll,与程序(*.exe)放在同一目录
- 发布Debug版本,应该复制C:\Users\ASUS\AppData\Local\Programs\Python\Python37\python37.dll,重命名为python37_d.dll,与程序(*.exe)放在同一目录