Cython编译C扩展:ImportError:动态模块没有定义init函数

Hom*_*lli 44 python cython python-extensions

我刚刚使用Cython将我的C库的一部分编译为扩展,作为"概念证明".我设法破解了代码(const纠正问题等),最终得到了一个扩展.

但是,当我尝试导入新创建的扩展时,我收到以下错误:

ImportError: dynamic module does not define init function 
Run Code Online (Sandbox Code Playgroud)

我做错了什么,如何解决这个问题?

我在Ubuntu 10.0.4上使用Cythn 0.11.2和Python 2.6.5

Dol*_*gan 69

我发现这个问题的一个常见原因是,当使用distutils安装文件来编译代码时,.pyx基本名称与扩展名不匹配,例如:

ext = Extension(name='different', sources=['cython_ext.pyx']) # Won't work
Run Code Online (Sandbox Code Playgroud)

为了避免这个问题,在这种情况下,扩展名应该完全相同cython_ext.

  • @Dologan,谢谢,它有帮助!我想让你的答案更完整:`name` 可以像 `make.something.useful.cython_ext` 一样嵌套。重点是模块名称(最后一点之后的单词)应该与源文件的名称相同。我想,在你的答案中加入这样积极的例子会很有帮助。 (2认同)

小智 27

看起来它是Cython中的一个bug /功能.我有同样的事情,但只是添加:

STUFF = "Hi"
Run Code Online (Sandbox Code Playgroud)

到我的.pyx文件的顶部,问题消失了.如果没有全局初始化(cinit或设置全局变量),则表示不生成所需的初始化代码.

  • 哇.我无法相信它确实有效,但它修复了我的库中的相同错误. (4认同)
  • 这也对我有用。 (2认同)