Cython安裝與使用入門

pythontab發表於2016-12-09

一、Cython是什麼?


它是一個用來快速生成Python擴充套件模組(extention module)的工具

它的語法是python語言語法和c語言語法的混血

他比swig更容易編寫python的擴充套件模組

也許你會說swig可以直接透過c的標頭檔案生成擴充套件模組,但是swig對回撥函式的支援不是很好,

另外,如果用swig,很多情況下,你要寫額外的程式碼將輸入的引數轉換成python物件以及將輸出轉成python物件,例如如果封裝的一個C函式的引數是輸入輸出的話,又如如果C函式的引數中有回撥函式的話

而在Cython,C裡的型別,如int,float,long,char*等都會在必要的時候自動轉成python物件,或者從python物件轉成C型別,在轉換失敗時會丟擲異常,這正是Cython最神奇的地方

另外,Cython對回撥函式的支援也很好。

總之,如果你有寫python擴充套件模組的需求,那麼Cython真的是一個很好的工具


二、安轉cython


cython 在linux下安裝:


1. 原始碼包安裝:

[blueelwang@pythontab ~]$ wget https://pypi.python.org/packages/b7/67/7e2a817f9e9c773ee3995c1e15204f5d01c8da71882016cac10342ef031b/Cython-0.25.2.tar.gz
[blueelwang@pythontab ~]$ tar xzvf Cython-0.25.2.tar.gz
[blueelwang@pythontab ~]$ cd Cython-0.25.2
[blueelwang@pythontab ~]$ python setup.py install


2. pip包安裝

[blueelwang@pythontab ~]$ sudo pip install Cython --install-option="--no-cython-compile"

3. Ubuntu下安裝

[blueelwang@pythontab ~]$ sudo apt-get install cython


安裝後  輸入 cython 即可驗證是否安裝成功


三、使用


1、編寫以 .pyx為副檔名的 cython程式,hello.pyx

def say_hello_to(name):
    print("Hello %s!" % name)

2、編寫python程式 setup.py

其目的是把 hello.pyx程式轉化成hello.c ,並編譯成so檔案

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
)


3. 執行python程式

[blueelwang@pythontab ~]$ python setup.py build_ext --inplace

執行的結果會生成兩個檔案:hello.c 和 hello.so( 用PyObject* 封裝好的檔案)


4. 用python呼叫 hello.so,呼叫檔案為test.py

import hello
hello.say_hello_to("hi,cython!!")


cython的主要目的是: 簡化python呼叫c語言程式的繁瑣封裝過程,提高python程式碼執行速度(C語言的執行速度比python快)


相關文章