我有以下包结构:
+ 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代码。有没有人有我可以效仿的好例子,或者有人可以告诉我我做错了什么?
提前致谢!
答案 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模块导入。