网站性能检测评分
注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。
python有几个版本
Anaconda多环境多版本下的python配置详解 推广视频课程
最近学python,读完了语法后在GitHub找了一些练习来做,由于学的是python3.x语法,而GitHub上的好多练习源码都是基于2.x的,有些module在python3.x上没有,因此为装这些包折腾了好久,浪费了好些时间,这两天才发现Anaconda这个神奇的软件,一些常用的包都打包在里边了。安装完成之后也遇到了不少麻烦,可能是由于初学,不习惯用命令行的缘故,因此网上有不少中文教程,但总是解决不了我的问题,最后还是官方文档比较详细。
python学习群330637182
conda测试指南
在开始这个conda测试之前,你应该已经下载并安装好了Anaconda或者Miniconda
注意:在安装之后,你应该关闭并重新打开windows命令行。
一、Conda测试过程:
使用conda。首先我们将要确认你已经安装好了conda
配置环境。下一步我们将通过创建几个环境来展示conda的环境管理功能。使你更加轻松的了解关于环境的一切。我们将学习如何确认你在哪个环境中,以及如何做复制一个环境作为备份。
测试python。然后我们将检查哪一个版本的python可以被安装,以及安装另一个版本的python,还有在两个版本的python之间的切换。
检查包。我们将1)罗列出安装在我们电脑上的包,2)浏览可用的包,3)使用conda install命令来来安装以及移除一些包。对于一些不能使用conda安装的包,我们将4)在Anaconda.org网站上搜索。对于那些在其它位置的包,我们将5)使用pip命令来实现安装。我们还会安装一个可以免费试用30天的商业包IOPro
移除包、环境以及conda.我们将以学习删除你的包、环境以及conda来结束这次测试。
二、完整过程
提示:在任何时候你可以通过在命令后边跟上--help来获得该命令的完整文档。例如,你可以通过如下的命令来学习conda的update命令。
conda update --help
1. 管理conda:
Conda既是一个包管理器又是一个环境管理器。你肯定知道包管理器,它可以帮你发现和查看包。但是如果当我们想要安装一个包,但是这个包只支持跟我们目前使用的python不同的版本时。你只需要几行命令,就可以搭建起一个可以运行另外python版本的环境。,这就是conda环境管理器的强大功能。
提示:无论你使用Linux、OS X或者Windows命令行工具,在你的命令行终端conda指令都是一样的,除非有特别说明。
检查conda已经被安装
为了确保你已经在正确的位置安装好了conda,让我们来检查你是否已经成功安装好了Anaconda。在你的命令行终端窗口,输入如下代码:
conda --version
Conda会返回你安装Anaconda软件的版本。
提示:如果你看到了错误信息,检查你是否在安装过程中选择了仅为当前用户按安装,并且是否以同样的账户来操作。确保用同样的账户登录安装了之后重新打开命令行终端窗口。
升级当前版本的conda
接下来,让我们通过使用如下update命令来升级conda:
conda update conda
conda将会比较新旧版本并且告诉你哪一个版本的conda可以被安装。它也会通知你伴随这次升级其它包同时升级的情况。
如果新版本的conda可用,它会提示你输入y进行升级.
proceed ([y]/n)? y
conda更新到最新版后,我们将进入下一个主题。
2. 管理环境。
现在我们通过创建一些环境来展示conda的环境操作,然后移动它们。
创建并激活一个环境
使用conda create命令,后边跟上你希望用来称呼它的任何名字:
conda create --name snowflake biopython
这条命令将会给biopython包创建一个新的环境,位置在/envs/snowflakes
小技巧:很多跟在--后边常用的命令选项,可以被略写为一个短线加命令首字母。所以--name选项和-n的作用是一样的。通过conda -h或conda –-help来看大量的缩写。
激活这个新环境
Linux,OS X: source activate snowflakes
小技巧:新的开发环境会被默认安装在你conda目录下的envs文件目录下。你可以指定一个其他的路径;去通过conda create -h了解更多信息吧。
小技巧:如果我们没有指定安装python的版本,donda会安装我们最初安装conda时所装的那个版本的python。
创建第二个环境
这次让我们来创建并命名一个新环境,然后安装另一个版本的python以及两个包 Astroid 和 Babel。
conda create -n bunnies python=3 Astroid Babel
这将创建第二个基于python3 ,包含Astroid 和 Babel 包,称为bunnies的新环境,在/envs/bunnies文件夹里。
小技巧:在此同时安装你想在这个环境中运行的包,
小提示:在你创建环境的同时安装好所有你想要的包,在后来依次安装可能会导致依赖性问题(貌似是,不太懂这个术语怎么翻)。
小技巧:你可以在conda create命令后边附加跟多的条件,键入conda create –h 查看更多细节。
列出所有的环境
现在让我们来检查一下截至目前你所安装的环境,使用conda environment info 命令来查看它:
conda info --envs
你将会看到如下的环境列表:
snowflakes * /home/username/miniconda/envs/snowflakes
bunnies /home/username/miniconda/envs/bunnies
root /home/username/miniconda
确认当前环境
你现在处于哪个环境中呢?snowflakes还是bunnies?想要确定它,输入下面的代码:
conda info -envis
conda将会显示所有环境的列表,当前环境会显示在一个括号内。
(snowflakes)
注意:conda有时也会在目前活动的环境前边加上*号。
切换到另一个环境(activate/deactivate)
为了切换到另一个环境,键入下列命令以及所需环境的名字。
如果要从你当前工作环境的路径切换到系统根目录时,键入:
Linux,OS X: source deactivate
当该环境不再活动时,将不再被提前显示。
复制一个环境
通过克隆来复制一个环境。这儿将通过克隆snowfllakes来创建一个称为flowers的副本。
conda create -n flowers --clone snowflakes
通过conda info –-envs来检查环境
你现在应该可以看到一个环境列表:flowers, bunnies, and snowflakes.
删除一个环境
如果你不想要这个名为flowers的环境,就按照如下方法移除该环境:
conda remove -n flowers --all
为了确定这个名为flowers的环境已经被移除,输入以下命令:
conda info -e
flowers 已经不再在你的环境列表里了,所以我们知道它被删除了。
学习更多关于环境的知识
如果你想学习更多关于conda的命令,就在该命令后边跟上 -h
conda remove -h
3. 管理Python
conda对Python的管理跟其他包的管理类似,所以可以很轻松地管理和升级多个安装。
检查python版本
首先让我们检查那个版本的python可以被安装:
conda search --full --name python
你可以使用conda search python来看到所有名字中含有“python”的包或者加上
--full --name
命令选项来列出完全与“python”匹配的包。
安装一个不同版本的python
现在我们假设你需要python3来编译程序,但是你不想覆盖掉你的python2.7来升级,你可以创建并激活一个名为snakes的环境,并通过下面的命令来安装最新版本的python3:
conda create -n snakes python=3
小提示:给环境取一个很形象的名字,例如“Python3”是很明智的,但是并不有趣。
确定环境添加成功
为了确保snakes环境已经被安装了,键入如下命令:
conda会显示环境列表,当前活动的环境会被括号括起来
(snakes)
检查新的环境中的python版本
确保snakes环境中运行的是python3:
python --version
使用不同版本的python
为了使用不同版本的python,你可以切换环境,通过简单的激活它就可以,让我们看看如何返回默认2.7
·Linux,OS X: source activate snowflakes
检查python版本:
确保snowflakes环境中仍然在运行你安装conda时安装的那个版本的python。
注销该环境
当你完成了在snowflakes环境中的工作室,注销掉该环境并转换你的路径到先前的状态:
·Linux,OS X:source deactivate
4. 管理包
现在让我们来演示包。我们已经安装了一些包(Astroid,Babel和一些特定版本的python),当我们创建一个新环境时。我们检查我们已经安装了那些包,检查哪些是可用的,寻找特定的包并安装它。接下来我们在Anconda.org仓库中查找并安装一些指定的包,用conda来完成更多pip可以实现的安装,并安装一个商业包。
查看该环境中包和其版本的列表:
使用这条命令来查看哪个版本的python或其他程序安装在了该环境中,或者确保某些包已经被安装了或被删除了。在你的终端窗口中输入:
conda list
使用conda命令查看可用包的列表
一个可用conda安装的包的列表,按照Python版本分类,可以从这个地址获得:
http://docs.continuum.io/anaconda/pkg-docs.html
查找一个包
首先让我们来检查我们需要的这个包是否可以通过conda来安装:
conda search beautifulsoup4
它展示了这个包,所以我们知道它是可用的。
安装一个新包
我们将在当前环境中安装这个Beautiful Soup包,使用conda命令如下;
conda install --name bunnies beautifulsoup4
提示:你必须告诉conda你要安装环境的名字(-n bunies)否则它将会被安装到当前环境中。
现在激活bunnies环境,并且用conda list来显示哪些程序被安装了。
·Linux,OS X:source activate bunnies
从Anaconda.org安装一个包
如果一个包不能使用conda安装,我们接下来将在Anaconda.org网站查找。Anaconda.org向公开和私有包仓库提供包管理服务。Anaconda.org是一个连续分析产品。
提示:你在Anaconda.org下载东西的时候不强制要求注册。
为了从Anaconda.org下载到当前的环境中,我们需要通过指定Anaconda.org为一个特定通道,通过输入这个包的完整路径来实现。
在浏览器中,去 http://anaconda.org 网站。我们查找一个叫“bottleneck”的包,所以在左上角的叫“Search Anaconda Cloud”搜索框中输入“bottleneck”并点击search按钮。
Anaconda.org上会有超过一打的bottleneck包的版本可用,但是我们想要那个被下载最频繁的版本。所以你可以通过下载量来排序,通过点击Download栏。
点击包的名字来选择最常被下载的包。它会链接到Anaconda.org详情页显示下载的具体命令:
conda install --channel https://conda .anaconda.ort/pandas bottleneck
检查被下载的包
通过pip命令来安装包
对于那些无法通过conda安装或者从Anaconda.org获得的包,我们通常可以用pip(“pip install packages”的简称)来安装包。
提示: pip只是一个包管理器,所以它不能为你管理环境。pip甚至不能升级python,因为它不像conda一样把python当做包来处理。但是它可以安装一些conda安装不了的包,和vice versa(此处不会翻译)。pip和conda都集成在Anaconda或miniconda里边。
我们激活我们想放置程序的环境,然后通过pip安装一个叫“See”的程序。
·Linux,OS X: source activate bunnies
检查pip安装
检查See是否被安装:
安装商业包
安装商业包与你安装其他的包的过程异常。举个例子,让我们安装并删除一个更新的商业包的免费试用 IOPro,可以加速你的python处理速度:
conda install iopro
提示:除了学术使用,该版本在30天后试用期满
你现在可以安装以及检查你想用conda安装的任何包,无论使用conda命令、从Anaconda.org下载或者使用pip安装,无论开源软件还是商业包。
5. 移除包、环境、或者conda
如果你愿意的话。让我们通过移除一个或多个试验包、环境以及conda来结束这次测试指导。
移除包
假设你决定不再使用商业包IOPro。你可以在bunnies环境中移除它。
conda remove -n bunnies iopro
确认包已经被移除
使用conda list命令来确认IOPro已经被移除了
移除环境
我们不再需要snakes环境了,所以输入以下命令:
conda remove -n snakes --all
确认环境被移除
为了确认snakes环境已经被移除了,输入以下命令:
conda info --envis
snakes不再显示在环境列表里了,所以我们知道它已经被删除了
删除conda
Linux,OS X:
移除Anaconda 或 Miniconda 安装文件夹
rm -rf ~/miniconda OR rm -rf ~/anaconda
Windows:
去控制面板,点击“添加或删除程序”,选择“Python2.7(Anaconda)”或“Python2.7(Miniconda)”并点击删除程序。
学习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。
Python2.x与Python3.x版本区别 流量视频课程
Python2.x与3.x版本区别 Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。 许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。 为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Py..
Python2.x与3.x版本区别
Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。
为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。
许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。
为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。
新的Python程式建议使用Python 3.0版本的语法。
除非执行环境无法安装Python 3.0或者程式本身使用了不支援Python 3.0的第三方库。目前不支援Python 3.0的第三方库有Twisted, py2exe, PIL等。
大多数第三方库都正在努力地相容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行。
主要变化
Python 3.0的变化主要在以下几个方面:
print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:
print "fish"print ("fish") #注意print后面有个空格print("fish") #print()不能带有任何其它参数然而,Python 2.6实际已经支持新的print()语法:
from __future__ import print_functionprint("fish", "panda", sep=', ')新的str类别表示一个Unicode字串,相当于Python 2.x版本的unicode类别。而位元组序列则用类似b"abc"的语法表示,用bytes类表示,相当于Python 2.x的str类别。
现在两种类别不能再隐式地自动转换,因此在Python 3.x里面"fish"+b"panda"是错误。正确的写法是"fish"+b"panda".decode("utf-8")。 Python 2.6可以自动地将位元组序列识别为Unicode字串,方法是:
from __future__ import unicode_literalsprint(repr("fish"))除法运算符"/"在Python 3.x内总是返回浮点数。而在Python 2.6内会判断被除数与除数是否是整数。如果是整数会返回整数值,相当于整除;浮点数则返回浮点数值。
为了让Python 2.6统一返回浮点数值,可以:
from __future__ import pisionprint(3/2)捕获异常的语法由except exc, var改为except exc as var。使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。 Python 2.6已经支援这两种语法。集合(set) 的新写法:{1,2,3,4}。注意{}仍然表示空的字典(dict) 。字典推导式(Dictionary comprehensions) {expr1: expr2 for k, v in d},这个语法等价于result={}for k, v in d.items(): result[expr1]=expr2return result集合推导式(Set Comprehensions) {expr1 for x in stuff}。这个语法等价于:
result = set()for x in stuff: result.add(expr1)return result八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。新增了一个bin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支援这两种语法。dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()不再返回列表,而是迭代器。如果两个物件之间没有定义明确的有意义的顺序。使用<, >,<=, >=比较它们会投掷异常。比如1< ""在Python 2.6里面会返回True,而在Python 3.0里面会投掷异常。现在cmp(), instance.__cmp__()函数已经被删除。可以注释函数的参数与返回值。此特性可方便IDE对原始码进行更深入的分析。例如给参数增加类别讯息:def sendMail(from_: str, to: str, title: str, body: str) -> bool: pass合并int与long类型。多个模块被改名(根据PEP8):旧的名字新的名字_winregwinregConfigParserconfigparsercopy_regcopyregQueuequeueSocketServersocketserverreprreprlibStringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。 Python 2.6已经支援新的io模组。httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。取消了exec语句,只剩下exec()函数。 Python 2.6已经支援exec()函数。
详细的多维度测评 看看哪个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 快,能有所提升也是好的。
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的人都会有一个困惑,那就是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类被废弃
比较一下不同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的支持,但他们解决了问题。
Anaconda多环境多版本下的python配置详解 互联网视频课程
最近学python,读完了语法后在GitHub找了一些练习来做,由于学的是python3.x语法,而GitHub上的好多练习源码都是基于2.x的,有些module在python3.x上没有,因此为装这些包折腾了好久,浪费了好些时间,这两天才发现Anaconda这个神奇的软件,一些常用的包都打包在里边了。安装完成之后也遇到了不少麻烦,可能是由于初学,不习惯用命令行的缘故,因此网上有不少中文教程,但总是解决不了我的问题,最后还是官方文档比较详细。
python学习群330637182
conda测试指南
在开始这个conda测试之前,你应该已经下载并安装好了Anaconda或者Miniconda
注意:在安装之后,你应该关闭并重新打开windows命令行。
一、Conda测试过程:
使用conda。首先我们将要确认你已经安装好了conda
配置环境。下一步我们将通过创建几个环境来展示conda的环境管理功能。使你更加轻松的了解关于环境的一切。我们将学习如何确认你在哪个环境中,以及如何做复制一个环境作为备份。
测试python。然后我们将检查哪一个版本的python可以被安装,以及安装另一个版本的python,还有在两个版本的python之间的切换。
检查包。我们将1)罗列出安装在我们电脑上的包,2)浏览可用的包,3)使用conda install命令来来安装以及移除一些包。对于一些不能使用conda安装的包,我们将4)在Anaconda.org网站上搜索。对于那些在其它位置的包,我们将5)使用pip命令来实现安装。我们还会安装一个可以免费试用30天的商业包IOPro
移除包、环境以及conda.我们将以学习删除你的包、环境以及conda来结束这次测试。
二、完整过程
提示:在任何时候你可以通过在命令后边跟上--help来获得该命令的完整文档。例如,你可以通过如下的命令来学习conda的update命令。
conda update --help
1. 管理conda:
Conda既是一个包管理器又是一个环境管理器。你肯定知道包管理器,它可以帮你发现和查看包。但是如果当我们想要安装一个包,但是这个包只支持跟我们目前使用的python不同的版本时。你只需要几行命令,就可以搭建起一个可以运行另外python版本的环境。,这就是conda环境管理器的强大功能。
提示:无论你使用Linux、OS X或者Windows命令行工具,在你的命令行终端conda指令都是一样的,除非有特别说明。
检查conda已经被安装
为了确保你已经在正确的位置安装好了conda,让我们来检查你是否已经成功安装好了Anaconda。在你的命令行终端窗口,输入如下代码:
conda --version
Conda会返回你安装Anaconda软件的版本。
提示:如果你看到了错误信息,检查你是否在安装过程中选择了仅为当前用户按安装,并且是否以同样的账户来操作。确保用同样的账户登录安装了之后重新打开命令行终端窗口。
升级当前版本的conda
接下来,让我们通过使用如下update命令来升级conda:
conda update conda
conda将会比较新旧版本并且告诉你哪一个版本的conda可以被安装。它也会通知你伴随这次升级其它包同时升级的情况。
如果新版本的conda可用,它会提示你输入y进行升级.
proceed ([y]/n)? y
conda更新到最新版后,我们将进入下一个主题。
2. 管理环境。
现在我们通过创建一些环境来展示conda的环境操作,然后移动它们。
创建并激活一个环境
使用conda create命令,后边跟上你希望用来称呼它的任何名字:
conda create --name snowflake biopython
这条命令将会给biopython包创建一个新的环境,位置在/envs/snowflakes
小技巧:很多跟在--后边常用的命令选项,可以被略写为一个短线加命令首字母。所以--name选项和-n的作用是一样的。通过conda -h或conda –-help来看大量的缩写。
激活这个新环境
Linux,OS X: source activate snowflakes
小技巧:新的开发环境会被默认安装在你conda目录下的envs文件目录下。你可以指定一个其他的路径;去通过conda create -h了解更多信息吧。
小技巧:如果我们没有指定安装python的版本,donda会安装我们最初安装conda时所装的那个版本的python。
创建第二个环境
这次让我们来创建并命名一个新环境,然后安装另一个版本的python以及两个包 Astroid 和 Babel。
conda create -n bunnies python=3 Astroid Babel
这将创建第二个基于python3 ,包含Astroid 和 Babel 包,称为bunnies的新环境,在/envs/bunnies文件夹里。
小技巧:在此同时安装你想在这个环境中运行的包,
小提示:在你创建环境的同时安装好所有你想要的包,在后来依次安装可能会导致依赖性问题(貌似是,不太懂这个术语怎么翻)。
小技巧:你可以在conda create命令后边附加跟多的条件,键入conda create –h 查看更多细节。
列出所有的环境
现在让我们来检查一下截至目前你所安装的环境,使用conda environment info 命令来查看它:
conda info --envs
你将会看到如下的环境列表:
snowflakes * /home/username/miniconda/envs/snowflakes
bunnies /home/username/miniconda/envs/bunnies
root /home/username/miniconda
确认当前环境
你现在处于哪个环境中呢?snowflakes还是bunnies?想要确定它,输入下面的代码:
conda info -envis
conda将会显示所有环境的列表,当前环境会显示在一个括号内。
(snowflakes)
注意:conda有时也会在目前活动的环境前边加上*号。
切换到另一个环境(activate/deactivate)
为了切换到另一个环境,键入下列命令以及所需环境的名字。
如果要从你当前工作环境的路径切换到系统根目录时,键入:
Linux,OS X: source deactivate
当该环境不再活动时,将不再被提前显示。
复制一个环境
通过克隆来复制一个环境。这儿将通过克隆snowfllakes来创建一个称为flowers的副本。
conda create -n flowers --clone snowflakes
通过conda info –-envs来检查环境
你现在应该可以看到一个环境列表:flowers, bunnies, and snowflakes.
删除一个环境
如果你不想要这个名为flowers的环境,就按照如下方法移除该环境:
conda remove -n flowers --all
为了确定这个名为flowers的环境已经被移除,输入以下命令:
conda info -e
flowers 已经不再在你的环境列表里了,所以我们知道它被删除了。
学习更多关于环境的知识
如果你想学习更多关于conda的命令,就在该命令后边跟上 -h
conda remove -h
3. 管理Python
conda对Python的管理跟其他包的管理类似,所以可以很轻松地管理和升级多个安装。
检查python版本
首先让我们检查那个版本的python可以被安装:
conda search --full --name python
你可以使用conda search python来看到所有名字中含有“python”的包或者加上
--full --name
命令选项来列出完全与“python”匹配的包。
安装一个不同版本的python
现在我们假设你需要python3来编译程序,但是你不想覆盖掉你的python2.7来升级,你可以创建并激活一个名为snakes的环境,并通过下面的命令来安装最新版本的python3:
conda create -n snakes python=3
小提示:给环境取一个很形象的名字,例如“Python3”是很明智的,但是并不有趣。
确定环境添加成功
为了确保snakes环境已经被安装了,键入如下命令:
conda会显示环境列表,当前活动的环境会被括号括起来
(snakes)
检查新的环境中的python版本
确保snakes环境中运行的是python3:
python --version
使用不同版本的python
为了使用不同版本的python,你可以切换环境,通过简单的激活它就可以,让我们看看如何返回默认2.7
·Linux,OS X: source activate snowflakes
检查python版本:
确保snowflakes环境中仍然在运行你安装conda时安装的那个版本的python。
注销该环境
当你完成了在snowflakes环境中的工作室,注销掉该环境并转换你的路径到先前的状态:
·Linux,OS X:source deactivate
4. 管理包
现在让我们来演示包。我们已经安装了一些包(Astroid,Babel和一些特定版本的python),当我们创建一个新环境时。我们检查我们已经安装了那些包,检查哪些是可用的,寻找特定的包并安装它。接下来我们在Anconda.org仓库中查找并安装一些指定的包,用conda来完成更多pip可以实现的安装,并安装一个商业包。
查看该环境中包和其版本的列表:
使用这条命令来查看哪个版本的python或其他程序安装在了该环境中,或者确保某些包已经被安装了或被删除了。在你的终端窗口中输入:
conda list
使用conda命令查看可用包的列表
一个可用conda安装的包的列表,按照Python版本分类,可以从这个地址获得:
http://docs.continuum.io/anaconda/pkg-docs.html
查找一个包
首先让我们来检查我们需要的这个包是否可以通过conda来安装:
conda search beautifulsoup4
它展示了这个包,所以我们知道它是可用的。
安装一个新包
我们将在当前环境中安装这个Beautiful Soup包,使用conda命令如下;
conda install --name bunnies beautifulsoup4
提示:你必须告诉conda你要安装环境的名字(-n bunies)否则它将会被安装到当前环境中。
现在激活bunnies环境,并且用conda list来显示哪些程序被安装了。
·Linux,OS X:source activate bunnies
从Anaconda.org安装一个包
如果一个包不能使用conda安装,我们接下来将在Anaconda.org网站查找。Anaconda.org向公开和私有包仓库提供包管理服务。Anaconda.org是一个连续分析产品。
提示:你在Anaconda.org下载东西的时候不强制要求注册。
为了从Anaconda.org下载到当前的环境中,我们需要通过指定Anaconda.org为一个特定通道,通过输入这个包的完整路径来实现。
在浏览器中,去 http://anaconda.org 网站。我们查找一个叫“bottleneck”的包,所以在左上角的叫“Search Anaconda Cloud”搜索框中输入“bottleneck”并点击search按钮。
Anaconda.org上会有超过一打的bottleneck包的版本可用,但是我们想要那个被下载最频繁的版本。所以你可以通过下载量来排序,通过点击Download栏。
点击包的名字来选择最常被下载的包。它会链接到Anaconda.org详情页显示下载的具体命令:
conda install --channel https://conda .anaconda.ort/pandas bottleneck
检查被下载的包
通过pip命令来安装包
对于那些无法通过conda安装或者从Anaconda.org获得的包,我们通常可以用pip(“pip install packages”的简称)来安装包。
提示: pip只是一个包管理器,所以它不能为你管理环境。pip甚至不能升级python,因为它不像conda一样把python当做包来处理。但是它可以安装一些conda安装不了的包,和vice versa(此处不会翻译)。pip和conda都集成在Anaconda或miniconda里边。
我们激活我们想放置程序的环境,然后通过pip安装一个叫“See”的程序。
·Linux,OS X: source activate bunnies
检查pip安装
检查See是否被安装:
安装商业包
安装商业包与你安装其他的包的过程异常。举个例子,让我们安装并删除一个更新的商业包的免费试用 IOPro,可以加速你的python处理速度:
conda install iopro
提示:除了学术使用,该版本在30天后试用期满
你现在可以安装以及检查你想用conda安装的任何包,无论使用conda命令、从Anaconda.org下载或者使用pip安装,无论开源软件还是商业包。
5. 移除包、环境、或者conda
如果你愿意的话。让我们通过移除一个或多个试验包、环境以及conda来结束这次测试指导。
移除包
假设你决定不再使用商业包IOPro。你可以在bunnies环境中移除它。
conda remove -n bunnies iopro
确认包已经被移除
使用conda list命令来确认IOPro已经被移除了
移除环境
我们不再需要snakes环境了,所以输入以下命令:
conda remove -n snakes --all
确认环境被移除
为了确认snakes环境已经被移除了,输入以下命令:
conda info --envis
snakes不再显示在环境列表里了,所以我们知道它已经被删除了
删除conda
Linux,OS X:
移除Anaconda 或 Miniconda 安装文件夹
rm -rf ~/miniconda OR rm -rf ~/anaconda
Windows:
去控制面板,点击“添加或删除程序”,选择“Python2.7(Anaconda)”或“Python2.7(Miniconda)”并点击删除程序。
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类被废弃