如何用Meson构建依赖C++模板的Cython模块
用Meson实现Cython封装C++模板生成Python扩展模块
以下是对应你原有setup.py功能的meson.build配置,能生成可直接被Python import的扩展模块:
project('my_cython_module', 'cpp', python: true) # 导入Meson的Python和Cython模块 py = import('python') cython = import('cython') # 获取Numpy的头文件路径,对应setup.py里的np.get_include() numpy_include_dir = py.find_installation().get_variable('numpyincludedir') # 编译Cython文件,指定使用C++语言,对应setup.py的language="c++" cython_source = cython.cython( 'lib_wrapper.pyx', language: 'c++', ) # 构建Python扩展模块,对应setup.py的Extension配置 py.extension_module( 'my_module', # 最终模块名,和原setup.py一致 cython_source, include_directories: [numpy_include_dir], cpp_args: ['-std=c++11', '-O1'], # 对应原extra_compile_args install: true # 可选,安装到Python的site-packages目录 )
构建步骤:
- 在项目根目录创建上述
meson.build文件 - 执行以下命令编译:
mkdir build && cd build meson setup .. ninja
- 编译完成后,
build目录下会生成my_module.so(Linux平台),直接可以在Python中import my_module使用;若要安装到系统Python路径,执行ninja install
注意事项:
你之前参考的示例生成.so.p文件是因为只执行了Cython编译的中间步骤,没有用py.extension_module()将中间产物打包成Python可识别的扩展模块,上述配置补上了这一关键步骤,就能生成可用的模块文件。
内容的提问来源于stack exchange,提问作者Gideon Kogan
相关产品推荐
相关产品推荐

