如何在C++中调用python代码你知道吗

目录
  • 一、环境设置
  • 二、VS项目中设置
    • (1)首先在acaconda中找到include文件夹和libs文件夹,如图所示
    • (2)点击链接器,然后输入,附加依赖项,添加python36_d.lib的路径
    • (3)python代码
  • 三、可能会出现的问题
  • 总结

一、环境设置

windows

VS2015

python的话用的是acaconda自带的python环境,不同版本的acaconda自带的python不同,我的是python3.6(这一步很重要,如果使用acaconda创建的虚拟环境的python,可能会不成功)

二、VS项目中设置

(1)首先在acaconda中找到include文件夹和libs文件夹,如图所示

然后右击C++项目,选择属性,点击VC++目录,然后在包含目录中添加include文件夹,在库目录中添加libs文件夹

(2)点击链接器,然后输入,附加依赖项,添加python36_d.lib的路径

因为配置为Debug,所以是添加python36_d.lib,而不是python36.lib。如果没有这个文件,直接复制python36.lib,然后命名为python36_d.lib即可。如图所示

(3)python代码

想要在C++代码中调用python中的vsdemo.py的max函数,首先python代码如图所示

def max(a,b):
    if a>b:
        return a
    else:
        return b

C++代码如图所示

#include <iostream>
#include<python.h>
#include"stdio.h"
using namespace std;
int main()
{
	Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
	if (!Py_IsInitialized())
	{
		printf("初始化失败!");
		return 0;
	}
	PyRun_SimpleString("import sys");
	PyRun_SimpleString("sys.path.append('./')");//这一步很重要,修改Python路径
	PyObject* pModule = NULL;//声明变量
	PyObject* pFunc = NULL;// 声明变量
	pModule = PyImport_ImportModule("vsdemo");//这里是要调用的文件名vsdemo.py
	if (pModule == NULL)
	{
		cout << "没找到" << endl;
	}
	pFunc = PyObject_GetAttrString(pModule, "max");//这里是要调用的函数名max
	PyObject* pParams = Py_BuildValue("(ss)", "3", "4");//两个字符串参数
	char* result;
	PyObject* pRet = PyObject_CallObject(pFunc, pParams);//调用函数 pRet是得到的结果
	int res = 0;
	PyArg_Parse(pRet, "s", &result);//转换结果的返回类型
	cout << "res:" << result << endl;//输出结果
	system("pause");
	Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。
	return 0;
}

同时需要把python代码,即vsdemo.py文件,放到c++项目文件中,然后再运行

三、可能会出现的问题

(1)可能会出现找不到python36.dll的错误,可以从acaconda中找到该文件,复制到c++项目文件中即可,如图所示

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 如何在C++中调用Python

    Python的安装 为了使用Python.h这个扩展项,我们需要安装一个python*-dev而不是python*,这两者略有区别,下面的案例展示的是在Ubuntu20.04下安装python3.9-dev的方法: dechin@ubuntu2004:~/projects/gitlab/dechin/$ sudo apt install python3.9-dev 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列软件包是自动安装的并且现在不需要了:

  • Python调用C/C++的方法解析

    Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过. 1. Python 调用 C (base) 想在python中调用c函数, 如这儿的fact #include <Python.h> int fact(int n) { if (n <= 1) return 1; else return n * fact(n - 1); } PyObject*

  • C++调用python(执行py文件)的全过程

    1.首先要配好vs开发工程 注意版本:我这使用32位的python那么我vs工程这边也选择32位的编译环境去配置 注意点:需要将python安装目录的一些文件拷过来作为vs工程使用. 2.C++调用Python结果 py代码 这里引用了cdll库也需要放置到运行目录,py文件也是需要放置到运行目录(也就是exe生成所在目录) import os import time from ctypes import * def testDLL(): pDll = CDLL("./pythonTestCDl

  • 解决c++调用python中文乱码问题

    windows中文操作系统下,vs的c++项目默认编码是GB2312 python默认是utf-8编码 最好在c++程序顶上加: #pragma execution_character_set("GB2312") c++中的字符串一定就是gbk编码 传入python前要做编码转换 准备一个gbk转utf8的函数,如下(网上的): string GbkToUtf8(const char* src_str) { int len = MultiByteToWideChar(CP_ACP, 0

  • Python与C/C++的相互调用案例

    一.问题 Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结. 二.Python调用C/C++ 1.Python调用C动态链接库 Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可. (1)C语言文件:pycall.c /***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include <stdio.h> #include <stdlib.h> int f

  • 如何在C++中调用python代码你知道吗

    目录 一.环境设置 二.VS项目中设置 (1)首先在acaconda中找到include文件夹和libs文件夹,如图所示 (2)点击链接器,然后输入,附加依赖项,添加python36_d.lib的路径 (3)python代码 三.可能会出现的问题 总结 一.环境设置 windows VS2015 python的话用的是acaconda自带的python环境,不同版本的acaconda自带的python不同,我的是python3.6(这一步很重要,如果使用acaconda创建的虚拟环境的pytho

  • 详解如何在Java中调用Python程序

    Java中调用Python程序 1.新建一个Maven工程,导入如下依赖 <dependency> <groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version>2.7.0</version> </dependency> 2.在java中直接执行python代码片段 import org.python.util

  • 如何在Java中调用python文件执行详解

    目录 一.Java内置Jpython库(不推荐) 1.1 下载与使用 1.2 缺陷 二.使用Runtime.getRuntime()执行脚本⽂件 2.1 使用 2.2 缺陷 三.利用cmd调用python文件 3.1 使用 3.2 优化 总结 一.Java内置Jpython库(不推荐) 1.1 下载与使用 可以在官网下载jar包,官网:http://ftp.cuhk.edu.hk/pub/packages/apache.org/ 或者使用maven进行jar包下载 <dependency> &

  • Python如何在main中调用函数内的函数方式

    一般在Python中在函数中定义的函数是不能直接调用的,但是如果要用的话怎么办呢? 一般情况下: def a():#第一层函数 def b():#第二层函数 print('打开文件B') b()#第二层中的函数直接调用 结果显示: Traceback (most recent call last): File "C:/Users/rog/Desktop/wenzhang.py", line 4, in <module> b() NameError: name 'b' is

  • 实例学习如何在ASP中调用DLL

    本文通过VB5.0创建ActiveX DLL文件,这个文件模拟了一个掷色子的过程,向大家介绍如何在ASP中调用DLL的文章专题. 动态联接库(DLL)是加快应用程序关键部分的执行速度的重要方法,但有一点恐怕大部分人都不知道,那就是在ASP文件也能通过调用DLL来加快服务器的执行速度,下面我简单的介绍一下在ASP文件调用DLL的步骤.  首先,必须得有DLL文件,本例是通过VB5.0创建ActiveX DLL文件,这个文件模拟了一个掷色子的过程.  在VB5.0的环境下,新建一个工程,并双击新建工

  • 如何在UpdatePanel中调用JS客户端脚本

    页面中加入了UpdatePanel后,Response.Write("<script>function dis (){alert('这是调用写在server的JS');}</script>")来调用客户端脚本,无任何提示的无反应.如何在UpdatePanel中调用JS客户端脚本呢? 方法:采用 ScriptManager.RegisterStartupScript(Control controlId,Type this.GetType(),String key,

  • Golang如何调用Python代码详解

    前言 Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言.Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅基的办法. go 中的 cgo 模块可以让 go 无缝调用 c 或者 c++ 的代码,而 python 本身就是个 c 库,自然也可以由 cgo 直接调用,前提是指定正确的编译条件,如 Python.h 头文件(),以及要链接的库文件.本文以 Ubuntu 18.04 作为开发和运行平台进行演

  • 使用C++调用Python代码的方法详解

    一.配置python环境问题 1.首先安装Python(版本无所谓),安装的时候选的添加python路径到环境变量中 安装之后的文件夹如下所示: 2.在VS中配置环境和库 右击项目->属性->VC++目录 1)包含目录: Python安装路径/include 2)库目录: Python安装路径/libs 右击项目->属性->连接器->输入->附加依赖库 debug下: python安装目录/libs/python37_d.lib release下: python安装目录

  • 如何在C#中调用COM组件

    一.引言 COM(Component Object Modele,组件对象模型)是微软以前推崇的一个开发技术,所以现在微软的很多产品都用到了COM组件,如Office,IE 等.然而如果.NET 平台下的程序想访问COM组件的方式来实现某个功能怎么办呢? 正是由于开发人员有这个需求,所以微软在.NET FrameWork中为COM和托管代码之间进行互操作提供了支持,这种互操作性的技术就是COM Interop. 但是COM Interop(COm互操作)这项技术,不仅支持在托管代码中使用COM对

随机推荐