pyx文件 生成pyd 文件用于 cython调用的实现
pyx文件是python的c扩展文件,代码要符合cython的规范,用什么编辑器写都行。我在eric4上写的,结果它默认用python解释器来进行解释,还提示有bug,“语法错误”。
上面的pyx文件还仅仅是源代码文件,要想被python调用、要想运行,仅仅写了源代码还是不够的。具体来说,还要转成.c或者.c++的文件,并且再进一步转成.pyd文件。
pyd文件才是可以直接使用的文件。为了达到上述目的,就要写一个setup.py脚本,如下:
#!/usr/bin/python #pythonversion:2.7.3 #Filename:SetupTestOMP.py #Runas: #pythonsetup.pybuild_ext--inplace importsys sys.path.insert(0,"..") fromdistutils.coreimportsetup fromdistutils.extensionimportExtension fromCython.Buildimportcythonize fromCython.Distutilsimportbuild_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解释器下面运行。
在控制台下,运行如下命令‘pythonsetup.pybuild_ext--inplace',就生成了TestOMP.pyd文件。
当然,同时还有一些杂七杂八的文件,如‘build'目录下面的‘lib'文件。
这都提示着,这是在windowsvistualstudio环境下。
在linux+gcc环境下,就要生成.so文件了,而且“/openmp”的选项就要写成“-fopenmp”
写TestOMP.py
文件上述两个步骤,相当于把某个python效率瓶颈模块(这之前需要用profile工具来定位)用效率更高的代码写成了python的c扩展形式,接下来,就是要在python代码中调用他们。TestOMP.py就是这个调用的脚本,如下:
fromTestOMPimportTest Test()
这个就很容易了,import并且调用。在控制台下,输入“pythonTestOMP.py”,运行。
补充:python无法导入Cython的.pyx文件?
解决方法:
在import相应包之前,添加:
importpyximport pyximport.install()
如果上面安装完成后运行程序又出现
Nomodulenamedpyximport
此时需要:
pipinstallCython
即可~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。