Cython compiled C extension: ImportError: dynamic module does not define init function

前端 未结 8 1418
盖世英雄少女心
盖世英雄少女心 2020-12-12 23:48

I have just compiled part of my C library as an extension using Cython, as a \"proof of concept\". I managed to hack the code (const correctnes problems etc aside), to final

相关标签:
8条回答
  • 2020-12-13 00:22

    This is a very late answer - but I just had the same error, and mine went away when I used __cinit__ instead of __init__. I'm still learing about extension types so currently I do not know why this happens. :) (You can take a look at http://docs.cython.org/src/reference/extension_types.html#initialization-cinit-and-init) Hope this is useful to someone.

    0 讨论(0)
  • 2020-12-13 00:22

    This is solved by adding a doc-string to your functions.

    0 讨论(0)
  • 2020-12-13 00:24

    I solve it by

    def cinit(self): pass
    

    Hope it helps.

    0 讨论(0)
  • 2020-12-13 00:27

    Another really late answer in my case I had accidentally called cython in a terminal that was running python2, while trying to use the generated library from a terminal that was on another python environment, using python3.

    Using the same python version everywhere fixed it.

    0 讨论(0)
  • 2020-12-13 00:28

    It appears that it's a bug/feature in Cython. I had the same thing, but simply added:

    STUFF = "Hi"
    

    to the top of my .pyx file and the issue went away. It appears if there is no global initialization (a cinit or setting a global variable), that the required initialization code isn't generated.

    0 讨论(0)
  • 2020-12-13 00:34

    Likewise a late answer... but I kept finding my way back to this question in particular. It probably is related to the mismatched names issue that Dologan addresses.

    What happened in my case was that I was adapting an example I'd gotten to work, and got the module does not define init function error. This was verified by using (e.g.)

    nm -m build/lib.macosx-10.9-x86_64-2.7/myproj.so

    In this command's output I searched for 'init' and found

    000000000000c0d0 (__TEXT,__text) external _initexample

    I had removed all instances of 'example' from my setup.py and .pyx file, but this persisted even after removing the extension from site-packages, removing the build and dist folders, etc. I finally found that the .cpp file being generated from my .pyx file was still referring to the class name in the example. Once I reran my setup.py, import works, and indeed the .so file includes

    000000000000c0a0 (__TEXT,__text) external _initmyproj

    0 讨论(0)
提交回复
热议问题