[英]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 庫的替代模塊。
我在我的項目中經常使用它,它從未失敗過,但從未將它與任何數據科學模塊一起使用,也許你可以給它一個機會
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.