摘要:摘要在下使用會碰到一些意外。本文就此簡單舉了一個例子來說明在中使用的正確姿勢。運行之接下來,我們來運行這個函數,當然是使用的方法。結束至此步驟全部完成本文只是給出了一些在上使用可能碰到的一些問題的解決方法。
摘要:在 Mac 下使用 Cython 會碰到一些意外。例如鏈接命令不一樣什么的。本文就此簡單舉了一個例子來說明在 Mac OS X 中使用 Cython 的正確姿勢。
安裝 Cython首先,我們需要安裝 Cython。Cython 是一個 Python 的擴展組件,可以將符合 Cython 語法的 Python 代碼翻譯成 C 語言代碼。如同在其他所有系統中安裝 Python 擴展組件一樣,只需要一行命令即可。
pip install cython
當然,前提是我們需要有 pip。不過對于玩 Python 的各位,想必 pip 是必不可少了啦,如果沒有的話……谷歌之后,馬上回來~~
編寫 Cython 程序有了 Cython 之后,讓我們來編寫一個簡單的 a+b 函數好了。
# 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 的方法。
將 pyx 轉換為 C
cython a_plus_b.pyx
此時會有 a_plus_b.c 生成。這個文件就是經過 Cython 翻譯的代碼。
編譯 C 代碼為鏈接庫 so
此處代碼請看完下面解釋之后再執行,否則會出錯 (:з」∠)
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 三分鐘入門。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44173.html
摘要:整體進度貢獻指南項目倉庫貢獻指南請您勇敢地去翻譯和改進翻譯。然后回復,注明章節號一定要留。二校對需要校對語法術語使用文檔格式如果覺得現有翻譯不好,重新翻譯也是可以的。三提交項目將譯文放在文件夾下請見入門指南。 整體進度:https://github.com/apachecn/c... 貢獻指南:https://github.com/apachecn/c... 項目倉庫:https://...
摘要:最近有個同事編譯一個腳本后,腳本里面調用函數的地方出現了問題。這個報錯的意思是,這個不支持參數,但是是支持這種特性的。特地去差了下文檔,確實如此在這里只要開啟選項,就可以解決問題。 TypeError 最近有個同事編譯一個腳本后,腳本里面調用函數的地方出現了問題。用一個簡短的例子說明下:py文件 a.py 內容如下: def fn(a): print a fn(a=4) ...
摘要:但是由于程序并沒有那么快,開發人員多年來創建了幾個的編譯器,包括和。在下面的細分中,所有的編譯器都針對進行基準測試。編譯器是系列的一部分,旨在作為的現代替代品。不僅僅是的編譯器,它是的超集,支持與的互操作性。 簡評:Python 和其他的解釋型語言一樣經常被吐槽性能不行,所以開發人員為了提升性能創建了不少編譯器,本文則選取其中的四個做了基準測試。 Python 其實是一種相當快的語言,...
動機 Python進行商業開發時, 需要有一定的安全意識, 為了不被輕易的逆向. 混淆和加密就有所必要了.混淆 為了增加代碼閱讀的難度, 源代碼的混淆非常必要, 一個在線的Python代碼混淆網站. http://pyob.oxyry.com/同時需要注意的是, 這個混淆其實還是被很多人懷疑的, 因為即使混淆了, 也沒有改變代碼的結構. 這種方法只能防君子,不防小人所以, 必要的話, 在編程的時候...
摘要:最好是客戶雙擊,完事兒。目前已經兼容,以及和。一共會有個對象,分別是。,就是我們的工作目錄,存放我們的數據。編譯打包最后,我們執行就好了。打包的可執行文件會在里,中是一些打包時候需要的文件。輸出中最后有字樣,就算成功了。 showImg(https://img-blog.csdnimg.cn/20190303211533768.png?x-oss-process=image/water...
閱讀 1386·2021-11-04 16:11
閱讀 3046·2021-10-12 10:11
閱讀 2980·2021-09-29 09:47
閱讀 1618·2021-09-22 15:40
閱讀 1016·2019-08-29 15:43
閱讀 2807·2019-08-29 13:50
閱讀 1583·2019-08-29 13:28
閱讀 2693·2019-08-29 12:54