是否可以在同一名称空间中混合使用C和Python?

时间:2012-08-15 09:16:40

标签: python distutils

我想编写一个Python包来包装一个我正在编写的新C库 - 说实话,这是一个学习练习。我想调用库spam(当然),C库的结构是这样的。

Spam/
    lib/
        foo.c
        Makefile
        libspam.a   /* Generated by Makefile */
        libspam.so  /* Generated by Makefile */

假设foo.c提供了一个公共函数foo(char * bar)。同时,我想提供一个Python包。我想在同一名称空间下为foo和另一个函数(例如safe_foo)提供一个包装器。 safe_foo Python 函数,它会对bar执行一些检查,然后调用foo。可以像这样调用它们

import spam

file='hello.txt'
foo(file)
safe_foo(file)

这可能吗?

类似的情况是我开发了一个Python包,然后想要在不破坏API的情况下将一个函数重新实现为C函数。

你或许可以看到我对Python打包有点新意了......

1 个答案:

答案 0 :(得分:2)

通常的做法是在C模块前加下划线(例如_foo.so),然后让Python模块正常命名(例如foo.py)。 foo执行_foo的导入,并包含调用C模块中函数的存根。