C++调用python踩坑记录

0、参考文档及博客

重要的东西放前面:

用C或者C++编写模块的官方文档:
https://docs.python.org/3/extending/index.html

我配置环境时的参考博客:
https://blog.csdn.net/nanguabing007/article/details/89394541

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’”。
解决方法是在系统环境变量里加上这条:
在这里插入图片描述
网上有教程说要设置PYTHONHOME才能用,但是我试了一下,只设置PYTHONPATH就够了
注意:设置完环境变量之后要重启才能生效。

2、C++调用python的方法

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

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

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 {
   
		
		PyRun_SimpleString(
  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值