vs2019+win10+anaconda——C++调用python程序

1.创建C++空项目,更改为Release x64版本,选择x64是因为我安装的python是64位的
在这里插入图片描述
2.在右侧解决方案中打开属性,在VC++目录中的包含目录中添加Include目录,我安装的是虚拟环境,故目录为在这里插入图片描述
库目录为
在这里插入图片描述

在这里插入图片描述
在链接器——>输入——>附加依赖项中添加C:\Users\12871\anaconda3\envs\tensorflow1.8\libs\python35_d.lib;
在这里插入图片描述
配置完成。
测试程序。

#include<python.h>
#include<iostream>

int main()
{
    
    Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
    PyRun_SimpleString("print('hello world!')");
    Py_Finalize();
}

报错:缺少python35.dll,程序无法继续运行
解决方法:在Anaconda的安装包package文件夹下,找到复制粘贴到C:\Windows\System32目录下。我的是在C:\Users\12871\anaconda3\envs\tensorflow1.8目录下找到的python35.lib

Fatal Python error: Py_Initialize: unable to load the file system codec
报错原因:电脑上有其他版本的python,以前装的
解决方法:删除以前装的,或者是使用Py_SetPythonHome()指定python.exe路径,如下:

#include<python.h>
#include<iostream>

int main()
{
	//需要进行强制类型转换
	//否则报错“void Py_SetPythonHome(wchar_t *)”: 无法将参数 1 从“const wchar_t [44]”转换为“wchar_t *”	
    Py_SetPythonHome((wchar_t*)L"C:\\Users\\12871\\anaconda3\\envs\\tensorflow1.8");
    Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
    PyRun_SimpleString("print('hello world!')");
    Py_Finalize();
}

向python脚本传参并接收脚本程序运行结果

#include<python.h>
#include<iostream>
#include<string.h>
using namespace std;

int main()
{
    Py_SetPythonHome((wchar_t*)L"C:\\Users\\12871\\anaconda3\\envs\\tensorflow1.8");
	Py_Initialize(); //使用python前要调用此函数,进行初始化

	if (!Py_IsInitialized()) //如果没有初始化成功
	{
		cout << "fail to initial!" << endl;
		Py_Finalize();
	}

	PyRun_SimpleString("import sys");
	PyRun_SimpleString("sys.path.append(r'C:\\Users\\12871\\Desktop')");//设置.py文件所在位置

	//声明变量
	PyObject* pModule = NULL; //.py文件 
	PyObject* pFunc = NULL;  //py文件中的函数
	PyObject* pParams = NULL; //函数参数
	PyObject* pResult = NULL;  //函数返回的结果

	pModule = PyImport_ImportModule("Sample"); //调用上述路径下的Sample.py文件
	if (pModule == NULL)
	{
		cout << "don't find the python file!" << endl;
	}

	pFunc = PyObject_GetAttrString(pModule, "add");  //从指定.py文件中调用函数add
	pParams = Py_BuildValue("(ii)", 1, 1);//设置函数参数,i表示int整型,两个i表示有两个参数,s表示字符串等
	pResult = PyObject_CallObject(pFunc, pParams);//调用函数,返回计算结果

	int res;
	PyArg_Parse(pResult, "i", &res);//将返回结果转换成C++类型
	cout << "res:" << res << endl;

	Py_Finalize();
}
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值