windows cython快速入门

    Cython是一个快速生成python扩展模块的工具。它允许在python中加入C语言的语法,并且编译后运行的速度比原生的python要高。此外,使用Cython还可以保护你的Python代码,使其闭源,难以被反编译。

    下面让大家快速入门cython的使用:

一. Cython的安装:

    Cython的安装非常简单。直接在cmd控制台中执行pip install cython即可。当然我们推荐使用anaconda,它本身就帮我们装好cython了。

二. Cython入门教程:

    下面以一个简单的例子让大家快速掌握Cython的最实用而且是最常用的使用方法:

    1. 准备好要打包的python源文件(正常的python源文件后缀是.py,但为了用cython编译,我们需要把后缀改成.pyx)。

    本例的源文件为:test.pyx,内容如下:

import time
import numpy as np

start_time = time.time()
a = np.random.rand(100, 100) * 2 - 1 # 生成300*300的随即矩阵
b = np.random.rand(100, 100) * 2 - 1

for i in range(500000):
    c = a + b # 矩阵相加
    c = a * b # 矩阵元素相乘

end_time = time.time()
print(end_time - start_time) # 输出时间

    2. 准备一个执行cython编译的脚本:setup.py,并把它放在test.pyx源文件同目录下。其内容如下:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

filename = 'test' # 源文件名
full_filename = 'test.pyx' # 包含后缀的源文件名

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = [Extension(filename, [full_filename])] # 配置需要cython编译的源文件
)

    3. 这是最后一步:在setup.py文件所在的目录下打开一个cmd控制台(PowerShell也是可以哒~),在控制台中执行以下命令,即可完成cython的编译啦:

python setup.py build_ext --inplace

    执行成功的图例:


    编译成功后,在同目录下会生成以下编译好的文件(后缀是.pyd):


    它可以被python直接import,下面在同目录下的cmd或PowerShell控制台运行一下python试试:(为了避免被认为是import了之前的test.pyx文件,我们把同目录下原来的test.pyx文件删掉),执行效果如下图:


   由此可见,.pyx编译成.pyd之后,可以被python直接import,这里在写import语句的时候不需要管后面的"cp36-win_amd4"等多余的内容。

    细心的读者不难发现,编译出来的.pyd文件是闭源的!因此,这也是一种让python项目闭源的简单实用的方法。

    思考:我们发现刚刚的python代码在原生python下执行跟经过了cython编译后执行做对比,速度并没有什么差别。这是为什么呢?不是说cython可以加速python代码的执行效率吗?

    实际上:这是因为我们仍旧采用纯python的语法来编写。这样尽管用cython来编译,执行的时候还是按照python的那一套来运行的。因此效率并不会提升。但是,正因为是用cython编译,我们可以在test.pyx上对源代码进行修改,加入C语言的一些语法(再次强调,后缀是.pyx噢~),这样就能快很多了。


  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值