八年后回答这个问题,这就是我在 Ubuntu 19.10 上使用来自 Ubuntu 存储库的系统 CPython vesion 3.7.5 和 Cython3 版本 0.29.10 的方法。
有关纯 Python 模式的 Cython 文档给出了一个有效的示例。它看起来与此处旧答案中的示例有些不同,所以我猜该文档已经更新了。
Python 文件需要条件导入,使用普通 CPython 可以正常工作:
#!/usr/bin/env python3
# from: https://cython.readthedocs.io/en/latest/src/tutorial/pure.html
# mymodule.py
import cython
# override with Python import if not in compiled code
if not cython.compiled:
from math import sin
# calls sin() from math.h when compiled with Cython and math.sin() in Python
print(sin(0.5))
Cython 语言结构必须放在同名但后缀为“.pxd”的文件中:
#cython: language_level=3
# from: https://cython.readthedocs.io/en/latest/src/tutorial/pure.html
# mymodule.pxd
# declare a C function as "cpdef" to export it to the module
cdef extern from "math.h":
cpdef double sin(double x)
我使用“--embed”选项为独立的 Linux ELF 可执行文件创建 C 代码来测试它。GCC 编译器行需要“-lm”来导入包含 sin 的数学模块。
cython3 --embed mymodule.py
gcc -o mymodule mymodule.c -I/usr/include/python3.7 -lpython3.7m -lm