vs2017能写python嘛_Vs2017调用Python,VS2017,python

0、参考文档及博客

重要的东西放前面:

1、环境配置步骤

这个网上有太多教程了,总结一下就是:

0、VS项目配置里,

32位系统配置选x86,64位系统配置选x64

,否则无法调用pyd等动态库,导致出现调用自己写的简单python代码可以,但是无法调用numpy等第三方库的问题。调用不了numpy还不会报错,只会在调用完PyImport_ImportModule函数之后返回NULL,极难调试。选Debug版就要在链接器配置里连接python36_d.lib,选release版要链接python36.lib。

1、找python源代码编译一遍,获得对应的pythonxx_d.lib文件。这里遇到过的问题主要是:(1)VS2017编译报错,显示少了个SDK。

解决方法是:用Visual Studio Installer下载所需的SDK。

2、将编译完成后出现的PcBuild->win32->python36_d.lib文件移动到相应的位置,在VS中配置好配置->链接器->输入。这里遇到的主要问题是:(1)运行调用python文件的代码时显示缺少python的动态链接文件。

解决方法是:找到python36_d.dll,移动到C:\Windows\System32文件夹下面。

3、运行调用python的C++代码。这里遇到的主要问题是:(1)调用Py_Initialize函数时,报错如下:

“Fatal Python error: Py_Initialize: unable to load the file system codec ModuleNotFoundError: No module named ‘encodings’”。

解决方法是在系统环境变量里加上两条:

注意:设置完环境变量之后要重启才能生效。

2、C++调用python的方法

代码框架:(同样来源于上面这篇博客,可用于测试环境配置成功与否)

#include

#include

using namespace std;

int main()

{

Py_SetPythonHome((wchar_t*)("D:\anaconda\envs\mworks_dis"));

/**

这句语句是在添加python.exe所在路径

**/

Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化

if (!Py_IsInitialized())

{

printf("初始化失败!");

return 0;

}

else {

printf("初始化成功啦啦啦啦啦啦啦啦啦啦啦啦!\n");

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.exe路径

Py_SetPythonHome((wchar_t*)("D:\anaconda\envs\mworks_dis"));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值