C++ 混合Python编程 及 Visual Studio配置

这篇具有很好参考价值的文章主要介绍了C++ 混合Python编程 及 Visual Studio配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求

接手了一个C++应用程序,解析csv和生成csv文件,但是如果要把多个csv文件合并成一个Excel,分布在不同的Sheet中,又想在一次运行中完成,不想说运行完C++ 的App后,再调用一个Python脚本或程序,这需要两步操作

配置环节

明确安装的是64位

根据安装的Visual Studio 的版本,我安装的是64-bit的。 如何查看当前Python已安装的python位数或者版本
C++ 混合Python编程 及 Visual Studio配置,Python,c++,python,visual studio

在cmd模式下输入python,可以看到已安装64bit版本,

C:\Users\xxx>python
Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr  5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
C:\Users\xxx>where python
C:\Program Files\Python310\python.exe
C:\Users\xxx\AppData\Local\Microsoft\WindowsApps\python.exe

Python安装目录

C++ 混合Python编程 及 Visual Studio配置,Python,c++,python,visual studio- python.h 所在目录: C:\Program Files\Python310\include

  • python libraries 目录: C:\Program Files\Python310\libs

当设置Visual Studio工程属性时,需要用到上述目录

创建Console C++ Project

创建一个工程,然后配置工程属性
C++ 混合Python编程 及 Visual Studio配置,Python,c++,python,visual studio

Cpp 调用 Python Demo

参考代码

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


using namespace std;

// https://docs.python.org/3/extending/embedding.html
void CallPython(string PythonModuleName, string PythonFunctionName)
{
	char* funcname = new char[PythonFunctionName.length() + 1];
	strcpy_s(funcname, PythonFunctionName.length() + 1, PythonFunctionName.c_str());

	char* modname = new char[PythonModuleName.length() + 1];
	strcpy_s(modname, PythonModuleName.length() + 1, PythonModuleName.c_str());

	printf("Hit any key to initialize the Python interpreter\n");
	system("pause");

	// Initialize the Python interpreter 
	// https://docs.python.org/3/c-api/init.html#c.Py_Initialize
	Py_Initialize();

	TCHAR cwd[2048];
	GetCurrentDirectory(sizeof(cwd), cwd);

	// Import a module. This is best described by referring to the built-in Python function __import__().
	// https://docs.python.org/3/c-api/import.html?highlight=pyimport_importmodule#c.PyImport_ImportModule 
	printf("Hit any key to Load the Python module %ws - %s\n", cwd, modname);
	system("pause");
	PyObject* my_module = PyImport_ImportModule(modname);

	// Print a standard traceback to sys.stderr and clear the error indicator
	// https://docs.python.org/3/c-api/exceptions.html?highlight=pyerr_print#c.PyErr_Print
	PyErr_Print();

	printf("Module found\n");
	printf("Hit any key to find function %s from Python module %ws\n", funcname, cwd);
	system("pause");

	// Get the address of the particular Python function in the imported module
	// https://docs.python.org/3/c-api/object.html?highlight=pyobject_getattrstring#c.PyObject_GetAttrString
	printf("Getting address of %s in Python module\n", funcname);
	PyObject* my_function = PyObject_GetAttrString(my_module, funcname);

	PyErr_Print();

	printf("Function found\n");
	printf("Hit any key to call function %s from Python module %ws\n", funcname, cwd);
	system("pause");

	// Call a callable Python object callable, with arguments given by the tuple args. 
	// If no arguments are needed, then args can be NULL.
	// https://docs.python.org/3/c-api/call.html?highlight=pyobject_callobject#c.PyObject_CallObject
	PyObject* my_result = PyObject_CallObject(my_function, NULL);

	PyErr_Print();

	printf("Your function has been called\n");
	system("pause");

	// Undo all initializations made by Py_Initialize() and subsequent use of Python/C API functions, 
	// and destroy all sub-interpreters (see Py_NewInterpreter() below) that were created and not yet 
	// destroyed since the last call to Py_Initialize(). Ideally, this frees all memory allocated by the Python interpreter.
	// https://docs.python.org/3/c-api/init.html?highlight=py_finalize#c.Py_FinalizeEx
	Py_Finalize();

	delete[] funcname;
	delete[] modname;
}

int main()
{
	CallPython("PythonFile", "helloworld");
	system("pause");
	return 0;
}

上述代码编译通过后,如果直接运行,会Failed, 原因是我们并没有定义PythonFile module.在Debug模式下,生成的exe文件在x64目录下:
C++ 混合Python编程 及 Visual Studio配置,Python,c++,python,visual studio

  • 创建PythonFile.py 文件
import re
import string

def helloworld():
	print("Hello from Python!")

main函数内,

  • PythonFile 对应了 PythonModuleName
  • helloworld 对应了 PythonFunctionName

运行Demo后的输出结果

