天天看點

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

    執行成功的圖例:

windows cython快速入門

    編譯成功後,在同目錄下會生成以下編譯好的檔案(字尾是.pyd):

windows cython快速入門

    它可以被python直接import,下面在同目錄下的cmd或PowerShell控制台運作一下python試試:(為了避免被認為是import了之前的test.pyx檔案,我們把同目錄下原來的test.pyx檔案删掉),執行效果如下圖:

windows cython快速入門

   由此可見,.pyx編譯成.pyd之後,可以被python直接import,這裡在寫import語句的時候不需要管後面的"cp36-win_amd4"等多餘的内容。

    細心的讀者不難發現,編譯出來的.pyd檔案是閉源的!是以,這也是一種讓python項目閉源的簡單實用的方法。

    思考:我們發現剛剛的python代碼在原生python下執行跟經過了cython編譯後執行做對比,速度并沒有什麼差别。這是為什麼呢?不是說cython可以加速python代碼的執行效率嗎?

    實際上:這是因為我們仍舊采用純python的文法來編寫。這樣盡管用cython來編譯,執行的時候還是按照python的那一套來運作的。是以效率并不會提升。但是,正因為是用cython編譯,我們可以在test.pyx上對源代碼進行修改,加入C語言的一些文法(再次強調,字尾是.pyx噢~),這樣就能快很多了。