7

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

编辑

谢谢亚历克斯。所以这就是我最终使用的:

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.

4

1 回答 1

5

说明在这里

扩展('foo', ['src/foo1.c', 'src/foo2.c'])

描述存在于根包中的扩展,而

扩展('pkg.foo', ['src/foo1.c', 'src/foo2.c'])

在 pkg 包中描述了相同的扩展。在这两种情况下,源文件和生成的目标代码是相同的;唯一的区别是生成的扩展在文件系统中的哪个位置(以及 Python 的命名空间层次结构中的哪个位置)。

请记住,包始终是包含模块的目录(或 zip 文件)__init__。要创建一个作为包体的模块,该模块将被调用__init__并位于包的目录(或 zipfile)下。我从来没有在 C 语言中这样做过;如果直接执行它不起作用,请命名模块,例如_init,然后在__init__.py执行( ;-)from _init import *的极少数合法用途之一。from ... import *

于 2009-11-05T15:57:28.213 回答