Python 包 Cython 模块

标签 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 代码。有没有人有任何我可以效仿的好例子,或者有人可以告诉我我做错了什么?

提前致谢!

最佳答案

给 cythonize 的名称是 Cython 将用来调用模块的名称以及必须导入的名称。

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

这是一个如何做到这一点的例子:

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 模块导入。

关于Python 包 Cython 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45049979/

相关文章:

python - 如何在python中编写一个函数来添加相应字母的整数?

c - 为什么(以及何时)我需要在 sizeof 之后使用括号?

go - 用于多个 go 包的包绑定(bind)资源使用

node.js - 我可以从全局安装的软件包访问本地安装的软件包吗?

Python Pandas : Convert 2, 000,000 DataFrame 行到二进制矩阵 (pd.get_dummies()) 没有内存错误?

python - 使用 python 多处理时,mysql 得到不同的结果

Python 不会覆盖 777 文件

c - 在C中从文件到文件的读取和写入

c - stm32f4发现CAN发送

templates - 模板需要比项目包含的脚本版本更新的脚本版本