当完成一个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)
)
文章的脚注信息由WordPress的wp-posturl插件自动生成
|2|left
打赏
微信扫一扫,打赏作者吧~