pyx文件是python的c擴展文件,代碼要符合cython的規(guī)范,用什么編輯器寫都行。我在eric4上寫的,結(jié)果它默認用python解釋器來進行解釋,還提示有bug,“語法錯誤”。
上面的pyx文件還僅僅是源代碼文件,要想被python調(diào)用、要想運行,僅僅寫了源代碼還是不夠的。具體來說,還要轉(zhuǎn)成.c或者.c++的文件,并且再進一步轉(zhuǎn)成.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文件。
當(dāng)然,同時還有一些雜七雜八的文件,如‘build'目錄下面的‘lib'文件。
這都提示著,這是在windows vistual studio環(huán)境下。
在linux+gcc環(huán)境下,就要生成.so文件了,而且“/openmp”的選項就要寫成“-fopenmp”
寫TestOMP.py
文件上述兩個步驟,相當(dāng)于把某個python效率瓶頸模塊(這之前需要用profile工具來定位)用效率更高的代碼寫成了python的c擴展形式,接下來,就是要在python代碼中調(diào)用他們。TestOMP.py就是這個調(diào)用的腳本,如下:
from TestOMP import Test
Test()
這個就很容易了,import并且調(diào)用。在控制臺下,輸入“python TestOMP.py”,運行。
補充:python無法導(dǎo)入Cython的.pyx文件?
解決方法:
在import相應(yīng)包之前,添加:
import pyximport
pyximport.install()
如果上面安裝完成后運行程序又出現(xiàn)
No module named pyximport
此時需要:
即可~
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- Python .py生成.pyd文件并打包.exe 的注意事項說明
- python 中 .py文件 轉(zhuǎn) .pyd文件的操作
- python 指定源路徑來解決import問題的操作
- Python3自帶工具2to3.py 轉(zhuǎn)換 Python2.x 代碼到Python3的操作