Windows平台进行C++ 调用 python大全

文章详细介绍了如何在C++项目中调用Python,包括设置附加包含目录、附加依赖项和库目录,以及注意事项如Python版本与VS编译模式匹配、是否安装debug插件。同时,文章强调了Python文件路径的处理,包括Windows、Linux和MacOS下的路径差异,以及相对路径和绝对路径的使用规则。

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

 因业务需要进行c++调用python

基本流程:

建立project,分别编写cpp、py文件。

在project里边进行属性设置(三个)建立 c++与python联系:

①属性->c/c++常规->附加包含目录 里面加上自己的python下的include路径。

②属性-> 链接器->输入->附加依赖项 中添加python37.lib。然后配置此lib文件的路径,可以将python37.lib直接复制到工程中去,也可以直接添加系统中python37.lib的绝对路径。

③属性->VC++目录->包含目录->python安装目录下得include

   属性->VC++目录->库目录->python安装目录下得libs

三个注意点

①确认已安装python (32位还是64位)对应VS编译时选择x86还是x64,否则会报错无法解析外部符号(python类)。

 ②python是否安装debug插件,否则会报错。

解决办法是要么安装python debug binaries,要么vs采用release进行编译。

 ③ 如果将py文件和cpp文件放在同一文件夹,注意py文件要和cpp一个目录层级,否则会找不到导入的python文件模块。

使用如下命令导入py文件:

    PyRun_SimpleString("import sys");

    PyRun_SimpleString("sys.path.append('./')"); //放在cpp的同一路径下

若目录不同,则导入

PyRun_SimpleString("sys.path.append('./')"); // ' '导入实际绝对路径

补充文件路径盲区:

绝对路径:

Linux和MacOS下的绝对路径和Windows系统不同,主要区别如下:

  • 根文件夹不同,Windows的根文件夹是盘符,如D:\C:\;而在Linux和MacOS中,根文件夹是/,你可以理解为所有的文件都在一个盘下,自然不需要用CD这样的字符去区分了。
  • 分隔符不同,在Windows 上,路径书写使用倒斜杠\作为文件夹之间的分隔符。但在MacOS和Linux上,使用正斜杠/作为它们的路径分隔符。
  • 大小写区分不同,文件夹名称和文件名在Windows和MacOS上是不区分大小写的,但在Linux上是区分大小写的。

相对路径是指以当前工作目录为参照基础,链接到目标文件资源(或文件夹)的路径。

相对路径的表示符号如下:

以./开头,代表当前目录和文件目录在同一个目录里,./也可以省略不写;
以../开头:向上走一级,代表目标文件在当前文件所在的上一级目录;
以../../开头:向上走两级,代表父级的父级目录,也就是上上级目录,再说明白点,就是上一级目录的上一级目录;
以/开头,代表根目录。

Python表示文件路径
在Python中,一般使用字符串存储文件路径。但需要注意的是,字符反斜杠\在Python中表示转义字符。因此,在表示Windows系统下的文件路径(Windows系统的分隔符是\)时需注意以下要点:

以路径D:\files\data\ndvi.tif为例;
在字符串前加个字符r,表示该字符串为原始字符串,会完全忽略所有的转义字符。例如,r"D:\files\data\ndvi.tif";
对转义字符进行转义,例如,"D:\\files\\data\\ndvi.tif";
将分隔符替换为/,在Windows系统下,将分隔符替换为/Python也能正确识别。例如,"D:/files/data/ndvi.tif"。
Linux和MacOS下,直接将路径放到单引号或者双引号里就行。

Windows 下使用 Qt C++ 调用 Python 有多种方法,以下是其中一种比较简单的方法: 1. 安装 Python 和 PyQt 首先,在 Windows 下安装 Python 和 PyQt。 2. 创建 Qt 项目 使用 Qt Creator 创建一个 Qt 项目,选择 C++ 应用程序。 3. 添加 Python 支持 在项目的 .pro 文件中添加以下内容: ``` CONFIG += link_pkgconfig PKGCONFIG += python-3.6 LIBS += -LC:/Python36/libs -lpython36 INCLUDEPATH += C:/Python36/include DEPENDPATH += C:/Python36/include ``` 其中,python-3.6 是你安装的 Python 版本号,C:/Python36 是 Python 的安装路径。 4. 创建 Python 脚本 在项目中创建一个 Python 脚本,例如 test.py,内容如下: ``` def add(a, b): return a + b ``` 5. 在 C++调用 PythonC++调用 Python 可以使用 Python.h 头文件和 Python 的 API。以下是一个简单的示例: ```cpp #include <Python.h> int main(int argc, char *argv[]) { Py_Initialize(); PyObject *pModule = PyImport_ImportModule("test"); if (pModule) { PyObject *pFunc = PyObject_GetAttrString(pModule, "add"); if (pFunc && PyCallable_Check(pFunc)) { PyObject *pArgs = PyTuple_New(2); PyTuple_SetItem(pArgs, 0, PyLong_FromLong(1)); PyTuple_SetItem(pArgs, 1, PyLong_FromLong(2)); PyObject *pResult = PyObject_CallObject(pFunc, pArgs); if (pResult) { long result = PyLong_AsLong(pResult); printf("result=%ld\n", result); Py_DECREF(pResult); } Py_DECREF(pArgs); } Py_DECREF(pFunc); } Py_DECREF(pModule); Py_Finalize(); return 0; } ``` 以上示例代码调用Python 脚本中的 add 方法,传入两个参数 1 和 2,输出结果 3。 注意事项: - 在调用Python API 后需要释放对象,避免内存泄漏。 - 实际项目中,可能需要使用 PyGILState_Ensure 和 PyGILState_Release 来保证线程安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值