首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将python完全嵌入到Qt应用程序中

将python完全嵌入到Qt应用程序中
EN

Stack Overflow用户
提问于 2021-12-17 00:28:21
回答 1查看 433关注 0票数 1

我正在寻找将python完全嵌入到Qt应用程序中的方法。这样,我就想构建一个执行python代码的Qt应用程序,并且我可以完全分发,而不必关心目标机器上安装了哪个python版本,也不必要求未来的用户自己安装python。

我已经检查了库PythonQt、PyBind11、Boost.Python和本机python库,它们很好地将C++链接到Python,但它们中的任何一个都做了我想做的事情。

我在Linux中尝试了以下几种方法,并且计划在Windows和Mac上做同样的操作(或者至少类似的方法):

  1. 下载Python的源代码(在我的例子中是Python3.9)。

  1. 构建python。

mkdir构建cd构建./配置--启用优化-共享的make DESTDIR=installed/

  1. 将已安装的内容复制到项目的依赖项文件夹中。安装程序的内容如下所示,folders:
  • bin:包含python可执行文件和一些工具,如pip。包含:包含python的所有头。- lib:包含.so库和python模块(如果使用pip安装新的python模块,它将安装在python3.9/site-packages/中)。- shared:包含python.

的man条目

有了Python3.9构建之后,我还没有安装任何库来测试这是否是C++正在调用的python。

我已经将它从Qt应用程序链接到我的.pro文件中,如下所示:

代码语言:javascript
复制
INCLUDEPATH += $$PWD/../dependencies/python3.9/linux/include/python3.9
DEPENDPATH += $$PWD/../dependencies/python3.9/linux/include/python3.9


LIBS += -L$$PWD/../dependencies/python3.9/linux/lib/ -lpython3.9

一旦链接起来,我就这样称呼python:

代码语言:javascript
复制
Py_SetPythonHome(L"/link/to/dependencies/python3.9/linux/lib/python3.9/");
Py_SetPath(L"/link/to/dependencies/python3.9/linux/lib/python3.9/");

wchar_t *program = Py_DecodeLocale("", NULL);
if (program == NULL) {
    fprintf(stderr, "Fatal error: cannot decode argv[0]\n");
    exit(1);
}
Py_SetProgramName(program);  /* optional but recommended */
Py_Initialize();
PyRun_SimpleString("import pgmpy");
if (Py_FinalizeEx() < 0) {
    exit(120);
}
PyMem_RawFree(program);

在这段代码中,我将导入库pgmpy。这个包没有安装在我已经构建的python版本中。但是,它安装在我的本地版本的python中,这意味着它没有使用我已经构建的python,即使这是链接的。

是否有任何配置步骤或我缺少的东西?这是否可行?我对不特定于Qt的解决方案更感兴趣,但可以应用于任何C++项目,这也是我使用pybind11而不是pythonQt的原因之一。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-17 17:16:33

我终于找到了解决办法。

我从终端执行python解释器,并打印sys.path,显示正确的路径。

然后,在C++中,我向sys.path追加了正确的路径,删除了错误的路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70387151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档