一个C库的python包装的可维护性
我有一个设计不好的大型( > 300 public functions
,在头文件中用#define
定义的>200 numeric constants
),我必须用Python进行封装。 我有dll
和h
文件。 该库每年更新一次,直到现在以向后兼容的方式(即只添加了函数,常量保持它们的数值等)。 但我没有保证,因为我不控制图书馆。
使用ctypes
,我看到了两种用Python包装的方法:
第一个可以通过头文件(大致)自动的方式完成,因此更容易维护和升级,第二个需要大量的Python代码,但它会更容易使用。
根据你对这类问题的经验和一些例子,我将不胜感激。
我最近使用ctypesgen为SDL创建了ctypes包装,并使用了补充库(SDL_image,SDL_ttf,SDL_mixer)。
对我来说,它工作得很好。 它生成Python 2.x,但我可以通过使用“2to3”实用程序来获得所需的3.x代码。
我认为使用ctypes包装作为更“pythonic”api的基础是一个不错的主意,这基本上就是我用pslab模块所做的(在一个非常简单的层面上)。
所以,如果你想要做类似的事情,那将是一种方法。
用ctypes后端维护一个Python库不是一个难以管理的方法。 很明显,初始投资比使用自动化工具要大,但您留下的API应该更好。
如果你确实采取了这样的路线,尽管可以完全从C库中分离出Python API。 用一个Python前端api支持多个ctypes后端并不算太坏 - 只是在运行时查询并动态加载正确的ctypes包装模块。 我已经完成了为windows和linux打包不同的dll文件和.so文件,但它也适用于库的版本。
链接地址: http://www.djcxy.com/p/64477.html