[Python]透過Cython提升Python執行速度與編譯程式碼

大家都知道Python程式碼是直譯程式,未經過編譯程序,一行一行執行,不過因為最近有專案需求,要將python程式碼進行封裝(將採用Cython來進行說明),就是打包成編譯過的檔案,而且是會提升Python執行速度,又可以把程式碼封裝起來,可謂一舉兩得啊!

所以先簡單記錄一下怎麼進行,避免未來忘記!

1.當然是下載編譯套件 Cython

2.準備一個要進行編譯的.py檔案,叫做hello.py

3.可以先試試看可不可以印出hello

4.準備一個編譯用的py程式,叫做buildso.py

其中可以看到hello.py就是你要編譯的那個檔案,是一個dict,可以多個

5.執行編譯

加入–inplace是表示在同級目錄產生so檔案(此案例為hello.cpython-37m-darwin.so)

6.你將在目錄下看到多了一個build資料夾:

裡面會有一堆資料夾,其中有個資料夾(通常為lib.xxxxxxx)包含了所有你編譯過的檔案,但會變成檔名.so(此案例為hello.cpython-37m-darwin.so),這就是我們最終要使用的.

7.測試,先移除之前的hello.py,留下hello.cpython-37m-darwin.so,改名為hello.so,執行

如果順利執行就代表so檔沒問題,可以順利替換喔,因為這只是紀錄,就不對比執行速度.

8.備註:

-你應該會在同級目錄下看到產生一個hello.c,基本上Cython工作原理有點像是,先把.py轉換成.c(C/C++ extensions)的檔案,在使用C編譯器轉換成最終.so檔

-在使用mac時可能會遇到以下訊息

基本上就可能是gcc編譯程式錯誤可以嘗試以下指令修復看看

-很重要一點,在不同環境下需要重新編譯,例如我在Mac上編譯的so無法拿到Ubuntu上面使用,需要直接在Ubuntu上編譯

-補充說明,需要編譯的版本要一致性,如python2 or python3要注意!

—20220307補充—

在Linux環境上,還可能產生以下錯誤,或是採用不同版本的Python都要特別注意:

屆時需要安裝開發套件,通常就是出什麼錯誤安裝什麼資訊.

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *