当完成一个pxd,pyx的文件编写之后,下一步就是需要编译Cython,生成pyd供Python调用。本节讲如何编译。如果需要了解非常详细的编译过程,可以参考:Cython Compile
Cython源文件名由模块的名称组成,后跟一个.pyx扩展名,例如名为primes的模块将有一个名为primes.pyx的源文件。
一旦你写了.pyx文件,有几种方法把它变成扩展模块。一种方法是使用Cython编译器手动编译,例如:
cython primes.pyx
这将产生一个名为primes.c的文件,然后需要使用C编译器编译使用您平台上适合的任何选项来生成扩展模块。对于这些选项,请查看官方的Python文档。
另一个,也许更好的方法是使用Cython提供的distutils扩展。这种方法的好处是它将给出平台特定的编译选项,像剥离的autotools一样。
Cython最基本的setup.py文件构成
Cython提供的distutils扩展允许您将.pyx文件直接传递到安装文件中的Extension构造函数。
如果您有一个单一的Cython文件要转换为已编译的扩展名,请以文件名example.pyx表示,相关的setup.py将是:
from distutils.core import setup from Cython.Build import cythonize setup( ext_modules = cythonize("example.pyx") )
要了解setup.py,请更详细地查看官方的distutils文档。要编译当前目录中使用的扩展,请使用:
$ python setup.py build_ext --inplace
多个Cython源文件的编译
要自动编译多个Cython文件而不必明确列出所有这些文件,您可以使用glob模式:
setup( ext_modules = cythonize("package/*.pyx") )
如果通过cythonize()传递它们,还可以在Extension对象中使用glob模式:
extensions = [Extension("*", ["*.pyx"])] setup( ext_modules = cythonize(extensions) )
最常用的就是setup.py,具体setup.py的使用方法,可以参考Python的官网:https://docs.python.org/3.4/distutils/index.html#distutils-index
文章的脚注信息由WordPress的wp-posturl插件自动生成