嵌套的Python C扩展/模块?

时间:2009-11-05 15:27:52

标签: python distutils python-c-api

如何编译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

1 个答案:

答案 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 *的极少数合法用途之一; - )。

相关问题