pyx文件 生成pyd 文件用於 cython調用的實現
pyx文件是python的c擴展文件,代碼要符合cython的規范,用什麼編輯器寫都行。我在eric4上寫的,結果它默認用python解釋器來進行解釋,還提示有bug,“語法錯誤”。
上面的pyx文件還僅僅是源代碼文件,要想被python調用、要想運行,僅僅寫瞭源代碼還是不夠的。具體來說,還要轉成.c或者.c++的文件,並且再進一步轉成.pyd文件。
pyd文件才是可以直接使用的文件。為瞭達到上述目的,就要寫一個setup.py腳本,如下:
#!/usr/bin/python #python version: 2.7.3 #Filename: SetupTestOMP.py # Run as: # python setup.py build_ext --inplace import sys sys.path.insert(0, "..") from distutils.core import setup from distutils.extension import Extension from Cython.Build import cythonize from Cython.Distutils import build_ext # ext_module = cythonize("TestOMP.pyx") ext_module = Extension( "TestOMP", ["TestOMP.pyx"], extra_compile_args=["/openmp"], extra_link_args=["/openmp"], ) setup( cmdclass = {'build_ext': build_ext}, ext_modules = [ext_module], )
這個完全是一個python腳本,可以在python解釋器下面運行。
在控制臺下,運行如下命令‘python setup.py build_ext –inplace’,就生成瞭TestOMP.pyd文件。
當然,同時還有一些雜七雜八的文件,如‘build’目錄下面的‘lib’文件。
這都提示著,這是在windows vistual studio環境下。
在linux+gcc環境下,就要生成.so文件瞭,而且“/openmp”的選項就要寫成“-fopenmp”
寫TestOMP.py
文件上述兩個步驟,相當於把某個python效率瓶頸模塊(這之前需要用profile工具來定位)用效率更高的代碼寫成瞭python的c擴展形式,接下來,就是要在python代碼中調用他們。TestOMP.py就是這個調用的腳本,如下:
from TestOMP import Test Test()
這個就很容易瞭,import並且調用。在控制臺下,輸入“python TestOMP.py”,運行。
補充:python無法導入Cython的.pyx文件?
解決方法:
在import相應包之前,添加:
import pyximport pyximport.install()
如果上面安裝完成後運行程序又出現
No module named pyximport
此時需要:
pip install Cython
即可~
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- 基於pyinstaller超級加密操作(加殼和轉c)
- Python .py生成.pyd文件並打包.exe 的註意事項說明
- 能讓Python提速超40倍的神器Cython詳解
- Windows系統下cython_bbox庫的正確安裝步驟
- 如何將Python編譯成C語言