首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python的C扩展的命名空间/包名称

使用Python的C扩展的命名空间/包名称
EN

Stack Overflow用户
提问于 2013-04-15 02:09:17
回答 1查看 368关注 0票数 1

例如:

代码语言:javascript
复制
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类型。

但是,我似乎不知道如何让这些扩展与包/名称空间样式一起安装。我试过了:

代码语言:javascript
复制
from distutils.core import setup, Extension

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

但这并不管用。"mylib没有名为widget的模块“。

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

EN

回答 1

Stack Overflow用户

发布于 2013-09-18 12:13:04

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

代码语言:javascript
复制
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'])
  ]
)

然后将您的文件布局设置为:

代码语言:javascript
复制
ROOT/
 | -- setup.py
 | -- src/
 |     | -- widget.c
 |     | -- utils.c
 | -- package_name/
 |     | -- __init__.py
 |     | -- (other python files)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16002522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档