Python和SWIG - 单个.pyd(.so)中的多个模块

时间:2011-11-14 20:49:51

标签: python module swig pyd

我正在使用SWIG编写Python的C ++扩展。根据我对Python和SWIG的理解,每个模块都必须有自己的.pyd文件。例如,如果我有一个名为'mymodule'的模块,那么应该有一个相应的'_mymodule.pyd'文件。

在我的特定情况下,我希望只有一个'pyd'文件和多个模块链接到它。

mypackage/
mypackage/__init__.py
mypackage/module1.py
mypackage/module2.py

我不想保持倍数.pyd,所以我可以将我的接口(.i)文件全部放在VS2010中的同一个项目下。

编辑:到目前为止,我能够使其工作的唯一方法是将我的'pyd'文件复制到两个新文件中:_module1.pyd和_module2.pyd。但我不喜欢这个解决方案,因为我需要不必要地复制30 Mo的'pyd'文件。我希望模块链接到一个'_package.pyd'文件。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:0)

最后,最简单的方法和“正确”的方法是创建多个项目,只调用大型整体项目的一些暴露部分。 SWIG将解析较小的项目以创建Python模块。像魅力一样。

答案 1 :(得分:0)

我的解决方案使用python ctypes模块遇到同样的问题

spclient_python.pyd是一个具有两个init函数的pydll,其中一个正式的initspclient_python作为dll名称,另一个模块称为具有initexample函数的example。 python中的每个模块在dll中都有一个对应的initXXXXXXX函数。

from ics import Calendar, Event