C++调用Python3.7
前言
最近在做一个项目,涉及到了如何用C#调用Python文件。汇总了一下网上找来的资料,具体参考了这篇博客c#调用python的四种方法(尝试了四种,只详细讲解本人成功的后两种,其余方法只列出,详细用法请自行谷歌百度)。
对于第一种方法,使用IronPython2.7的方法,我找到了更详细的博客C#如何调用Python执行脚本,并将执行结果显示值显示至C#界面,不过Python2.7可能无法满足我们项目的需求,当然我也找到了类似的另外两种可以使用Python3的方法,还没有试过,在这里提供给大家参考C#使用公共语言拓展(CLE)调用Python3(使用TensorFlow训练的模型)、pythonnet c#调用并集成python代码。
对于第三和第四种方法,因为要使用命令行窗口,而且还要考虑不同用户的python安装情况如何,在项目实际使用时效果肯定是很不好的,所以在这里不做过多的介绍,原博主也给出了他自己的源代码,大家可以自己尝试一下。
重点说一下第二种方法。我在CSDN上找了好多博客,大家的方法都大同小异,可能真的是看人品吧,我试了好几次都失败了,最后在朋友的帮助下才成功……
配置环境
这里先说一下,我是win10+VS2017+Python3.7.4。
第一步新建一个控制台项目,修改属性页
选择Debug|x64
第一个修改的是C/C++——常规——附加包含目录:添加你所安装的Python目录下的include目录路径。
第二个修改的是链接器——常规——附加库目录:添加你所安装的Python目录下的libs目录路径。
第二步修改Python安装目录下文件
找到Python安装目录,找到libs目录复制python37.lib到本目录,改名为python37_d.lib。
代码测试
现在我们可以来简单测试一下
测试用Python3语法输出“Hello World!”
我们定义一个print(),里面用了Python3的语法。
#include "pch.h"
#include <Python.h>
#include <iostream>
using namespace std;
void print()
{
Py_Initialize();
PyRun_SimpleString("print('Hello World!')\n");//Python3语法
Py_Finalize();
}
int main()
{
print();
return 0;
}
测试用Python文件输出“Hello World!”
定义一个Hello(),里面调用了Test001.py文件。
#include "pch.h"
#include <Python.h>
#include <iostream>
using namespace std;
void print()
{
Py_Initialize();
PyRun_SimpleString("print('Hello Python!')\n");
Py_Finalize();
}
void Hello()
{
Py_Initialize();//调用Py_Initialize()进行初始化
PyObject * pModule = NULL;
PyObject * pFunc = NULL;
pModule = PyImport_ImportModule("Test001");//调用的Python文件名
pFunc = PyObject_GetAttrString(pModule, "Hello");//调用的函数名
PyEval_CallObject(pFunc, NULL);//调用函数,NULL表示参数为空
Py_Finalize();//调用Py_Finalize,和Py_Initialize相对应的.
}
int main()
{
print();
Hello();
return 0;
}
Test001.py文件内容如下:
def Hello():
print("Hello World!")
注意,要把Test001.py文件放到ConsoleApplication1.exe同级目录
结尾
如果一切顺利的话,那你现在已经在控制台看到输出了;如果不顺利的话,可以找找其他的博客,或者换一个方法,不要拘泥于这一个思路……
从今天开始,这个博客会把我之前做项目遇到的一些问题的解决办法总结一下,也算是一种积累吧,估计等我项目做完,会写成一本《扑街实录》。
引用
c#调用python的四种方法(尝试了四种,只详细讲解本人成功的后两种,其余方法只列出,详细用法请自行谷歌百度)
C#如何调用Python执行脚本,并将执行结果显示值显示至C#界面
C#使用公共语言拓展(CLE)调用Python3(使用TensorFlow训练的模型)
pythonnet c#调用并集成python代码