SWIG和Python3导入错误

Seb*_*ian 5 python swig python-3.x

我用C编写了一个库.我使用SWIG为Java,Python等生成绑定.我设法为两种语言编写自定义类型映射等等.我还设法使用我的库(一个自定义协议)并与我在C中编写的服务器进行通信,使用我用Java编写的客户端,以及我用Python编写的客户端.

最近,我遇到了一个多重继承问题,我找到了一个聪明的解决方案.但是,当尝试使用Python 3复制错误时,错误消失了(可能在版本3中解决了).事实是,相同的代码,相同的项目和相同的源将不会运行调用python3二进制文件,但它可以调用python2.7二进制文件.

我收到消息:

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

我已经阅读了SWIG文档可能意味着什么,但错误略有不同:

import example
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: dynamic module does not define init function (init_example)
Run Code Online (Sandbox Code Playgroud)

说:

当为共享对象文件指定错误名称时,几乎总是会导致此错误.例如,如果您创建了一个文件example.so而不是_example.so,则会出现此错误.或者,如果模块的名称与%module指令提供的模块名称不一致,则可能会出现此错误.仔细检查接口以确保模块名称和共享对象文件名匹配.导致此错误的另一个可能原因是在创建扩展模块时忘记将SWIG生成的包装器代码与应用程序的其余部分链接起来.

老实说,我认为这个可能的原因不适用于我的模块,因为它应该是2.7和3版python的错误,而不仅仅是Python 3.

我很感激任何建议,但考虑到SWIG似乎是一个过时的项目,我可能会继续使用Python 2.7与提到的"黑客".

最好的祝福,

Len*_*bro 3

生成的 C 模块是否PyInit__pytellapic定义了函数?

名称和配置文件(如果模块 init 方法在 Python 3 中已更改)。如果您希望完全相同的 C 代码在 Python 2 和 Python 3 下运行,则必须同时包含旧名称和新名称。有关详细信息,请参阅“迁移 C 扩展”一章。

根据SWIG 的文档,如果传递 -py3 参数,SWIG 2.0 应该执行此操作,但我还没有尝试过。