C库的python包装的可维护性

use*_*868 7 python dll ctypes wrapper

我有一个设计不当,大(> 300 public functions,>200 numeric constants与定义#define在头文件),我有在Python包.我有dllh文件.该库每年更新一次,直到现在以向后兼容的方式更新(即添加功能,保持数值等常数).但我无法保证因为我不控制图书馆.

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

  1. 将每个常量和函数映射到python,1到1
  2. 在Python中重新定义API并调用库.

第一个可以从(大致)自动方式从头文件完成,因此更容易维护和升级,第二个需要大量的python代码,但它将更容易使用.

根据您对此类问题的经验和一些示例,我将不胜感激.

小智 4

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

对我来说,效果相当好。它生成 Python 2.x,但我能够通过使用“2to3”实用程序获得所需的 3.x 代码。

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

因此,如果您想做类似的事情,那将是一种方法。