我正在使用Visual在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 文件中。
因此,问题是如何通过Cython或其他实用程序(如pythran、pybind11等)从C++调用python代码(包括来自第三方模块的函数)。
发布于 2021-01-26 14:22:13
在构建在不同语言(大多数情况下是c#)的项目中,我通常所做的工作是通过pyinstaller --onefile script_path编译Python代码,使用Name_of_executable some args从新进程开始编译脚本,并在完成后读取stdout值。我不知道在c++中启动新进程相当于什么,但在c#中,您可以使用System.Diagnostics.Process。Pyinstaller在可执行文件中包含所有模块和导入,我知道这不是最佳实践,但它通常可以工作。
编辑:您可以通过pip install pyinstaller安装pyinstaller
https://stackoverflow.com/questions/65902998
复制相似问题