2012-10-07 76 views
7

的蟒包裹的我有一个设计不当,大(> 300 public functions>200 numeric constants与在头文件#define定义),我在Python来包裹。我有dllh文件。该库每年更新一次,直到现在以向后兼容的方式(即只添加了函数,常量保持它们的数值等)。但我没有保证,因为我不控制图书馆。可维护性一个C库

使用​​,我看到在Python包装这两种方式:

  1. 映射每一个常数和功能蟒蛇,1比1
  2. 重新定义在Python的API,使该库调用。

第一可在从报头文件中的(大致)自动方式来完成,因此更容易维护和升级,第二需要大量的Python代码但是这将是更容易使用。

根据你对这类问题的经验和一些例子,我将不胜感激。

+0

对不起,但这是好,它不是一个真正的问题。 –

+3

看看SWIG。 –

+0

[SIP](http://pypi.python.org/pypi/SIP/4.14)可能是一个有趣的解决方案。 –

回答

4

我最近使用ctypesgen为SDL和补充库(SDL_image,SDL_ttf,SDL_mixer)创建了ctypes包装。

对我来说,它工作得很好。它生成Python 2.x,但我可以通过使用“2to3”实用程序来获得所需的3.x代码。

我认为使用ctypes包装作为更“pythonic”api的基础是一个不错的主意,这基本上就是我用我的pslab模块做的(在一个非常简单的层面上)。

所以,如果你想要做类似的事情,那将是一种方法。

0

维护带有ctypes后端的Python库不是一个难以管理的方法。很明显,初始投资比使用自动化工具要大,但您留下的API应该更好。

如果你确实采取了这样的路线,尽管将Python API完全从C库中分离出来。用一个Python前端api支持多个ctypes后端并不算太坏 - 只是在运行时查询并动态加载正确的ctypes包装模块。我已经完成了为windows和linux打包不同的dll文件和.so文件,但它也适用于库的版本。