Windows下Cython使用(VS2017)
收到公众号推送文章“利用Cython为Python代码加速”后尝试在Windows平台下使用Cython,环境为Python3.5 + VS2017。
1. 简单尝试
1)新建hello.pyx文件,内容如下:
print("Hello World.")
2)新建setup.py脚本,其作用:使用cython编译器去编译pyx文件
from distutils.core import setup
from Cython.Build import cythonize setup(
ext_modules=cythonize("hello.pyx")
)
3)在终端上运行命令
python setup.py build --inplace # inplace表示源代码在同一目录下
若编译成功,则在目录下会出现两个文件:hello.c,xxx.pyd(若在Linux平台下会出现hello.so),此时.so文件或者.pyd文件就可以像普通的python文件一样,被import。
2. 加速测试(以斐波那契数列为例)
1)fibonacci_c.pyx
# Cython版本
def fibonacci_c(int n):
if n < 0:
print("1st fibonacci number = 0")
elif n == 1:
return 0
elif n == 2:
return 1
else:
return fibonacci_c(n-1) + fibonacci_c(n-2)
2)cython_test.py
#!/usr/bin/env python
# coding: utf-8 import datetime
import pyximport
pyximport.install()
import fibonacci_c # 使用此方式直接import,无需显示编译,由cython自动完成编译
# Python版本
def fibonacci(n):
if n < 0:
print("1st fibonacci number = 0")
elif n == 1:
return 0
elif n == 2:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2) start = datetime.datetime.now()
print(fibonacci_c.fibonacci_c(39))
end = datetime.datetime.now()
print("fibonacci_c escaped: " + str((end-start).seconds) + "s") start = datetime.datetime.now()
print(fibonacci(39))
end = datetime.datetime.now()
print("fibonacci escaped: " + str((end-start).seconds) + "s")
3)运行cython_test.py,得到
39088169
fibonacci_c escaped: 5s
39088169
fibonacci escaped: 31s
可见,使用Cython将获得6倍的加速。
PS:Cython能比常规Python代码快多少实际上取决于代码本身。例如,如果运行成本较高的多变量循环,Cython明显优于常规的Python代码。递归函数同样使得Cython快于Python。
问题解决:
1)cython找不到vcvarsall.bat(error: Unable to find vcvarsall.bat)
修改Python安装路径下用于寻找C++编译器的文件_msvccompiler.py(i.e. C:\Program Files\Python35\Lib\distutils\_msvccompiler.py),其通过寻找注册表来找到文件vcvarsall.bat的路径,但注册表中的路径有误,需要修改。(本环境为VS2017,其它版本类似)
需要修改以下两行:
# r"Software\Microsoft\VisualStudio\SxS\VC7",
r"Software\WOW6432Node\Microsoft\VisualStudio\SxS\VS7", # vcvarsall = os.path.join(best_dir, "vcvarsall.bat")
vcvarsall = os.path.join(best_dir, "VC\\Auxiliary\\Build\\vcvarsall.bat")
Ref:
cython找不到vcvarsall.bat (安装有VS2017+)-百度经验
https://jingyan.baidu.com/article/92255446622fde851648f405.html
Cython入门到放弃(一) - lyx的专栏 - CSDN博客
https://blog.csdn.net/qtlyx/article/details/80614608
Windows下Cython使用(VS2017)的更多相关文章
- 【转】linux和windows下安装python集成开发环境及其python包
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- Windows下切分文件(GnuWin32)
windows下碰到查看大日志文件还真麻烦,今天找了个工具来做这个:安装GnuWin32,然后用里面的split命令分割日志文件 ps:发现intellij idea还挺好,超过2g的日志文件也能进行 ...
- windows下编译php7图形库php_ui.dll
CSDN博客 具有图形化编程才有意思,这几天看到了php ui 图形扩展,只是现在只能下载php 7.1的 本次教程编译php7.2.6的 php ui 要是linux下编译起来比较简单 但是 win ...
- windows下使用redis c++
redis是高效key-value NOSQL 数据库 代码开源 windows下使用需要使用微软在redis官方上的改进版 地址 https://redis.io/download 寻找window ...
- QT学习之windows下安装配置PyQt5
windows下安装配置PyQt5 目录 为什么要学习QT 命令行安装PyQt5以及PyQt5-tools 配置QtDesigner.PyUIC及PyRcc 为什么要学习QT python下与界面开发 ...
- Windows下安装Tensorflow报错 “DLL load failed:找不到指定的模块"
Windows下安装完tensorflow后,在cmd下运行python后import tensorflow出现如下错误: Traceback (most recent call last): Fi ...
- windows 下开发的 .netCore MVC 部署到 Linux(Mint)
这两天在公司跟同事偶然聊到 .netCore,说到一些趋势什么的.但是说来说去自己也没试过在Linux 机子上部署过,所以就试一下. 尝试之前也在网上看了一些文章,包括 Linux 上.netCore ...
- linux和windows下安装python拓展包及requirement.txt安装类库
python拓展包安装 直接安装拓展包默认路径: Unix(Linux)默认路径:/usr/local/lib/pythonX.Y/site-packagesWindows默认路径:C:\Python ...
- Windows下编译最新版ChezScheme
据说ChezScheme是最快的神级编译器,一秒钟几百万行,王垠说的2秒内编译自身绝不是夸张(看这里<揭秘Chez Scheme>,Scheme中文社区).ChezScheme由美国印第安 ...
随机推荐
- UVA11988_Broken Keyboard (a.k.a. Beiju Text)
即将dfs()放到打印本段字符的后面 不过汝佳书上面说是用链表写的,无意中用递归写出来了,而且写的挺简单的,代码不复杂,写这个博客主要是想记住递归这种神奇的方法 平时递归搜索时候,dfs()的在其他代 ...
- adb 常用命令大全
adb 常用命令大全 1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd ...
- mysql 日期和时间戳互换
1.日期转时间戳 UNIX_TIMESTAMP('2019-06-25 12:30:00') 2.时间戳转日期 FROM_UNIXTIME(1545711900,'%Y-%m-%d') 3. DAT ...
- spark性能调优01-常规调优
1.分配更多的资源 1.1 分配的资源有:executor.cup per executor.memory per executor.driver memory 1.2 如何分配:在spark-sub ...
- python之序列去重以及生成器、生成器函数、生成器表达式与迭代器浅谈
首先要明确序列值类型是否可哈希,因为可哈希的值很简单就可以用 in /not in 写个生成器去判断,如果是不可哈希的就要去转换为可哈希的再用 in/not in 去判断 原地不可变类型(可哈希): ...
- nuxt项目在windows环境下安装部署
1.nodejs安装,地址 https://nodejs.org/en/ 2.在本地项目中运行npm run build 命令将开发好的项目打包生成.nuxt文件夹,然后把.nuxt文件夹.nux ...
- 知识点整理01- 引用对象被子方法赋值后不改变;CheckBox 取消选择不可用问题
1. Class 实体是引用类型,但传入方法时是null的情况在子方法中不论怎么赋值当 FirstService.SetPerson(person,ref tempMsg); 执行后Person都是n ...
- 事务管理ACID
事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性. ACID是Atomic(原子性) Consistency(一致性) Isolation(隔离性) Dur ...
- teb教程2
http://wiki.ros.org/teb_local_planner/Tutorials/Inspect%20optimization%20feedback 检查优化反馈 简介:怎样检查优化的轨 ...
- rest framework的框架实现之 (版本,解析器,序列化,分页)
一版本 版本实现根据访问的的方式有以下几种 a : https://127.0.0.1:8000/users?version=v1 ---->基于url的get方式 #settings.pyR ...