[英]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.