Hit any key to initialize the Python interpreter
请按任意键继续. . .
Hit any key to Load the Python module C:\Resource\App\Python\CppPython\CppPython - PythonFile
请按任意键继续. . .
Module found
Hit any key to find function helloworld from Python module C:\Resource\App\Python\CppPython\CppPython
请按任意键继续. . .
Getting address of helloworld in Python module
Function found
Hit any key to call function helloworld from Python module C:\Resource\App\Python\CppPython\CppPython
请按任意键继续. . .
Hello from Python!
Your function has been called
请按任意键继续. . .
请按任意键继续. . .

参考

C++与Python混合编程文章来源地址https://www.toymoban.com/news/detail-639232.html

到了这里,关于C++ 混合Python编程 及 Visual Studio配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python OpenCV配置CUDA以支持GPU加速 (不使用Visual Studio)

    Welcome to My Blog 文章唯一地址:https://blog.csdn.net/REAL_liudebai/article/details/119356958 问题:   1)Python通过pip或conda安装的OpenCV库仅支持CPU;   2)网上找到的教程基本都是通过VS配置CUDA环境( VS太强大了,但并不想安装 ); 解决办法:   3)可以使用官方预构建源代码配置支

    2024年01月22日
    浏览(59)
  • Visual Studio搭建C++环境 配置教程

    1、下载软件 官网下载需要安装的版本Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器,目前最新版本更新到2022。  2、安装软件 双击下载的安装文件,弹出安装界面, 选择工作负载,勾选 使用C++的桌面开发 和 Visual Studio扩展开发 。我本地已经装了vs2019,直接选择

    2023年04月08日
    浏览(98)
  • Visual Studio 2022 C++下载及配置

     下载地址:https://visualstudio.microsoft.com/zh-hans/vs/          之后点击右下角的安装;  如果下载速度一直为0,那么解决方法为:修改电脑的DNS服务器地址为8.8.8.8和8.8.8.4                        这里可能会出现如下问题: 问题一: 出现该问题是因为没有安装对应的Win10 S

    2024年02月09日
    浏览(49)
  • visual studio配置调用c++ dll opencv为例

    1,配置VC++目录,包含目录和库目录。 2,链接器-输入-包含目录 3,生成目录下包含对应的dll文件 4,需注意对应的Debug,Release及X86,X64选项

    2024年02月17日
    浏览(54)
  • C++ 学习(一)Visual Studio 2022配置、Git配置及第一个程序

    从今天开始学习一下C++,一些小例子与Golang语言对比一下。 C++ IDE:Visual Studio 2022 下载地址:Visual Studio 2022 IDE - Programming Tool for Software Developers Golang IDE:Goland (需要配置Go环境) 下载地址:Download GoLand: A Go IDE with extended support for JavaScript, TypeScript, and databases 选择“创建新项

    2023年04月09日
    浏览(56)
  • Microsoft Visual Studio C++开发环境的配置及使用

    本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者\\\"海洋饼干叔 叔\\\";本文不允许以纸质及电子出版为目的进行抄摘或改编。 1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应

    2024年02月04日
    浏览(78)
  • VTK开发环境配置(Visual Studio C++)-详细图文教程

    前言:由于目前网络上关于VTK的资料甚少,且绝大多数开发配置教程 在编译完VTK环境后仍然需要CMAKE来管理,每当为自己的项目配置vtk时都需要写CMAKE文件,这对没有CMAKE经验的人来说实在不友好。 故出此教程,完成VTK环境编译后,只需引入VTK相关的头文件目录,lib目录即可

    2023年04月12日
    浏览(66)
  • C++绘图库matplotlibcpp在Visual Studio中的配置方法

      本文介绍在 Visual Studio 软件中配置、编译 C++ 环境下 matplotlibcpp 库的详细方法。    matplotlibcpp 库是一个 C++ 环境下的绘图工具,其通过调用 Python 接口,实现在 C++ 代码中通过 matplotlib 库的命令绘制各类图像。由于其需要调用 Python 接口,因此在配置 matplotlibcpp 库时有些

    2023年04月11日
    浏览(37)
  • Windows系统下安装Visual Studio及配置C++环境(小白篇)

     作者简介:笔者小白一枚,写这些文章只是为了能够在自己踩过坑之后,能为后人搭一座桥。本文章仅支持在Windows系统上安装Visual Studio 软件简介:Visual Studio(VS)是一款由微软公司以Windows为主要平台开发的一款功能强大的IDE(Integrated Development Environment:集成开发环境),支

    2024年02月12日
    浏览(56)
  • 在Windows中基于Visual Studio配置OpenVINO C++开发环境

    作者:王一凡  英特尔物联网行业创新大使 目录 1.1 下载并安装Visual Studio Community版 1.2 下载并解压OpenVINO Runtime 1.3 下载并解压OpenCV 1 .4 在Visual Studio中配置项目属性 1.5 运行OpenVINO C++范例程序,测试开发环境 1.6 总结 本文主要介绍在Windows中基于Visual Studio配置OpenVINO C++开发环境

    2024年02月06日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包