版本 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环境配置 打开项目——>属性
进行配置,根据自己文件路径调整
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中
正确输出
恭喜搞定了
参考