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