Qt C++ 调用pyd文件 初学者第一次实例,有一堆问题解决流程(Windows)

1、python库的安装

方法有很多,我这里使用的最直接的方法直接去Python官网下载安装包,具体下载流程建议跟着下面文章做,篇幅过长。在qt调用中Py_SetPythonHome(L"E:/Python/Python3.xx.1");在3.11被禁用了,用更新版本可以用下面方法设置系统变量

Python安装超详细教程 

然后不用Py_SetPythonHome()也可以。

2、添加下好的的python到qt中

首先需要将Python包含到库中,但是又会出现一些问题。其中我就遇到了其一,在qt中几乎一定会遇到。

因为是因为在Python和Qt中都定义了slots,如果一个类继承自QObject,这时再引入<Python.h>时,两者之间就会有冲突。在编译时会出现如下的错误:

解决方法

#pragma push_macro("slots")
#undef slots
#include <Python.h>
#pragma pop_macro("slots")

以下是调用实例:

Py_Initialize();

PyObject *pModule, *pFunc;

// 加载Python模块
pModule = PyImport_ImportModule("example");
if (pModule == nullptr)
{
    qDebug() << "Failed to load Python module";
    return;
}

// 获取Python函数
pFunc = PyObject_GetAttrString(pModule, "example_function");
if (pFunc && PyCallable_Check(pFunc))
{
    // 调用Python函数
    PyObject_CallObject(pFunc, nullptr);
}
else
{
    qDebug() << "Failed to get Python function";
}

// 释放资源
Py_DECREF(pFunc);
Py_DECREF(pModule);

问题可以参Python C接口函数说明

重复调用的时候我遇到了Py_Finalize();调用后Py_Initialize();func无法再初始化,最后在析构函数调用Py_Finalize();一次即可,不需要多次掉用Py_Finalize();

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要安装Boost和Python以及Boost.Python库。然后,按照以下步骤操作: 1. 编写C++代码并使用Boost.Python库将其封装为Python模块。 例如,以下是一个简单的C++代码示例: ```c++ #include <boost/python.hpp> char const* greet() { return "Hello, world!"; } BOOST_PYTHON_MODULE(example) { using namespace boost::python; def("greet", greet); } ``` 这个代码定义了一个名为"greet"的函数,返回一个字符串,然后使用Boost.Python库将其封装为Python模块。 2. 使用CMake创建项目并将其编译为pyd文件。 为了编译生成pyd文件,你需要使用CMake来创建项目,使用Boost和Python的头文件和库文件,并将C++代码编译为pyd文件。 以下是一个CMakeLists.txt文件示例: ```cmake cmake_minimum_required(VERSION 3.0) project(example) find_package(Boost REQUIRED COMPONENTS python) find_package(PythonLibs REQUIRED) include_directories(${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS}) link_directories(${Boost_LIBRARY_DIRS}) add_library(example SHARED example.cpp) target_link_libraries(example ${Boost_LIBRARIES} ${PYTHON_LIBRARIES}) set_target_properties(example PROPERTIES SUFFIX ".pyd") ``` 这个文件指定了编译项目所需的Boost和Python库,将C++代码编译为pyd文件,并设置pyd文件的后缀名为".pyd"。 3. 编译并生成pyd文件。 使用以下命令编译项目: ``` cmake . make ``` 这将生成名为"example.pyd"的文件,可以在Windows上使用Python调用。 注意:在Windows上,你需要将Boost库和Python库添加到PATH环境变量中,或者将它们复制到生成的pyd文件所在的目录中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值