python - 在 Qt Creator 项目中嵌入 Python
问题描述
我正在开发一个项目,该项目需要 C++ 调用用 Python 编写的依赖于 Python 专有模块的程序。
该项目使用 Qt Creator 处理,Python 3.7.5 及其包通过 Miniconda 安装。我已经使用 Pybind11 进行了基本的嵌入工作,其中基本接口工作,但是,大多数外部模块无法导入。
例如,通过 Pybind11 导入 Numpy 时,会抛出以下错误(为简洁起见减少了):
Importing the numpy c-extensions failed.
Original error was: /home/brentnallt/miniconda3/envs/car_class_nogpu/lib/python3.7/site-packages/numpy/core/_multiarray_umath.cpython-37m-x86_64-linux-gnu.so: undefined symbol: PyMemoryView_FromObject
通过 Pybind11 导入 tensorflow 时出现类似错误:
ImportError: /home/brentnallt/miniconda3/envs/car_class_nogpu/lib/python3.7/lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so: undefined symbol: PyUnicode_FromFormat
在读取 C 扩展共享库时发现 Python 的 C API 似乎是一个问题。但是,像 lxml 这样使用 C 源文件的模块可以很好地导入。此外,我可以将问题模块导入与我正在处理的项目分开的项目中,这意味着这是一个设置问题。请注意,这个测试项目设置实际上并没有使用任何 QT 功能,而主要的却使用了。
我的PYTHONHOME
环境变量如下所示:
['/home/brentnallt/miniconda3/envs/car_class_nogpu/lib/python3.7', '/home/brentnallt/miniconda3/envs/car_class_nogpu/lib/python3.7/site-packages', '/home/brentnallt/miniconda3/envs/car_class_nogpu/lib/python37.zip', '/home/brentnallt/miniconda3/envs/car_class_nogpu/lib/python3.7/lib-dynload', '.']
使用 Qt Creator 嵌入时有什么特别需要考虑的吗?或者这可能是与设置错误不同的问题?
解决方案
也许您可以考虑使用 PythonQt 作为从 Qt 应用程序调用和导入 python 库的替代模块。
我在我的项目中使用了很多它,它从未失败过,但从未将它与任何类型的数据科学模块一起使用,也许你可以给它一个机会
推荐阅读
- unity3d - 在 Unity3D 中使用 Farseer/Box2D 的 DebugDraw 的最佳方式?
- c# - [TestMethod] 必须是公开的吗?如果不是,会有什么后果?
- python - 在让其他代码运行的同时获取用户输入
- react-native - react-native 应用程序停止在模拟器上工作
- api - Recyclerview 不显示列表项,但灰色背景和文本“android ... RecyclerView”
- vba - 如果单元格大于 95%,则在不同的工作表中更改形状
- pyspark - 如何从模型中获取 InputColumn 名称?
- sql - 在 Serv_from_date 后的 27 天内,我们必须对 serv_unit_cnt 求和
- tox - 如何对所有可用版本的依赖项进行毒物测试?
- python - 如何使用键合并长度不均匀的 2 个数据帧