名称空间/包名称与Python的C扩展名

2024-05-08 15:18:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习/试验C语言中的Python扩展。我试图包装一个C库,以便它可以用一种更Python的方式使用。例如:

import mylib

widget = mylib.widget.Widget(name="Hello!")
widget.show()

mylib.utils.say_hello()

在C代码中,传递给PyModule_Create的模块名是“mylib”mylib.widget“,和”mylib.utils公司“分别说。mylib.widget模块还包括一个新的Widget类型。在

但是,我似乎不知道如何让这些扩展使用那种包/名称空间的风格来安装。我试过了:

^{pr2}$

但这行不通。”mylib没有名为widget的模块。在

C扩展通常是如何打包/分发的?在


Tags: 模块代码nameimporthelloshowcreate方式
1条回答
网友
1楼 · 发布于 2024-05-08 15:18:52

哇,伙计。扩展可以有子模块,但您可能必须在C init()函数中定义它们;正如您所看到的,distutils在这个概念上放弃了幽灵。我会做这样的事情:

from distutils.core import setup,Extension

setup(
  packages = ['package_name'],
  ext_modules = [
    Extension('package_name.widget',sources=['src/widget.c']),
    Extension('package_name.utils',sources=['src/utils.c'])
  ]
)

然后让你的文件布局是:

^{pr2}$

这样,*.so文件(在windows上是*.pyd)将最终位于python站点包中的package_name/目录中。在

相关问题 更多 >