摘要:在 Mac 下使用 Cython 會碰到一些意外。例如連接命令不同什麼的。本文就此簡單舉了一個例子來講明在 Mac OS X 中使用 Cython 的正確姿式。python
首先,咱們須要安裝 Cython。Cython 是一個 Python 的擴展組件,能夠將符合 Cython 語法的 Python 代碼翻譯成 C 語言代碼。如同在其餘全部系統中安裝 Python 擴展組件同樣,只須要一行命令便可。shell
pip install cython
固然,前提是咱們須要有 pip
。不過對於玩 Python 的各位,想必 pip
是必不可少了啦,若是沒有的話……谷歌以後,立刻回來~~app
有了 Cython 以後,讓咱們來編寫一個簡單的 a+b
函數好了。python2.7
# file: a_plus_b.pyx def a_plus_b(int a, int b): cdef int c c = a + b return c
其中參數部分須要按照 C 語言的規範進行聲明(彷佛按照 Python 的規則直接寫也是能夠的),代碼中的聲明須要添加 cdef
。函數
接下來,咱們來運行這個函數,固然是使用 Cython 的方法。.net
將 pyx
轉換爲 C
翻譯
cython a_plus_b.pyx
此時會有 a_plus_b.c
生成。這個文件就是通過 Cython 翻譯的代碼。code
編譯 C
代碼爲連接庫 so
orm
此處代碼請看完下面解釋以後再執行,不然會出錯 (:з」∠)blog
cc -c -fPIC -I/usr/local/include/python2.7 a_plus_b.c cc -shared -lpython2.7 aa.o -o a_plus_b.so
其中第一行代碼中須要指定一個 include
文件 Python.h
的位置。這裏咱們採用的是路徑 /usr/local/include/python2.7
,這是咱們本身設置的軟連接。默認狀況下,Mac OS X 中 Python.h
文件的位置在一個相似於以下路徑的地方。
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/
爲了後續使用方便,咱們創建一個軟鏈接。
ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/ /usr/local/include/python2.7
這樣,咱們第一行的命令就能夠正確執行啦~~執行以後會生成 a_plus_b.o
文件。
第二行中須要指定連接的 Python 版本,即 -lpython2.7
參數。執行以後會生成 a_plus_b.so
文件。
從 Python 中調用剛編譯的庫
此時,a_plus_b.so
中的函數已經能夠直接被 import
。
#!/usr/bin/env python # -*- encoding: utf-8 -*- import a_plus_b print a_plus_b.a_plus_b(1, 2)
執行這段代碼,會輸出 3。
至此步驟所有完成~~
本文只是給出了一些在 Mac OS X 上使用 Cython 可能碰到的一些問題的解決方法。至於如何在 Cython 中使用 Python 庫以及如何調用 C 語言庫,詳見 Cython 三分鐘入門。