如何编译C-Python模块,使其成为另一个模块的本地模块?例如。如果我有一个名为“bar”的模块和另一个名为“mymodule”的模块,如何编译“bar”以便通过“import mymodule.bar”导入?
(对不起,如果措辞不当,我不确定它的正确用语是什么。)
我在setup.py中尝试了以下操作,但它似乎不起作用:
from distutils.core import setup, Extension
setup(name='mymodule',
version='1.0',
author='Me',
ext_modules=[Extension('mymodule', ['mymodule-module.c']),
Extension('bar', ['bar-module.c'])])
修改
谢谢Alex。所以这就是我最终使用的:
from distutils.core import setup, Extension
PACKAGE_NAME = 'mymodule'
setup(name=PACKAGE_NAME,
version='1.0',
author='Me',
packages=[PACKAGE_NAME],
ext_package=PACKAGE_NAME
ext_modules=[Extension('foo', ['mymodule-foo-module.c']),
Extension('bar', ['mymodule-bar-module.c'])])
当然还有一个名为“mymodule”的文件夹,其中包含__init__.py
。
答案 0 :(得分:3)
说明为here:
扩展('foo',['src / foo1.c', 'SRC / foo2.c'])
描述了一个存在的扩展 根包,而
扩展名('pkg.foo',['src / foo1.c', 'SRC / foo2.c'])
描述了相同的扩展名 pkg包。源文件和 结果对象代码相同 两种情况;唯一的区别是 在文件系统中的位置(因此 Python的命名空间层次结构中的位置) 由此产生的延长寿命。
请记住,包始终是包含模块__init__
的目录(或zipfile)。要创建一个包体的模块,该模块将被称为__init__
并存在于包的目录(或zipfile)下。我在C中从未这样做过;如果它无法直接执行,请将模块命名为_init
代替__init__.py
执行from _init import *
from ... import *
的极少数合法用途之一; - )。