python3使用cython入门,编译pyd文件,加速100倍!
(2019-03-07 19:18:59)
标签:
python |
分类: python爬虫 |
一、安装cython 和 Visiual
Studio 2015 和一些设置
3.开始编译
1.pyx中用cdef定义的类型,除类以外对.py都不可见
1.安装 Visiual
Studio 2015
https://www.cnblogs.com/jianmu/p/7497274.html?utm_source=debugrun&utm_medium=referral
2.安装 cython:
pip install Cython
二、编写测试代码
1.新建test.py文件,编写斐波那契数列测试代码
https://www.cnblogs.com/yafengabc/p/6130849.html
import time
def fib(n):
n == 0: if
0 return
n == 1: if
1 return
fib(n - 1) + fib(n - 2) return
def get_time():
t = time.time()
fib(40)
time.time() - t return
print(get_time())
运行,输出的结果为40秒左右
2.将test.py复制一个 重命名为 test.pyx
(这两个文件没有关联,而因为最后生成的pyd文件导入优先级高于py文件,所以py文件不用移除),给变量加上静态类型声明。
import time
cdef int fib(int n):
n == 0: if
0 return
n == 1: if
1 return
fib(n - 1) + fib(n - 2) return
def get_time():
t = time.time()
fib(40)
time.time() - t return
https://www.cnblogs.com/jianmu/p/7497274.html?utm_source=debugrun&utm_medium=referral
在同目录下新建setup.py (名称随意),内容如下:
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("test.pyx"))
控制台进入该目录,执行 python setup.py build_ext (加上--inplace参数后生成的目录结构会稍稍不同,但是没有影响),最后生成了一大堆文件,其中的pyd文件是我们所需要的,其他的可以删除。
将pyd文件的名称更改为test.pyd,这时候
test.pyx
也已经完成了他的使命。注意,pyd的名称似乎必须与之前的pyx名称相同,否则会提示如下错误:
ImportError: dynamic module does not define module export
function
4.测试编译后的代码的执行效率
新建一个包 pack_test,在包内新建一个
test_result.py,同时把test.pyd 文件也拷贝到这个包里。
test_result.py的内容如下:
import pack_test.test
print(pack_test.test.get_time())
输出结果为0.42685914039611816, 速度提升了100倍左右!
三、一些其他的注意事项
https://www.jianshu.com/p/fc5025094912
2.。。。
四、cython代码优化工具
1.https://www.douban.com/group/topic/20950369/
2.http://www.cnblogs.com/xybaby/p/6510941.html
。。。
五、maya相关的一些资料
1.Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑
http://www.cnblogs.com/ibingshan/p/10334471.html
2.Maya mayapy.exe 安装 Cython,编译 pyd
https://www.cnblogs.com/ibingshan/p/10346354.html
。。。
六、可以用pyinstaller打包pyd文件
七、打包多个py文件为一个pyd文件
https://。。。/questions/19646985/making-one-pyd-for-a-set-of-files-with-cython
。。。=stackoverflow.com
packageA.pyx
include "mod1.pyx"
include "mod2.pyx"
include "mod3.pyx"
setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
= {'build_ext': build_ext}, cmdclass
= [ ext_modules
Extension("packageA", sources=["packageA.pyx"])
]
)
前一篇:python获得大写小写字母
后一篇:python简单注册机功能

加载中…