繁体   English   中英

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

[英]How to call Python code (including third-party modules imported) from C++?

我正在使用 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() function 中失败,并且似乎导入的模块没有包含在生成的.c文件中。

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

当我在基于不同语言的项目中使用 Python 时(大部分时间是 c#),我通常会做的是通过pyinstaller --onefile script_path编译 python 代码,从一个新进程启动编译脚本,其中包含Name_of_executable some args和完成后读取标准输出值。 我不知道在 c++ 中启动新进程的等价物,但在 c# 中,您可以使用 System.Diagnostics.Process。 Pyinstaller 在可执行文件中包含所有模块和导入,我知道这不是最佳实践,但它通常可以工作。

编辑:您可以通过pip install pyinstaller

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM