如何在Microsoft Visual Studio 中使用Cpp代码调用python代码

Microsoft Visual Studio中Cpp调用Python代码

本文介绍如何在Microsoft Visual Studio中,开发cpp项目时,调用python代码。



前言

在使用Microsoft Visual Studio做Cpp项目开发时,有时不得不使用Python部分的代码。本文介绍在两种场景下如何调用Python代码:cpp项目生成exe文件和cpp项目生成dll动态链接库文件。


一、Cpp生成exe文件

1.1 安装python环境

值得注意的是,尽量不要使用Conda虚拟环境,因为虚拟环境有很多文件是不齐全的。这里,我们使用从python官网下载的python安装程序,进行安装。
记得安装完毕后,要配置系统变量环境。这样比如执行pip指令后,才会更新我们新安装的环境。
我安装的是Python 3.6版本,下载地址

在这里插入图片描述
下载完成后,在弹出的安装选项中记得选择自定义路径,并添加到系统变量环境中。

1.2 配置Microsoft Visual Studio

我的python安装路径是 D:\Users\ASUS\Python\Python36\libs
点击项目属性框,进行如下配置
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

1.3 进行cpp调用python代码编写

Py_Initialize();
if (!Py_IsInitialized())
{
	printf("初始化失败!");
	return;
}
Py_Finalize();

二、生成动态链接库的情况

这种情况和上述第一部分的配置和代码编写方法都是一样的。
需要注意的是python的版本问题,如果版本不一致的话,则会报错。比如说,我们的cpp代码最后生成了a.dll文件,被b.exe所加载使用。如果b.exe使用的python版本是3.6(其具有python3.6.dll),而我们的a.dll是依赖python3.7编译的,那么就会报错。

三、QT与<Python.h>同时开发导致的不兼容问题

QT环境下集成Python出现PyType_Slot *slots;冲突问题
解决方法:

typedef struct{     
 
      const char* name;     
 
      int basicsize;    
 
       int itemsize;     
 
      unsigned int flags;
 
      #undef slots     //这里取消slots宏定义
 
       PyType_Slot *slots;  /* terminated by slot==0. */
 
      #define slots Q_SLOTS  //这里恢复slots宏定义与QT中QObjectDefs.h中一致
 
  } PyType_Spec; 
Visual Studio中运行Python代码通常通过集成的Python开发工具或C++/Python接口来完成。以下是一个简单的步骤: 1. **安装Python**: 首先,确保Visual Studio已经安装了Python支持。如果未安装,可以从官方Python官网下载并安装适合VS版本的Python发行版[^2]。 2. **配置Python环境**: 在Visual Studio中打开"Tools" -> "Options" -> "Projects and Solutions" -> "VC++ Directories", 添加Python的安装路径到"Include directories"和"Library directories"。 3. **启用C++/Python Bridge**: 如果你想通过C++调用Python代码,可以使用Boost.Python库或Python/C API。例如,在C++项目中添加Boost.Python库,或者在项目的属性页设置`Additional Include Directories`以链接Python头文件[^1]。 4. **编写Python脚本**: 创建一个`.py`文件,写入你想要执行的Python代码。比如,如果你有一个名为`data.py`的脚本,它有处理二维数组的方法: ```python import numpy as np def save_array_to_file(arr, filename): np.save(filename, arr) def load_array_from_file(filename): return np.load(filename) ``` 5. **调用Python函数**: 在C++代码中,你可以这样调用Python函数: ```cpp #include <boost/python.hpp> using namespace boost::python; // 假设已导入numpy模块 void callPythonFunction() { Py_Initialize(); // 初始化Python解释器 PyObject* pModule = PyImport_ImportModule("data"); // 导入Python模块 if (pModule == NULL) { std::cerr << "Failed to import module!" << std::endl; return; } // 调用Python函数 PyRun_SimpleString("save_array_to_file(np.array([[1, 2], [3, 4]]), 'output.npy')"); // ... Py_Finalize(); // 清理Python资源 } ``` 6. **运行Python函数**: 在Visual Studio中,可以在命令行窗口或者调试器中直接运行`callPythonFunction()`函数来执行Python代码。 记得每次更改Python脚本后都需要重新编译C++项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wumbuk

您的支持是我坚持的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值