编写具有多个C模块的Python包

Ano*_*ody 11 python module organization

我正在编写一个使用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'])
Run Code Online (Sandbox Code Playgroud)

所以当我调用:setup(name ="Some Human Readable Name,Right?",ext_modules = [main_mod])我可以将其他模块添加到ext_modules列表但是我将第一个参数传递给'Extension'?我是否使用像'mypackage.submodule'这样的点分隔字符串?

更一般地说,如何组织具有多个子模块的C扩展?如果有人能指出一些易于阅读和理解的源代码,那就太棒了.非常感谢!

mit*_*ndi 14

我认为最简单的方法是在"纯python"中创建包; 换句话说,创建mypackage/,创建一个空mypackage/__init__.py,然后将您的扩展模块放在mypackage/module1.so,mypackage/module2.so等等.

如果你想要的东西mypackage而不是它是空的,你可以从你的另一个扩展模块导入它们__init__.py.