pybind11 解释器使用捆绑的 python 可执行文件

pybind11 interpreter use bundled python executable

我在 C++ 应用程序中使用 pybind11 解释器。不幸的是,由于遗留原因,我不使用 CMake 而是使用 qmake 进行构建。因此,我很难理解如何正确设置 pybind11 解释器。 C++ 应用程序将随附 python 3.7(因此 Mac 应用程序包将随 python.framework)

解释器应该使用捆绑的 python (MyApp.app/Contents/Frameworks/Python.framework/Versions/Current/Python) 但是当打印 sys.exec_prefix 它总是回退到它发现安装的任何东西,所以在我的例子中: /Library/Frameworks/Python.framework/Versions/3.9/Python

我的 .pro 设置如下所示:

QMAKE_LFLAGS += -F/$$PWD/../3rdParty/python
LIBS += -framework Python

INCLUDEPATH += $$PWD/../3rdParty/python/Python.framework/Versions/3.7/include/python3.7m
DEPENDPATH += $$PWD/../3rdParty/python/Python.framework/Versions/3.7/include/python3.7m

我如何告诉 pybind11 / 我的可执行文件使用什么 python 可执行文件和环境?不应强制目标用户安装 python 到 运行 我的应用程序

我必须将 PYTHONHOME 设置为 MyApp.app/Contents/Frameworks/Python.framework/Versions/3.7

PYTHONPATHMyApp.app/Contents/Frameworks/Python.framework/Versions/3.7/lib/python3.7

在 Qt 中,我通过在 py::scoped_interpreter guard{};

之前调用 qputenv 来做到这一点