例如:
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类型。
但是,我似乎不知道如何让这些扩展与包/名称空间样式一起安装。我试过了:
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扩展通常是如何打包/分发的?
发布于 2013-09-18 12:13:04
扩展可以有子模块,但您可能必须在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'])
]
)然后将您的文件布局设置为:
ROOT/
| -- setup.py
| -- src/
| | -- widget.c
| | -- utils.c
| -- package_name/
| | -- __init__.py
| | -- (other python files)这样,您的*.so文件(或windows上的*.pyd )将最终保存在python站点包中的package_name/目录中。
https://stackoverflow.com/questions/16002522
复制相似问题