使用swig 2.0.8和python 3.2,运行
swig -python -modern -py3 -o mymodule_wrap.c mymodule.i生成一个包装文件,该文件具有
# define SWIG_init PyInit__mymodule(注意PyInit和mymodule之间的两个下划线)。
导入失败,错误为
python3 -c "import mymodule"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: dynamic module does not define init function (PyInit_mymodule)(请注意单个下划线)。
手动删除mymodule_wrap.c中的下划线,并在工作模块中重新编译结果。
在这个问题中: python解释器SWIG and Python3 Import Error抱怨找不到PyInit__module。
怎么了?
发布于 2012-09-12 07:39:29
确保扩展模块的名称为_mymodule.pyd,而不是mymodule.pyd。
解释:
给定一个包含声明的SWIG .i文件:
%module mymoduleSWIG将生成两个文件:
通过import mymodule将mymodule.py导入Python,并加载_mymodule.pyd。
mymodule_wrap.c包含一个入口点函数PyInit__mymodule。此源文件必须链接到最终的_mymodule.pyd。
Python的import <module>语句查找:
具有入口点PyInit_<module>.
<module>.py.的
<module>.pyd对于SWIG生成的扩展,import mymodule将加载mymodule.py,它加载_mymodule.pyd并正确查找PyInit__mymodule。
如果使用了错误的扩展名,import mymodule将加载mymodule.pyd并错误地查找PyInit_mymodule。
https://stackoverflow.com/questions/12369131
复制相似问题