不像 Python，Cython 代码必须编译。这分 2 阶段发生：
.pyxfile is compiled by Cython to a
.cfile, containing the code of a Python extension module.
.cfile is compiled by a C compiler to a
.pydon Windows) which can be
import-ed directly into a Python session. Distutils or setuptools take care of this part. Although Cython can call them for you in certain cases.
To understand fully the Cython + distutils/setuptools build process, one may want to read more about distributing Python modules .
There are several ways to build Cython code:
- Write a distutils/setuptools
setup.py. This is the normal and recommended way.
- 使用 Pyximport , importing Cython
.pyxfiles as if they were
.pyfiles (using distutils to compile and build in the background). This method is easier than writing a
setup.py, but is not very flexible. So you’ll need to write a
setup.pyif, for example, you need certain compilations options.
- Run the
cythoncommand-line utility manually to produce the
.pyxfile, then manually compiling the
.cfile into a shared object library or DLL suitable for import from Python. (These manual steps are mostly for debugging and experimentation.)
- 使用 [Jupyter] notebook or the [Sage] notebook, both of which allow Cython code inline. This is the easiest way to get started writing Cython code and running it.
Currently, using distutils or setuptools is the most common way Cython files are built and distributed. The other methods are described in more detail in the 源文件和编译 section of the reference manual.
Imagine a simple “hello world” script in a file
def say_hello_to(name): print("Hello %s!" % name)
The following could be a corresponding
from distutils.core import setup from Cython.Build import cythonize setup(name='Hello world app', ext_modules=cythonize("hello.pyx"))
To build, run
. Then simply start a Python session and do
and use the imported function as you see fit.
One caveat if you use setuptools instead of distutils, the default action when running
is to create a zipped
file which will not work with
files when you try to use them from a dependent package. To prevent this, include
in the arguments to
Cython can be used conveniently and interactively from a web browser through the Jupyter notebook. To install Jupyter notebook, e.g. into a virtualenv, use pip:
(venv)$ pip install jupyter (venv)$ jupyter notebook
To enable support for Cython compilation, install Cython as described in
the installation guide
and load the
extension from within the Jupyter notebook:
Then, prefix a cell with the
marker to compile it:
%%cython cdef int a = 0 for i in range(10): a += i print(a)
You can show Cython’s code analysis by passing the
%%cython --annotate ...
For more information about the arguments of the
编译采用 Jupyter 笔记本