【问题标题】:Writing Python packages with multiple C modules使用多个 C 模块编写 Python 包
【发布时间】:2010-02-02 15:29:57
【问题描述】:

我正在编写一个使用 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 扩展?如果有人可以向我指出一些易于阅读和理解的源代码,那就太好了。非常感谢!

【问题讨论】:

    标签: python module organization


    【解决方案1】:

    我认为最简单的方法是在“纯 python”中创建包;也就是说,创建mypackage/,创建一个空的mypackage/__init__.py,然后将你的扩展模块放在mypackage/module1.somypackage/module2.so,等等。

    如果您想要 mypackage 中的内容而不是空的,您可以从 __init__.py 中的另一个扩展模块导入它们。

    【讨论】:

      【解决方案2】:

      我不确定我是否明白你想要什么。但是有一种命名空间 Python 包。您可以将模块放在不同的位置,但它们都共享相同的包名。这里可以参考这个问题How do I create a namespace package in Python?

      【讨论】:

        猜你喜欢
        • 2020-11-27
        • 2021-12-16
        • 2012-06-21
        • 2020-11-25
        • 1970-01-01
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        相关资源
        最近更新 更多