本文主要是介绍Cython使用案例之:输出Hello World,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
Cython
Cython
是包含C数据类型的Python
。python
是脚本语言;cpython
是用c
来实现的python
的解释器;cython
是另外一种编程语言,介于python
和c
之间;
实际上
cython
的设计初衷也是这样,既要利用python
快捷的编程速度,又要有c
语言的运行效率。cython
和python
的一个显著区别就是,cython
的所有变量都要明确声明变量类型——仅仅这一点,相同的程序,cython
的运行效率就要比python
的高35%!虽然
cython
是一种独立的编程语言,不过貌似大家不用他独立的编写程序,而是用它来编写python
的c扩展
(用c高效实现某些程序,再给python调用
) -
Cython输出Hello World
-
创建test.py
文件中内容如下:
def say_hello():print("Hello World")
此环节官方文档中使用的是
test.pyx
文件,内容一样。.pyx
文件是由Cython
编程语言 “编写” 而成的Python
扩展模块源代码文件。pyx
文件是python
的c
扩展文件,代码要符合cython
的规范,用什么编辑器写都行。 -
创建setup.py
上面的
.py
或pyx
文件还仅仅是源代码文件,要想被python
调用、要想运行,仅仅写了源代码还是不够的。具体来说,还要转成.c
或者.c++
的文件,并且再进一步转成.pyd
文件。pyd
文件才是可以直接使用的文件。为了达到上述目的,就要写一个setup.py
脚本,如下:from distutils.core import setup from Cython.Build import cythonizesetup(ext_modules = cythonize("test.py") )
-
构建Cython文件
通过命令行,进入文件所在路径,运行下述代码:
python setup.py build_ext --inplace
build_ext
是指明python
生成C/C++
的扩展模块(build C/C++ extensions (compile/link to build directory)
);
--inplace
表示 将编译后的扩展模块直接放在与test.py
同级的目录中生成一个
helloworld.pyd
文件,运行中可能出现两个错误:- 《(2019.11.22已解决)Cython出现error:Unable to find vcvarsall.bat》
- 《(2019.12.17已解决)Cython编译ImportError:No module named Cython.Build》
-
在Python中运行
在
Python
界面或CMD >> python
,导入新建的文件import test as ts ts.say_hello()
其中,
cmd
要先转到test
所在目录,上述代码才能成功。
-
-
解释
上述过程分为两部分:
- .py文件使用Cython被编译为.c文件;
- .c文件使用C编译器生成.pyd(windos)或.so(linux)文件
不像
Python
语言可直接解释使用的.py
文件,.py
(或.pyx
) 文件必须先被编译成.c
文件,再编译成.pyd
(Windows
平台) 或.so
(Linux
平台) 文件,才可作为模块import
导入使用。.c
文件是test.py
转化后的C代码
文件,比较大;.pyd
是Python
的动态链接库,在使用import
时会加载;.pyc
是字节码,二进制,就是Python虚拟机直接运行的代码;build
目录中包含编译过程中生成的临时文件。.pyx文件
是python
的c扩展文件
,代码要符合cython
的规范,用什么编辑器写都行。
## References
- Cython的用法以及填坑姿势 重点参考资料
- 官方文档 : Cython 的基础
- (2019.11.22已解决)Cython出现error:Unable to find vcvarsall.bat
- (2019.12.17已解决)Cython编译ImportError:No module named Cython.Build
- Cython - 基于 Pyrex 编写 Python 的 C 语言扩展模块的静态编译器
- pyx文件 生成pyd 文件用于 cython调用
这篇关于Cython使用案例之:输出Hello World的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!