【问题标题】:Nested Python C Extensions/Modules?嵌套的 Python C 扩展/模块?
【发布时间】:2010-12-13 11:15:41
【问题描述】:

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

【问题讨论】:

    标签: python distutils python-c-api


    【解决方案1】:

    指令是here:

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

    描述了一个存在于 根包,而

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

    在 pkg 包。源文件和 生成的目标代码是相同的 两种情况;唯一的区别是 在文件系统中的位置(因此 在 Python 的命名空间层次结构中的位置) 由此产生的扩展寿命。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-01
      • 2019-05-29
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2019-12-29
      相关资源
      最近更新 更多