时间:2021-05-22
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”
文件上述两个步骤,相当于把某个python效率瓶颈模块(这之前需要用profile工具来定位)用效率更高的代码写成了python的c扩展形式,接下来,就是要在python代码中调用他们。TestOMP.py就是这个调用的脚本,如下:
from TestOMP import Test Test()这个就很容易了,import并且调用。在控制台下,输入“python TestOMP.py”,运行。
补充:python无法导入Cython的.pyx文件?
在import相应包之前,添加:
import pyximportpyximport.install()如果上面安装完成后运行程序又出现
No module named pyximport
即可~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
pyd文件生成安装easycython库pipinstalleasycythontest.pydeftest():print("调用成功")main.pyimp
最近用python写了一个小程序,想发布出去让人试用又不想暴露源码,搜索了一下发现将py文件编译成pyd文件就能达到目的。转换过程很简单,但是在调用pyd文件并
AIDL的底层是通过Binder进行通信的,通过追踪.aidl编译后自动生成的文件我们知道,文件中的Stub类用于服务端,Proxy类用于客户端调用,那么可否直
Pythonimport.pyd文件时会搜索sys.path列表中的路径运行importxxx.pyd1.'ImportError:Nomodulenamedx
作用:export和exportdefault实现的功能相同,即:可用于导出(暴露)常量、函数、文件、模块等,以便其他文件调用。区别:1、export导出多个对