不像 Python,Cython 代码必须编译。这分 2 阶段发生:
.pyx
文件通过 Cython 编译成
.c
文件,包含 Python 扩展模块代码。
.c
文件由 C 编译器编译成
.so
文件 (或
.pyd
在 Windows) 可以
import
直接进 Python 会话。distutils 或 setuptools 处理这部分。尽管 Cython 在某些情况下可以调用它们。
要完全理解 Cython + distutils/setuptools 的构建过程,可能想要阅读更多有关 分发 Python 模块 .
有几种方式能构建 Cython 代码:
setup.py
。这是正常和推荐方式。
.pyx
文件,就好像它们是
.py
文件 (使用 distutils 在后台编译和构建)。此方法更容易比编写
setup.py
,但不是很灵活。因此需要编写
setup.py
例如,若需要某些编译选项。
cython
命令行实用程序手动产生
.c
文件从
.pyx
文件,然后手动编译
.c
文件适合从 Python 导入的共享对象库或 DLL (这些手动步骤主要用于调试和实验)。
目前,使用 distutils 或 setuptools 是构建和分发 Cython 文件的最常见方式。其它方法地更详细描述在 源文件和编译 章节对于参考手册。
想象简单 hello world 脚本在文件
hello.pyx
:
def say_hello_to(name): print("Hello %s!" % name)
以下是相应的
setup.py
脚本:
from distutils.core import setup from Cython.Build import cythonize setup(name='Hello world app', ext_modules=cythonize("hello.pyx"))
要构建,运行
python
setup.py
build_ext
--inplace
。然后只需启动 Python 会话并执行
from
hello
import
say_hello_to
并使用导入函数如您认为合适。
告诫,若使用 setuptools 而不是 distutils,默认动作当运行
python
setup.py
安装
是创建压缩
egg
文件不会工作采用
cimport
for
pxd
文件当试着从依赖包使用它们时。为阻止这种情况,包括
zip_safe=False
在自变量到
setup()
.
Cython 可以通过 Jupyter 笔记本从 Web 浏览器方便且交互使用。要安装 Jupyter 笔记本 (如:要安装到 virtualenv),使用 pip:
(venv)$ pip install jupyter (venv)$ jupyter notebook
要启用 Cython 编译支持,安装 Cython 的描述在
安装指南
和加载
Cython
扩展从 Jupyter 笔记本内:
%load_ext Cython
然后,前缀单元采用
%%cython
标记来编译它:
%%cython cdef int a = 0 for i in range(10): a += i print(a)
可以展示 Cython 的代码分析通过传递
--annotate
选项:
%%cython --annotate ...
自变量的更多有关信息,对于
%%cython
魔法,见
编译采用 Jupyter 笔记本
.
对于 Sage 数学分发用户,Sage 笔记本允许透明地编辑和编译 Cython 代码,只需通过键入
%cython
在单元顶部并评估它。变量和函数的定义在导入进运行会话的 Cython 单元中。
| [Jupyter] | http://jupyter.org/ |
| [Sage] |
|