- 論壇徽章:
- 0
|
譯文地址:http://chenxiaoyu.org/blog/archives/60
Cython代碼跟Python不一樣,必須要編譯。
編譯經(jīng)過(guò)兩個(gè)階段:
* Cython編譯.pyx文件為.c文件
* C編譯器會(huì)把.c文件編譯成.so文件(Windows上是.pyd)
以下會(huì)分節(jié)介紹幾種方式來(lái)建立你的擴(kuò)展模塊。
注意: -a 選項(xiàng),如果使用該選項(xiàng)將會(huì)為.c文件生成一份很漂亮的HTML文件,雙擊高亮的章節(jié)部分會(huì)展開(kāi)代碼,這對(duì)理解,優(yōu)化和調(diào)試模塊將會(huì)非常有幫助。
命令行
從命令行執(zhí)行Cython編譯器,輸入選項(xiàng)和.pyx文件列表。
$ cython -a yourmod.pyx
會(huì)生成一個(gè)yourmod.c文件(指定-a選項(xiàng)會(huì)生成一個(gè)HTML文件)
編譯.c文件取決于你的操作系統(tǒng),請(qǐng)參考下如何在你的系統(tǒng)寫Python擴(kuò)展模塊文檔。
下面是一個(gè)Linux系統(tǒng)的例子:
$ gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing \
-I/usr/include/python2.5 -o yourmod.so yourmod.c
gcc需要提供包含的文件和擴(kuò)展庫(kù)的鏈接。
在目錄里會(huì)生成yourmod.so文件。
現(xiàn)在只需要導(dǎo)入你的yourmod模塊就可以了。
Distutils
確保你的系統(tǒng)已經(jīng)安裝好Distutils。
下面假設(shè)需要編譯的文件叫hello.pyx。
建立一個(gè)setup.py的腳本:
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
)
在命令行執(zhí)行:python setup.py build_ext –inplace
現(xiàn)在可以在shell或者腳本里正常導(dǎo)入使用了。
Pyximport
在純Python代碼里調(diào)用Cython代碼:
>>> import pyximport; pyximport.install()
>>> import helloworld
Hello World
這僅僅是簡(jiǎn)單調(diào)用Cython,不需要C庫(kù)也不需要構(gòu)建腳本。
當(dāng)然也可以實(shí)驗(yàn)性的在Python調(diào)用。允許在Python模塊中運(yùn)行Cython代碼在任何一個(gè).pyx和.py模塊。這包
括標(biāo)準(zhǔn)庫(kù)和包。如果Cython編譯失敗的話,pyximport會(huì)返回到加載失敗的模塊處。
.py安裝是這樣:
>>> pyximport.install(pyimport = True)
原文:http://docs.cython.org/src/reference/compilation.html
[ 本帖最后由 smallfish_xy 于 2009-11-19 15:12 編輯 ] |
|