C++调用Python及间接调用Python三方库

本文详细介绍了如何在不依赖Python全局环境的情况下,通过C++程序调用Python脚本及其相关三方库。首先,需要移植Python解释器,将必要的库和文件复制到C++程序的执行目录。接着,在Visual Studio中进行相应配置。然后,通过Python API在C++中初始化Python环境并调用Python函数。最终,展示了C++调用Python函数的示例代码及其输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章目的是脱离安装Python环境的前提下,由C++程序调用Python程序及Python相关三方库

 

1.移植Python解释器

Python环境的目录结构

红色部分是生成路径下解释器运行时依赖
将红色部分拷贝到C++编译主ExE路径下即可,并把需要允许的py文件页考过去(也就是.py文件需和编译生成的.exe文件放在一起)

蓝色部分是VS配置编译时依赖,需要添加到vs工程的环境中

除此之外,也可以指定环境:

读取python文件位置   

程序最终发布的时候,不需要在客户端机上安装python,只需要拷贝python文件的libs,lib库,include文件夹,dll文件夹等到安装目录下,并使用

Py_SetPythonHome((char*)strPythonLibPath.c_str());指定查找路径

2.VS配置

在vs中进行配置

3.实例

python程序

def testReturn1(s1, s2):
   s = s1+s2
   return s
 
def testReturn2(s1):
   return s1

C++程序

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

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

		PyObject *pyParams1 = PyTuple_New(2);
		PyTuple_SetItem(pyParams1, 0, Py_BuildValue("s", "hello "));
		PyTuple_SetItem(pyParams1, 1, Py_BuildValue("s", "python"));

		char * result1;
		PyObject*pArg = PyEval_CallObject(pFunc, pyParams1);//调用函数
		PyArg_Parse(pArg, "s", &result1);
		cout << result1 << endl;



		pFunc = PyObject_GetAttrString(pModule, "testReturn2");//Python文件中的函数名  
		if (!pFunc) {
			cout << "函数导入失败" << endl;
			Py_Finalize();
		}
		PyObject* pyParams3 = Py_BuildValue("(i)", 123);
		int result2;
		pArg = PyEval_CallObject(pFunc, pyParams3);//调用函数
		PyArg_Parse(pArg, "i", &result2);
		cout << result2 << endl;

	}

结果

### 常用 Python三方库列表及用途 #### 科学计算与数据分析 - **NumPy**: 提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种函数[^2]。 - **Pandas**: 数据分析的基础工具之一。提供了高性能的数据结构和数据处理功能,特别适合表格型数据的操作。 #### Web开发框架 - **Flask**: 轻量级Web应用框架,简单易上手,适用于小型项目或微服务架构中的API接口搭建[^1]. - **Django**: 功能全面的企业级Web应用程序框架,内置ORM、认证授权模块等功能,默认遵循安全最佳实践. #### 访问第三方 API - **Requests**: 人类友好的HTTP,允许开发者轻松发送 HTTP/1.1 请求,无需手动添加查询字符串、编码表单参数等繁琐工作. - **Tweepy**: Twitter官方推荐的Python客户端,简化了Twitter RESTful API和服务端流媒体API调用过程. #### 性能优化 - **Cython**: 将Python代码转换为C/C++扩展模块,从而显著提高程序执行效率;支持静态类型声明以进一步增强性能表现[^3]. - **Numba**: 利用LLVM即时编译技术加速数值密集型运算,尤其擅长于向量化表达式的高效求解. #### 开发辅助工具 - **autopep8**: 自动调整源文件格式使之符合PEP8风格指南的要求,有助于保持团队内部一致性的编程习惯[^4]. - **pytest**: 扩展性强的测试驱动开发(TDD)框架,提供丰富的插件生态系统来满足不同场景下的自动化测试需求. ```python import requests from bs4 import BeautifulSoup as soup def fetch_webpage(url): response = requests.get(url) page_content = soup(response.text, 'html.parser') return page_content.title.string ```
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值