如何从c++调用Python代码(包括导入的第三方模块)?



我正在使用Visual Studio开发Windows上的程序,并试图从c++调用一些简单的python代码。

我已经尝试过cython,例如,我的.pyx文件看起来像这样:

import torchvision.transforms as transforms
from scipy.interpolate import interp1d
cdef public tf(input):
f = interp1d(..., list(input), kind='cubic')
im = f(...)
tf = transforms.Compose([transforms.Resize((112, 112)), ...)])
return tf(im)

并通过cython xxx.pyx或写入python setup.py将其胞糖化

在我的项目中添加生成的文件和python依赖项后,链接和编译正常,但在运行时,来自第三方模块__pyx_n_s_interp1d符号在__Pyx_GetModuleGlobalName()函数中失败,并且似乎导入的模块未包含在生成的.c文件中。

所以,问题是如何调用python代码(包括来自第三方模块的函数)从c++通过python或其他工具,如pythran, pybind11等

当我在一个基于不同语言(大多数时间是c#)构建的项目中使用Python时,我通常做的是通过pyinstaller --onefile script_path编译Python代码,从Name_of_executable some args的新进程启动编译后的脚本,并在完成时读取stdout值。我不知道在c++中启动一个新进程相当于什么,但是在c#中你可以使用System.Diagnostics.Process。Pyinstaller包含可执行文件中的所有模块和导入,我知道这不是最佳实践,但它通常工作。

编辑:你可以通过pip install pyinstaller

安装pyinstaller

最新更新