swig和python3:盈余下划线

时间:2012-09-11 11:54:53

标签: swig python-3.2

使用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中的下划线并重新编译工作模块中的结果。

在这个问题中:SWIG and Python3 Import Error python翻译抱怨没有找到PyInit__module

怎么了?

1 个答案:

答案 0 :(得分:4)

确保扩展模块的名称为_mymodule.pyd而不是mymodule.pyd

说明:

给定包含声明的SWIG .i文件:

%module mymodule

SWIG将生成两个文件:

  • mymodule.py
  • mymodule_wrap.c

mymodule.py已通过import mymodule导入到Python中并加载_mymodule.pyd

mymodule_wrap.c包含入口点函数PyInit__mymodule。此源文件必须链接到最终_mymodule.pyd

Python的import <module>语句查找:

  1. <module>.pyd,带有切入点PyInit_<module>
  2. <module>.py
  3. 对于SWIG生成的扩展程序,import mymodule将加载mymodule.py,加载_mymodule.pyd并正确查看PyInit__mymodule

    如果使用了错误的扩展名,import mymodule将加载mymodule.pyd并且PyInit_mymodule的内容不正确。