Mic*_*ael 6 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'])])
Run Code Online (Sandbox Code Playgroud)
编辑
谢谢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'])])
Run Code Online (Sandbox Code Playgroud)
当然还有一个名为"mymodule"的文件夹__init__.py.
说明在这里:
扩展名('foo', ['src/foo1.c', 'src/foo2.c'])
描述位于根包中的扩展,而
扩展名('pkg.foo', ['src/foo1.c', 'src/foo2.c'])
在 pkg 包中描述了相同的扩展。在这两种情况下,源文件和生成的目标代码是相同的;唯一的区别是生成的扩展在文件系统中的哪个位置(因此在 Python 的命名空间层次结构中的哪个位置)。
请记住,包始终是一个包含模块的目录(或 zipfile)__init__。要创建一个作为包主体的模块,该模块将被调用__init__并位于包的目录(或 zipfile)下。我从来没有在 C 中这样做过;如果直接执行它不起作用,则将模块命名为例如_init,然后__init__.py执行from _init import *(极少数合法用途之一from ... import *;-)。
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |