网站性能检测评分
注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。
python版本更新
详细的多维度测评 看看哪个Python版本速度最快 推广视频课程
哪个版本的 Python 最快?当然,这些问题由多种因素决定,其中的主要的因素是什么呢?我们又如何为自己的应用寻找最快的 Python 版本呢?带着这些问题,Hackermoon 上一位叫 Anthony Shaw 的作者为我们做了一些测试。
Anthony Shaw :Dimension Data 的 Talent 集团总监,Python 软件基金会成员,Apache 基金会成员
以下是对作者原文的翻译:
使用 Python 性能测试套件
正如之前我在 speed.python.org 网站提到的,Python 核心开发团队非常重视性能问题,这对于比较官方基准和 CPython 版本非常有用。
如图,测试结果很难直观读取其中不包含 PyPy
你可以通过执行 pip install performance 命令来下载测试套件,然后执行如下命令:
pyperformance run --python={chosen_python_runtime} -o my_results.json
该命令会针对 Python 的目标版本多次运行一系列“实际”应用程序,并记录测试结果,取其平均值。
本文我对以下官方版本进行了测试:
Python 2.7.10Python 3.4.4Python 3.5.4Python 3.6.1Python 3.7 beta 2(译者注:作者进行测试时 Python 3.7 版本还未正式发布,beta 2 性能与正式版非常接近,同样具有参考价值。Python 3.7 正式发布内容请看这里)
同时还测试了 PyPy(5.6)和 PyPy 3(5.10.0)。
测试结果
我根据这套测试用例进行了测试,你也可以根据自己的情况自己编写一套测试。
我编写了一个简单的脚本,来获得性能数据文,并将它们绘制成了图表。脚本代码你可以在这里找到:
https://gist.github/tonybaloney/4e8e45f9128e9eb6e4f36c73ba5e5574
所有图表都以秒为单位,数值越低,表示性能越好。
完整的测试结果及图表展示可请参阅:
https://github/tonybaloney/performance_testing/tree/master/png
渲染 HTML 模板
django_html 测试将使用 Django 模板渲染引擎来构建一个 150x150 的 HTML 表格。 它利用了 Django 引擎的 Content 和 Template 类。
如图所示,Python 3.7 比 Python 2.7 快 1.19 倍,但除此之外,其他 Python 3 版本都没有 Python 2.7 快。该结果与 speed.python.org 网站的测试结果一致。
PyPy 的测试结果显示,PyPy 比 CPython 的任何 Python 版本都快,PyPy 3 比 PyPy 慢两倍。Django 2.0 及更高版本已决定放弃对 Python 2 的支持,因此 PyPy 将不再与 Django 2 兼容。
启动时间测试
该部分测试解释器的启动时间
如图所示,Python 2.7 是所有测试版本中启动速度最快的。
注:此处暂不讨论 PyPy 的测试结果,文末再谈。
加密测试(Crypto):crypto_paes
在这个测试中,Python 2 的速度明显快于 Python 3,因为 Crypto 要求大量数字运算,而 Python 3 没有 32 位整数类型,只有一个长整型(long integer)。
同样差距比较明显的是,PyPy 3 比 PyPy 慢 5 倍。
算法测试:n-queens
结果显示,在 CPython 系列中,Python 3.7 性能最佳。此外,PyPy 3 和 PyPy 测试结果比较接近,PyPy 小胜。
浮点运算测试
“浮点”基准测试需要人工创建繁重的浮点运算应用程序,在这里我们通过 math.cos(),math.sin() 和 math.sqrt() 函数创建,总共创建 10 万个浮点对象。
PyPy 非常适合浮点运算,在大量的数字运算、可预测的类型和方法以及循环上展现了非常优秀的性能。Python 3.7 具有新的方法能快速调用操作码,该操作码正在此测试中刚好用上,表现佳。
正则表达式测试
在这项测试中,我选用了 50 个最受欢迎的网页,并记录了所有正则表达式的操作。 每个操作都被赋予权重,该权重是根据页面流行度的估计以及在加载每个页面时执行的次数来计算的。 最后,数据中的字母使用 ROT13 进行编码,其方式不会影响正则表达式与输入的匹配程度。
PyPy 的测试结果让人大跌眼镜,不知道它都经历了些什么......
补充:PyPy 后来看到了这项测试结果,花了几个小时把问题修复了
Python 3 比 Python 2 快吗?
综上测试所述,答案是 Yes!虽然也有几项测试结果显示 Python 3 比 Python 2 慢:
加密测试:Python 3 的比 Python2 慢 1.35 倍(原因在上文已做解释)启动时间测试:Python 3 比 Python 2 慢 1.39 倍
但从整体结果来看,Python 3 更快。CPython 核心开发团队曾表示,启动速度问题是他们在 3.8 和 3.9 版本中着重要解决的问题。
PyPy 很快,我要使用它吗?
PyPy 有 JIT 即时编译器,在执行可预测的重复性任务时非常高效,而 Python 性能测试需要多次运行同一段代码来保证准确性,因此,PyPy 面对这种测试性能,表现比 CPython 更佳。
但是,PyPy 的 JIT 编译器的显著缺点就是启动成本高,并且,许多 C 语言扩展程序缺乏兼容性。另外,由于 PyPy 是用 Python 编写的,许多模板在 PyPy 中无法工作,使用者需要时常进行检查。
PyPy 也同样需要面对从 Python2 向 Python3 转变的问题。PyPy3 还不太稳定,PyTest 就已经放弃了对 PyPy3 的支持。
结论
Python 在所有官方版本测试中表现最佳,PyPy 在解释器测试的表现最佳。Python 2 以后会用得越来越少,直到废弃。如果 PyPy 3 的速度始终不能比 PyPy 快,能有所提升也是好的。
python学习笔记(三)-pip的更新与优化(干货推荐) 营销视频课程
对应python的组件的安装来说,pip无疑是最为重要的了。
本节主要重点说明一下pip的更新与网络优化
首先来说,默认pip的源都是在国外的,由于国内的网络环境(你懂得)的特殊状况,如果使用默认的pip源,
在国内的网络环境下非常不稳定,将会在安装过程中产生非常不好的影响,因此极力建议将pip的源设置为国内的镜像,
确保pip的使用高效而稳定,废话不说,现在开始。
linux下配置pip为国内源(centos6下调试无问题)
注:为提高使用效率,这里不讲原理,直接上脚本,把我的脚本直接复制到终端运行即可
#更改pip源至国内镜像
mkdir ~/.pip
touch ~/.pip/pip.conf
#添加一下内容
echo "[global]" >>~/.pip/pip.conf
echo "index-url = https://pypi.tuna.tsinghua.edu/simple">>~/.pip/pip.conf
#检查一下文件的内容最终是这样的效果
#python3版本更新
pip3 install --upgrade pip
确保pip是最新版本
运行完成后可以测试一下效果
pip install jupyter
windows下pip设置为国内源的方法
在windows文件管理器中,输入 %APPDATA%
会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件
在新建的pip.ini文件中输入以下内容,搞定
[global]
timeout = 6000
index-url = http://pypi.douban/simple
trusted-host = pypi.douban
这里我也写了一个批处理脚本get_pip_update.bat,直接在命令行执行即可
cd %APPDATA%
mkdir pip
cd pip
echo "[global]">pip.ini
echo "timeout = 6000">>pip.ini
echo "index-url = http://pypi.douban/simple">>pip.ini
echo "trusted-host = pypi.douban">>pip.ini
最后别忘记了更新一下pip自己
学习Python,你选哪个版本 2 vs 3 ? 企业视频课程
Python一个很大的缺陷是版本2 和版本3 不兼容,初学者也经常纠结是学2还是学3。2017年Semaphore 社区调查了 Python 在 Semaphore 的托管 CI 服务中构建应用程序的使用情况。
1、Python2和Python3 事情情况
2016年调查显示有 70% 以上的用户仍在使用 Python 2.7,Python 3 的使用率较低。2017年,Python 3 的使用出现了上涨,涨幅约 8.2%。如下图所示:
2、升级新版本愿望
2016年,Python 3.5 的使用率达到 60%,Python 3.4 的使用率占 30%。2017年,3.5 版和 3.4 版的使用率分别只占 34% 和 20%,有 35% 的用户已经开始使用 Python 3.6。
可见,使用 Python 3 的群体更愿意进行版本更新。
3、Python 2.7 和 Python 3 各版本的使用率对比
从图中,可以看到 Python 3 版的用户群体正在迅速扩展。
现在,新入行的学习者,如果不是项目限制必须学 Python 2.7,那还是直接学 Python3 吧。
毕竟 Guido van Rossum 曾于 2014 年宣布 Python 2.7 支持时间延长到 2020 年。
Python Web 开发框架 Django 释出了 2.0 版本。主要变化包括:停止支持 Python 2 系列。
大名鼎鼎的NumPy也宣布,从2019年1月1日开始,任何新的功能版本都只支持Python3。
Python哪个版本适合初学者 公司视频课程
想学习Python的人都会有一个困惑,那就是Python目前有两个版本Python2和Python3,Python2与Python3有何区别,两个版本该学习哪个呢?
python3 和 python2 是不兼容的,而且差异比较大,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的。目前实际应用中大部分暂不考虑 Python3,有的时候注意写兼容 2/3 的代码。用 Python2 为主的写新代码时要考虑以后迁移到 Python3 的可能性。据数据统计显示目前10% 使用 Python 3;20% 既使用Python 2也使用Python 3,Python 2用的更多;70% 使用Python 2。
其实python是linux上最常用的软件之一,但是linux目前的版本大部分还是使用python2的,而且,在linux上依赖python2的程序更多一些,所以 Python3 要代替 python2 成为主流还需要几年的时间。如果为了找工作还是学Python 2,学会了Python 2,由Python 2转到python3也不难。
说了半天,Python2与Python3到底有何区别呢?
1.性能
Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果。
Py3.1性能比Py2.5慢15%,还有很大的提升空间。
2.编码
Py3.X源码文件默认使用utf-8编码
3. 语法
1)去除了<>,全部改用!=
2)去除``,全部改用repr()
3)关键词加入as 和with,还有True,False,None
4)整型除法返回浮点数,要得到整型结果,请使用//
5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量
6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数
7)改变了顺序操作符的行为,例如x 8)输入函数改变了,删除了raw_input,用input代替: 9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了 10)新式的8进制字变量,相应地修改了oct()函数。 11)增加了 2进制字面量和bin()函数 12)扩展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list 对象和seq是可迭代的。 13)新的super(),可以不再给super()传参数, 14)新的metaclass语法: 15)支持class decorator。 4. 字符串和字节串 1)现在字符串只有str一种类型,但它跟2.x版本的unicode几乎一样。 2)关于字节串,请参阅“数据类型”的第2条目 5.数据类型 1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long 2)新增了bytes类型 6.面向对象 1)引入抽象基类(Abstraact Base Classes,ABCs)。 2)容器类和迭代器类被ABCs化,所以cellections模块里的类型比Py2.5多了很多。 3)迭代器的next()方法改名为__next__(),并增加内置函数next(),用以调用迭代器的 4)增加了@abstractmethod和 @abstractproperty两个 decorator,编写抽象方法(属性)更加方便。 7.异常 1)所以异常都从 BaseException继承,并删除了StardardError 2)去除了异常类的序列行为和.message属性 3)用 raise Exception(args)代替 raise Exception, args语法 4)捕获异常的语法改变,引入了as关键字来标识异常实例 5)异常链,因为__context__在3.0a1版本中没有实现 8.模块变动1)移除了cPickle模块,可以使用pickle模块代替。最终我们将会有一个透明高效的模块。 2)移除了imageop模块 3)移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, imeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块 4)移除了bsddb模块(单独发布,可以从Python "bindings" for Oracle Berkeley DB获取) 5)移除了new模块 6)os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下 7)tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是 tokenize.tokenize() 9.其它 1)xrange() 改名为range(),要想使用range()获得一个list,必须显式调用 2)bytes对象不能hash,也不支持 b.lower()、b.strip()和b.split()方法 3)zip()、map()和filter()都返回迭代器。 4)string.letters和相关的.lowercase和.uppercase被去除,请改用string.ascii_letters 等 5)如果x< y的不能比较,抛出TypeError异常 6)__getslice__系列成员被废弃。 7)file类被废弃
Raspberry pi中python版本的切换 企业视频课程
这个问题其实也不是在树莓派上的问题,在linux上都有这个问题,我们知道python有很多的版本,比较常用的是2.7和3.0。然而在有些时候,有些包对版本的要求很高。有时候我们不得不去装几个版本的python。
我们就以树莓派为例来说一下:我们知道树莓派自带了一个python2.7。
它的可执行文件在这个目录下:/usr/bin/python
那现在我要去安装一个python 3.5。这个地方我们直接可使用源码安装,github上源码很多的。不需要我们先删除python2.7。
这个地方源码安装的可执行文件不在/usr/bin/中,它在/usr/local/bin/中
下面我们就开始切换版本了:
开始之前拷贝是很有必要的,万一搞错了呢。sudo cp /usr/bin/python /usr/bin/python_bak删除以前的这个2.7。sudo rm /usr/bin/python重新指定新的链接。sudo ln -s /usr/local/bin/python3.5 /usr/bin/python
这其实就成功了。现在的版本就是3.5了。
那么我们怎么在切换回去呢?
sudo cp /usr/bin/python /usr/bin/python3.5_baksudo rm /usr/bin/pythonsudo ln -s /usr/bin/python2.7 /usr/bin/python
在附带一个源码装python3.6.4的教程吧:
先安装依赖sudo apt-get installbuild-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev libssl-dev openssl libgdbm-dev liblzma-dev libreadline-dev libncursesw5-dev现下载源码,再解压tar -zvxf Python-3.6.4.tgz进入该目录下:
./configuremake
sudo make install
这就安装上了,自己也可以自由切换了。
比较一下不同Python版本,看哪个最快? 流量视频课程
本文所选的Python版本:
2.7.10,
3.4.4,
3.5.4,
3.6.1,和
3.7(我有beta 2)。
此外,这包括PyPy(5.6。)和PyPy3(5.4.10)。
呈现HTML模板
该django_html测试将使用Django模板渲染引擎,以建立一个150×150的HTML表格。它利用了Django引擎的内容和模板类。
Python 3.7的速度比Python 2.7快1.19倍,但是它是唯一一个能够击败我运行的Python 2.7基准的Python 3.x版本。speed.python.org基准测试显示类似的结果。
PyPy可以摧毁任何CPython结果,但PyPy3会比PyPy慢两倍。值得注意的是Django最近决定在Django 2.0及更高版本中放弃对Python 2的支持,这意味着PyPy将不再与Django 2兼容。
启动时间
该测试只是测试解释器启动所花费的时间。如果您通过运行多个进程来解决Python的“GIL”约束,那么这将非常重要。
Cryptography: crypto_paes
在这个测试中,你会看到Python 2和3之间的速度明显下降。为什么?加密需要大量的数字运算,Python 3不再具有32位整数类型,只有一个(非常)长整数。
PyPy用户 - 您会注意到PyPy3 比PyPy 慢5倍!
n-queens:算法测试
在CPython系列中,3.7 又一次出现,但值得注意的是PyPy和PyPy3的结果非常相似。
浮点运算
“浮动”的基准是一种人为的,浮点运算繁重的应用程序,将创建计算10万点的对象math.cos(),math.sin()和math.sqrt() 。
这是PyPy的完美应用,大量的数据处理,可预测的类型和方法以及循环。Python 3.7具有新的快速方法调用操作码,该操作码正在此测试中使用。
常用表达
在正则表达式测试中,“网络上最流行的网页有50个,并记录了所有正则表达式操作。每个操作都有一个权重,它是根据页面出现的热门程度以及加载每个页面时执行的次数来估算的。最后,使用ROT13对数据中的字母进行编码,这样不会影响正则表达式匹配其输入的方式。“
那么Python 3比Python 2更快吗?
是! 在几乎所有的测试中。值得注意的例外是crypto_paes测试,Python 3的速度慢了1.35倍(因为整数类型),python_startup的速度慢了1.39倍。
缓慢的Python 3启动是核心CPython团队正在为3.8,3.9版本开发的问题之一。
除了这两项测试外,Python 3在这些基准测试中的速度大约快1.2-1.3倍。今年晚些时候,你会看到升级到Python 3.7的改进。
为什么PyPy要快得多,为什么不是每个人都使用它呢?
PyPy比CPython快,因为它具有即时编译器。JIT编译器具有很大的好处,因为它们在执行可预测的重复性任务时非常高效。基准的其中一个特点是,您尝试多次运行同一段代码以使其准确无误,推送应用程序并减少错误边界。正如PyPy照耀这些测试。
JIT编译器,尤其是PyPy的缺点是启动成本高。另一个缺点是许多C-Extensions缺乏兼容性。因为“Python”(CPython,官方的PSF Python)是用C语言编写的,PyPi上的许多第三方扩展利用了这一点。Numpy就是一个很好的例子,Numpy的大部分都是用优化的C代码编写的。当你pip install numpy使用本地C编译器并为你的Python运行时建立一个二进制库来使用。
由于PyPy是用Python编写的,很多模块根本无法在PyPy中工作。
此外,PyPy也遭遇了与CPython相同的挑战 - 从语言版本2转移到版本3. PyPy3直到最近我发现它仍然不稳定,在基准测试中,您仍然可以看到与PyPy的奇怪不一致。我还遇到了一些软件包问题(例如PyTest),他们放弃了对PyPy3的支持,但他们解决了问题。