VS2022中一步实现C++调用python程序文件

        首先直接上干货,我是借鉴了C++调用python文件(包含第三方库) - 知乎 (zhihu.com)

(13条消息) 2.VS2017调用Python函数_vs2017 python3.11_糊面包包专属的博客-CSDN博客​​​​​

这两篇博客。

        针对网上提出的大量的关于C++调用python的教程,实际上教的只能说是残缺品,我所看的这两篇介绍的十分详细,根据这两篇文章,总结调用过程如下:

        首先就是配置相关的环境,配置环境这一块如果没配置好的话,后面会出现很多的bug,我当时没有配置好环境,就一直报错没有找到python38_d.lib文件。鉴于此,希望看过我这篇文章的友友们都能发现问题之所在。

        一、给项目属性中配置属性的VC++目录中的包含目录和库目录,加入我们电脑中的python所在的路径。由于我用的是anaconda创建的虚拟环境,所以就以这个例子来讲了,不是虚拟环境的同样可以借鉴

1.1 包含目录

在包含目录中加入虚拟环境中的include文件夹路径

1.2 库目录

在库目录中加入虚拟环境中的libs所在路径

二、在链接器中的输入中的附加依赖项中,加入虚拟环境中的libs中的python38.lib,将其重命名成python38_d.lib文件当然,如果你是python3.9或者其他版本,相应地改一下就行。这个文件的加入,真的很重要!!!!!!我就不说三遍了,不加这个文件名字的后果就是,运行的时候会报找不到或者没有python38_d.lib文件,然后又开始不断尝试修改这个bug的网上教程,真的是费力不讨好的方法捏,不如事先就改好。

三、然后将两个重要文件夹复制到C++编译exe同目录下,该路径如下(感觉其实加不加都行)保险起见还是加一下吧

虚拟环境中的两个重要的文件夹路径分别是:

D:\python3\DLLs
D:\python3\Lib

这个也是根据读者当初安装python的路径要做出相应的调整。不进行这一步,引入第三方库的时候会出错。如下所示

四:加入一些不容易注意的文件,以免小bug,比如我用的是虚拟环境中的python版本是3.8,要将python38.dll加入exe所在文件夹中,如下方第一张图所示,以及将libs文件夹中的python38.lib文件改成python38_d.lib放入下方第二张图所在路径:

配置好了这些环境就可以开始调用python程序了:那我跑的这个例子提供给你们吧,也是借鉴的两篇文章中的一个。

这个是C++调用的python程序的例子:

#include <iostream>
#include <Python.h>
#include<string>
using namespace std;
int main()
{
	Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化

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

	PyObject* pModule = NULL;//声明变量
	PyObject* pFunc1 = NULL;// 声明变量
	PyObject* pFunc2 = NULL;// 声明变量
	PyObject* pFunc3 = NULL;// 声明变量
	pModule = PyImport_ImportModule("hello");//这里是要调用的文件名
	if (pModule == NULL)
	{
		cout << "没找到" << endl;
	}

	pFunc3 = PyObject_GetAttrString(pModule, "func1");//这里是要调用的函数名
	PyObject* args2 = Py_BuildValue("ii", 25, 6);//给python函数参数赋值

	PyObject* pRet = PyObject_CallObject(pFunc3, args2);//调用函数
	int res = 0;
	PyArg_Parse(pRet, "i", &res);//转换返回类型

	cout << "res:" << res << endl;//输出结果

	Py_Finalize(); // 与初始化对应
	system("pause");
	return 0;

}

调用的python文件也要放到C++编译exe同目录下。如果用的是debug就放到那个编译exe目录下,如果是release,同理也放到那个目录下就行。如下图所示:

这里需要有两个python文件,一个没有第三方库的引入,一个有第三方库的引入。前者负责引入后者的函数。

第一个文件,是c++代码里调用的文件。

hello.py

import demo as d
import other as oth

def func1(a,b):
    return d.formula1(a,b)

第二个文件,是真正想执行的程序

demo.py

import numpy as np

def formula1(A, F):
    print(A,F)
    return np.array(A*F)

 成功运行,运行得到如下结果:

希望看到这篇文章的各位朋友们都能成功调用python文件!!!

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 我可以为你提供一个示例程序,可以用来调用Python文件:``` import os# 设置要调用文件名 filename = 'myfile.py'# 调用文件 os.system("python %s" % filename) ``` ### 回答2: C调用Python文件程序可以通过以下步骤实现: 步骤1:在C程序包含Python的头文件。 #include <Python.h> 步骤2:初始化Python环境。 Py_Initialize(); 步骤3:将Python文件导入C程序。 PyObject *pModule = PyImport_ImportModule("python_file"); 步骤4:检查导入模块是否成功。 if (pModule == NULL) { PyErr_Print(); return 1; } 步骤5:调用Python文件的函数。 PyObject *pFunc = PyObject_GetAttrString(pModule, "function_name"); 步骤6:检查获取函数是否成功。 if (pFunc == NULL) { Py_DECREF(pModule); PyErr_Print(); return 1; } 步骤7:传递参数给Python函数。 PyObject *pArgs = PyTuple_New(参数个数); PyTuple_SetItem(pArgs, 参数索引, 参数值); 步骤8:调用Python函数。 PyObject *pRet = PyObject_CallObject(pFunc, pArgs); 步骤9:检查函数调用是否成功。 if (pRet == NULL) { Py_DECREF(pModule); Py_DECREF(pFunc); PyErr_Print(); return 1; } 步骤10:处理Python函数的返回结果。 // 根据返回类型进行相应的处理 步骤11:释放资源。 Py_DECREF(pModule); Py_DECREF(pFunc); Py_DECREF(pRet); Py_DECREF(pArgs); 步骤12:关闭Python环境。 Py_Finalize(); 以上是调用Python文件程序的基本步骤。通过C调用Python文件可以实现C与Python的交互,可以将C程序的数据传递给Python进行处理,或者调用Python文件的函数来完成特定的功能。 ### 回答3: 调用Python文件程序可以通过多种方式实现。以下是一种常用的方法: 1. 使用命令行调用:在命令行输入"python 文件名.py"即可调用Python文件。其,"文件名.py"是要调用Python文件文件名。这种方式适用于直接调用Python文件并查看其输出结果。 2. 在其他Python文件调用:如果想在另一个Python文件调用某个Python文件的功能,可以使用import语句。例如,如果要在"main.py"文件调用"module.py"文件的函数,则可以在"main.py"文件编写以下代码: ``` import module # 调用module.py的函数 module.function_name() ``` 这种方式适用于在整个项目重用和调用多个Python文件的功能。 3. 使用第三方库进行调用:有些第三方库提供了更高级的功能,可以用于调用Python文件。例如,可以使用subprocess模块的函数来调用Python文件并获取其输出结果。以下是一个使用subprocess库的示例代码: ``` import subprocess # 调用Python文件 result = subprocess.check_output(['python', '文件名.py']) # 打印输出结果 print(result.decode('utf-8')) ``` 以上是三种常用的调用Python文件程序方式。具体选择哪种方式取决于需要实现的功能和环境需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

机器想学习

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值