我有以下包结构:
+ 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/