簡體   English   中英

在 Qt Creator 項目中嵌入 Python

[英]Embedding Python in a Qt Creator project

我正在開發一個需要 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 庫的替代模塊。

我在我的項目中經常使用它,它從未失敗過,但從未將它與任何數據科學模塊一起使用,也許你可以給它一個機會

https://mevislab.github.io/pythonqt/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM