具有Scikit-build的Cython:动态模块未定义模块导出功能

时间:2020-06-18 14:27:33

标签: python c++ c cython

我一直在使用scikit-build-sample-projects中的cython hello world示例进行一些测试,并注意到,如果我更改了CMakeLists.txt中的某些文件的名称及其对应的字段,则编译可以正常进行,但尝试时结果,可能会出现以下错误:

对于python3:ImportError: dynamic module does not define module export function (PyInit_...

对于python2:ImportError: dynamic module does not define module export function (Init_...

并深入研究c++ file,我发现了这些部分:

#if PY_MAJOR_VERSION < 3
PyMODINIT____FUNC init_hello(void)
{
  (void) Py_InitModule("_rectangle", hello_methods);
}
#else /* PY_MAJOR_VERSION >= 3 */
static struct PyModuleDef hello_module_def = {
  PyModuleDef_HEAD_INIT,
  "_rectangle",
  "Internal \"_rectangle\" module",
  -1,
  hello_methods
};

PyMODINIT_FUNC PyInit__rectangle(void)
{
  return PyModule_Create(&hello_module_def);
}
#endif /* PY_MAJOR_VERSION >= 3 */

如果我将“ _hello”部分更改为我定义的新名称,则项目将再次正常工作。

现在,由于上述原因,我想尝试original Cython's rectangle class example,但不确定如何使其工作。在我看来,我应该更改矩形的C ++代码。

考虑到上述问题,有人知道我们如何使用scikit构建来重现Cython的矩形示例吗?

0 个答案:

没有答案