- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Cython用户指南5
第1章 开始
1.1 Cython概述
Cython 是一种基于Python的语言,它提供了进行静态类型声明的额外语法,其目标是变成Python的超集。Cython代码被转换成优化的C/C++代码,并进一步被编译成Python扩展模块。这样既提高了代码性能又方便与C库集成,同时还保持了跟Python一样的开发效率。
Python的执行环境通常是CPython,CPython用C语言实现。还有用其他语言实现的执行环境,例如用java实现的Jython,用C#实现的IronPython,以及用Python实现的PyPy。
由于用C语言实现,CPython便于通过C接口包装其他外部库。但是用C语言写一个胶水层并不简单,特别是那些用惯了像Python这样的高层语言的程序员。
Cython项目基于Pyrex解决了这一问题,解决方式便是用源代码编译器将Python代码转换成等价的C代码。转换后的代码运行于Python执行环境,但有C语言一样的执行速度,并且可以直接调用C语言库。同时这些代码仍保持了Python接口,可以在Python源代码中直接调用。由于这种双重特性,Cython有2种主要用途:一是用快速二进制模块扩展CPython解释器;二是将外部C库包装成Python接口。
Cython可以编译绝大部分常规Python代码,通过将Python和C类型声明成静态类型,编译后的代码通常可以获得很大的性能提升。可以用Cython给代码段赋予C语义,从而将代码段转换成更有效的C代码。类型声明因此便有2个用途,一是将代码段从动态Python语义转换成快速的静态C语义;二是直接操作外部库中的类型。这样,Cython便将两个世界合并成一个更具可用性的编程语言。
1.2 安装Cython
许多用于科学计算的Python发布,例如Enthought Python Distribution [EPD],
Python(x,y),Sage等,都捆绑了Cython,因此无需安装。但是如果捆绑的Cython版本太旧,任然可以按照下面的指令进行升级。除非特别说明,本手册中的内容适用于Cython 0.11.2以及后续版本。
跟多数Python软件不同,Cython的安装需要C编译器。不同系统通过不同方式获得C编译器:
Linux:自带gcc
Mac OS X: XCode
Windows:MinGW,Visual C
Cython的最新版本可以从 下载,下载后解压缩文件,进到目录后执行:
python setup.py install
如果有setuptools,可以从PyPI下载安装Cython,命令是:
easy_install cython
对于Windows,可以下载可执行文件进行安装
1.3 构建Cython代码
不像Python,Cython必须被编译,这发生于2个阶段:
·用Cython将.pyx文件编译成.c文件,.c文件便是Python扩展模块。
·用C编译器将.c文件编译成.so文件,.so文件可由Python直接import。
有几种方式可以构建Cython代码:
·使用distutils setup.py
·使用pyximport,像.py一样导入Cython的.pyx文件。
·使用cython命令行将.pyx文件转成.c文件,然后用gcc将.c文件编译成.so文件
·使用Sage
1.3.1 使用distutils构建Cython模块
在hello.pyx文件中编写一个“hello world”程序:
def say_hello_to(name):
print(Hello %s! % name)
下面是对应的构建脚本setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [Extension(hello, [hello.pyx])]
setup(
name = Hello world app,
cmdclass = {build_ext: build_ext},
ext_modules = ext_modules
)
然后运行命令“python?setup.py?build_ext?–inplace”进行构建。之后就可以打开一个Python会话,并执行“from?hello?import?say_hello_to”,接着就可以使用导入的函数。
还可以用Sage来编译,例如:
Sage笔记本允许透明地编辑和编译Cython代码,只需在单元格顶部输入%
原创力文档


文档评论(0)