VS2017 C++调用python以及一些错误的解决

这几天需要用写一个小界面来应付导师的需求,打算用Qt5写界面,代码用的是基于vs2017的c++和python来编写。因为python文件已经写完,现在就想试一下怎么调用。

目录

    • 环境配置
      • 包含目录和库目录
      • 依赖项
    • 可能出现的问题
      • python36.dll无法找到
    • 调用例子
    • 参考文献

环境配置

包含目录和库目录

  1. 第一步,首先要添加包含目录和库目录, 添加你的python项目环境里面的include和libs文件夹路径。有些小伙伴不知道怎么找include和libs的路径,这里我的python是在VS2017中下载的。他的路径是
    D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64
    视你用的py版本和C/D盘进行选择。打开这个文件夹我们可以看见 include和libs两个文件。
    VS2017 C++调用python以及一些错误的解决_第1张图片
    接着,打开VS2017的解决方案资源管理器,在包含目录库目录添加对应的includelibs路径,这个路径就是第一步图中圆圈画出来的路径,大家自行选择。
    VS2017 C++调用python以及一些错误的解决_第2张图片

依赖项

  1. 第二步,添加依赖项
    VS2017 C++调用python以及一些错误的解决_第3张图片
    依赖项的添加,其他博客会让添加python36.lib的同时添加python36
    _d.lib
    文件,但是我这次之后不行,报错说找不到python36
    _d.lib文件。通过参考其他博客,我是这么解决的,首先在D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64找到pyconfig.h文件,用vs2017打开。找到293行,将python36_d.lib改成python36.lib。
    VS2017 C++调用python以及一些错误的解决_第4张图片
    同时,找到337行,并把这一行注释掉
    在这里插入图片描述
    变成如下样式
    在这里插入图片描述
    保存文件即可。

可能出现的问题

python36.dll无法找到

我在调试的时候,出现了如下情况:
VS2017 C++调用python以及一些错误的解决_第5张图片
缺少python36.dll文件,我查了一下,确实有这个文件。但是需要把它放到C:\Windows\System32,至于为什么不知道。能用就行了,哈哈哈哈哈。

调用例子

  1. py_test.py
def a():
    print("1")#这个例子非常简单,只是为了验证能不能验证
  1. c++_python_test.cpp
#include
#include 
using namespace std;

int main()
{
	//初始化python模块
	Py_Initialize();
	// 检查初始化是否成功  
	if (!Py_IsInitialized())
	{
		cout << "初始化失败" << endl;
		Py_Finalize();
	}

	PyObject* pModule;
	PyObject* pFunc = NULL;
	PyObject *pArg = NULL;
	PyRun_SimpleString("import sys");
	PyRun_SimpleString("sys.path.append('D:/sy/OpenGL+CGAL/OpenGL+CGAL')");//这里的路径我用的绝对路径,要看准用“/”


	pModule = PyImport_ImportModule("py_test");//Python文件名     
	if (!pModule) {
		cout << "py文件导入失败" << endl;
		Py_Finalize();
	}
	else {
		pFunc = PyObject_GetAttrString(pModule, "a");//Python文件中的函数名  
		if (!pFunc) {
			cout << "函数导入失败" << endl;
			Py_Finalize();
		}

		PyEval_CallObject(pFunc, NULL);//调用函数

		system("pause");
	}
}

最终结果,成功调用。在这里插入图片描述

参考文献

VS2017 C/C++调用python脚本文件
无法打开 python36_d.lib 的问题
python源码

你可能感兴趣的:(c++/python,python,c++)