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.