我正在编写一个使用 pygame C API 的 Python C 扩展。到目前为止,一切都很好。现在我想知道如何组织我的源代码,以便我可以在包中包含多个子模块。那里的所有教程都集中在一个 .c 文件扩展名上。我尝试查看一些项目 setup.py 文件,但它们的复杂性让我大吃一惊,而且我看不到树木的森林。
基本上,我有一个扩展名,比如 MyExt。MyExt 有全局函数,3 种类型。如何组织 PyMethodDef 列表?我必须将所有这些都放在一个列表中吗?或者,我注意到您传递给 setup 函数的 Extension 对象实际上是一组模块,那么我如何命名模块以便它们都在一个包下并且可以互相看到?
我的 setup.py:
main_mod = Extension('modname',
include_dirs = ['C:\Libraries\Boost\include',
'C:\Libraries\SDL\include',
'C:\Libraries\SDL_image\include'],
libraries = ['libSDL',
'SDL_image'],
library_dirs = ['C:\Libraries\SDL\lib',
'C:\Libraries\SDL_image\lib'],
sources = ['main.cpp',
'Object1.cpp',
'Object2.cpp',
'Etcetera.cpp'])
因此,当我调用: setup(name = "Some Human Readable Name, Right?", ext_modules = [main_mod]) 我可以将其他模块添加到 ext_modules 列表中,但是我应该将什么作为第一个参数传递给“扩展”?我是否使用像“mypackage.submodule”这样的点分隔字符串?
更一般地说,如何组织具有多个子模块的 C 扩展?如果有人可以向我指出一些易于阅读和理解的源代码,那就太好了。非常感谢!