首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swig和python3:剩余下划线

问swig和python3:剩余下划线
EN

Stack Overflow用户
提问于 2012-09-11 19:54:53
回答 1查看 2.7K关注 0票数 4

使用swig 2.0.8和python 3.2,运行

代码语言:javascript
复制
swig -python -modern -py3 -o mymodule_wrap.c mymodule.i

生成一个包装文件,该文件具有

代码语言:javascript
复制
#  define SWIG_init    PyInit__mymodule

(注意PyInit和mymodule之间的两个下划线)。

导入失败,错误为

代码语言:javascript
复制
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。

怎么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-12 07:39:29

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

解释:

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

代码语言:javascript
复制
%module mymodule

SWIG将生成两个文件:

  • mymodule.py
  • mymodule_wrap.c

通过import mymodule将mymodule.py导入Python,并加载_mymodule.pyd。

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

Python的import <module>语句查找:

具有入口点PyInit_<module>.

  • <module>.py.

的

  1. <module>.pyd

对于SWIG生成的扩展,import mymodule将加载mymodule.py,它加载_mymodule.pyd并正确查找PyInit__mymodule。

如果使用了错误的扩展名,import mymodule将加载mymodule.pyd并错误地查找PyInit_mymodule。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12369131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档