一个C库的python包装的可维护性

我有一个设计不好的大型( > 300 public functions ,在头文件中用#define定义的>200 numeric constants ),我必须用Python进行封装。 我有dllh文件。 该库每年更新一次,直到现在以向后兼容的方式(即只添加了函数,常量保持它们的数值等)。 但我没有保证,因为我不控制图书馆。

使用ctypes ,我看到了两种用Python包装的方法:

  • 将每个常量和函数映射到python,1到1
  • 用Python重新定义API并调用库。
  • 第一个可以通过头文件(大致)自动的方式完成,因此更容易维护和升级,第二个需要大量的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

    上一篇: Maintainability of a python wrapping of a C library

    下一篇: Can ORM ODB for C++ generate code from a database