Visual Studio 2017下C++调用python方法

版本 Visual Studio 2017 +Anaconda3+python3.7.0 64位

1.随便一个地方创建一个C++项目
2.将Anaconda中的 include 和 libs 文件夹复制到创建的项目下(复不复制都一样),Anaconda版本libs文件夹中还缺少一个 python37_d.lib文件,点这下载,密码:dm60(提供的是64位的)。放到libs文件夹中。

创建后的文件夹
在这里插入图片描述要是版本不同可以自己下载对应版本的源文件后编译
下载链接
举个例子,我想下载Python3.7.3版本,就将上述网址中的371替换成373,其他Python版本号同上。 打开对应版本网页后,下拉至Files
在这里插入图片描述
(1)第一个框起来的就是Python源码(下载文件后缀是.tar.xz),第二个框起来的是Windows64位安装包(下载文件后缀是.exe)
在这里插入图片描述

(2)解压下载好的Python源码,打开找到PCbuild->pcbuild.sln,用刚安装好的VS打开。
打开后在这里插入图片描述
(2)点击菜单栏 生成->配置管理器,如图所示:只勾选所有p开头的项目,配置:debug,平台:Win32(根据自己的python版本我的是×64)。点击关闭。
在这里插入图片描述
(3)之后,点击 项目 -> 属性 -> 属性配置 -> 常规,要选择一个Windows SDK版本
在这里插入图片描述
然后菜单栏 生成->重新生成解决方案
等待几分钟,生成之后,回到PCbuild文件夹中,就会看到多出来一个Win32(我的是arm64)文件夹,打开,即可找到Python37_d.lib在这里插入图片描述

3.VS环境配置 打开项目——>属性
进行配置,根据自己文件路径调整
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我的位64位
在这里插入图片描述

4测试程序
主文件

#include <Python.h>
#include<iostream>

using namespace std;

int main()
{

	Py_SetPythonHome(L"D:\\Anaconda");
	/**
	这句语句是在添加python.exe所在路径,不添加虽然编译没有问题,但是会在运行时出现
	Fatal Python error: initfsencoding: unable to load the file system codec
	ModuleNotFoundError: No module named 'encodings'
	这种很无厘头的错误
	**/
	Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
	if (!Py_IsInitialized())
	{
		printf("初始化失败!");
		return 0;
	}
	else {
		PyRun_SimpleString("import sys");
		PyRun_SimpleString("sys.path.append('./')");//这一步很重要,修改Python路径


		PyObject * pModule = NULL;//声明变量
		PyObject * pFunc = NULL;// 声明变量

		pModule = PyImport_ImportModule("hello");//这里是要调用的文件名hello.py
		if (pModule == NULL)
		{
			cout << "没找到该Python文件" << endl;
		}
		else {
			pFunc = PyObject_GetAttrString(pModule, "add");//这里是要调用的函数名
			PyObject* args = Py_BuildValue("(ii)", 28, 103);//给python函数参数赋值

			PyObject* pRet = PyObject_CallObject(pFunc, args);//调用函数

			int res = 0;
			PyArg_Parse(pRet, "i", &res);//转换返回类型

			cout << "res:" << res << endl;//输出结果
		}
		Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。
	}
	return 0;
}

然后创建一个python文件 hello.py

def add(a,b):  
    print ("These consequences are from Python code.")  
    print ("a = " + str(a))  
    print ("b = " + str(b))  
    print ("ret = " + str(a+b))  
    return a + b

和主文件放到一起
在这里插入图片描述
5此时要是运行测试文件就会出现
在这里插入图片描述
这个是因为安装python的时候没有勾选debug选项的后果
在这里插入图片描述
要是版本相同可以用我提供的
下载点击
密码:g3s0
解压后放到Anaconda中就好(重复文件选择跳过)在这里插入图片描述

要是版本不对也可以自己重新修改python的安装将debug勾选上就好
将这些也是放到Anaconda中
在这里插入图片描述
正确输出
在这里插入图片描述
恭喜搞定了
参考

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值