Python包Cython模块

时间:2017-07-12 06:27:53

标签: python c package cython

我有以下包结构:

+ repo/
+ setup.py
+ package/
    + module1/
        + submodule1.py
        + submodule2.pyx
    + module2/
        + submodule3.py

我想通过以下方式使用submodule1.py中的submodule2.pyx:

import submodule2

但我完全不知道该怎么做。我尝试将以下行添加到我的setup.py:

from distutils.core import setup
from setuptools import setup
from Cython.Distutils import build_ext

ext_modules = cythonize(Extension(
        "zindex",
        sources=["ndmg/graph/zindex.pyx"],
        language="c",
))
for e in ext_modules:
    e.pyrex_directives = {"boundscheck": False}

setup(
    name='ndmg',
    ext_modules = ext_modules,
    packages=[
        'package',
        'package.module1',
    ....
)

但没有成功。我能找到的所有教程都有非常简单的示例,所以我不知道如何在我的python包中包含Cython模块,而其余的包只是普通的python代码。有没有人有我可以效仿的好例子,或者有人可以告诉我我做错了什么?

提前致谢!

1 个答案:

答案 0 :(得分:3)

cythonize的名称是Cython用于调用模块的名称以及将要导入的内容。

上面的setup.py将生成一个名为zindex的原生扩展,即使在zindex包中的python文件中也必须导入为import zindex

以下是如何执行此操作的示例:

from distutils.core import setup
from setuptools import setup
from Cython.Distutils import build_ext

ext_modules = cythonize(Extension(
        "ndmg.graph.zindex",
        sources=["ndmg/graph/zindex.pyx"],
        language="c",
))
<..>

构建并安装扩展程序。

在ndmg / graph / py_index.py下的python文件中,您可以这样做。

from zindex import <..>

从cython模块导入。