我正在寻找将python完全嵌入到Qt应用程序中的方法。这样,我就想构建一个执行python代码的Qt应用程序,并且我可以完全分发,而不必关心目标机器上安装了哪个python版本,也不必要求未来的用户自己安装python。
我已经检查了库PythonQt、PyBind11、Boost.Python和本机python库,它们很好地将C++链接到Python,但它们中的任何一个都做了我想做的事情。
我在Linux中尝试了以下几种方法,并且计划在Windows和Mac上做同样的操作(或者至少类似的方法):
mkdir构建cd构建./配置--启用优化-共享的make DESTDIR=installed/
的man条目
有了Python3.9构建之后,我还没有安装任何库来测试这是否是C++正在调用的python。
我已经将它从Qt应用程序链接到我的.pro文件中,如下所示:
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:
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的原因之一。
谢谢。
发布于 2022-01-17 17:16:33
我终于找到了解决办法。
我从终端执行python解释器,并打印sys.path,显示正确的路径。
然后,在C++中,我向sys.path追加了正确的路径,删除了错误的路径。
https://stackoverflow.com/questions/70387151
复制相似问题