中企动力 > 头条 > python指定版本

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python指定版本

Python2.x与Python3.x版本区别 企业视频课程

img

惜灵

关注

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()函数。

Anaconda多环境多版本下的python配置详解 流量视频课程

img

思卉

关注

最近学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 多版本共存问题 互联网视频课程

img

薛子骞

关注

查看更多的专业文章、课程信息、产品信息,请移步至:

“人工智能LeadAI”公众号;

官网:leadai.org.

作者: 研究路上

原文链接:https://jianshu/p/772f53c74d67

正文共2282个字,预计阅读时间10分钟。

Python 3和Python 2?

自从 Python 发布新的版本 3 以来,就一直是开发者心中的一个纠结。由于 Python 3 并不完全兼容 Python 2的语法,这导致大量的Python 2时代的优秀module在Python 3中无法使用,这些module的开发者自身也感到并没有令人特别激动的理由让自己用Python 3来对module进行重写,这导致大家都继续集体停留在Python 2的乐园里。

另一方面,Python 3在世界上还是有诸多拥趸,新开发出来的module大多数都是采用 Python 3规范进行编写,例如 tensorflow,numpy 等都发布Python 2和3两种版本。

除此之外,Python 2内部也有 2.5, 2.7等版本,Python 3内部也有 3.4, 3.5等版本。

多版本共存的刚需

由于开发任务的不同,例如hedes可能需要采用Python 3的某个爬虫库,用以采集网络文本数据,然后利用tensorflow来开发深度学习的文本情感分类算法。那么此时张三就需要调用Python 3版本下的多个库,而目前张三的Ubuntu 服务器上只有Python 2.7,因此他需要安装python 3并安装对应的python 3 module

Ubuntu 14.04安装Python 3

hedes的服务器是联想的P900 工作站,安装的系统是Ubuntu 14.04,显卡是NV-Titan-X。

Ubuntu 14.04 系统已经原生安装了 Python 2.7

1、安装 Python 3

Python 3 采用 apt-get 默认安装到 /usr/bin/python3

sudo apt-get install python3#目前系统上默认安装 Python 3.4

2、安装 Python 3.4 or 3.5

Python 3.4 采用 apt-get 默认安装到 /usr/bin/python3.4

sudo apt-get install python3.4

Python 3.5 采用 apt-get 默认安装到 /usr/bin/python3.5

# 添加 ppasudo add-apt-repository ppa:fkrull/deadsnakessudo apt-get updatesudo apt-get install python3.5

3、安装 Python 3的库

安装 Python 3的库(以 numpy 为例),安装位置是 /usr/local/lib/python3/dist-packages

# 采用 pip3 进行安装之前,先安装 python3.4-devsudo apt-get install python3.4-dev# 如果之前已经通过 apt-get 安装过了 python3-numpy,那么这里将不会对 numpy 进行安装sudo pip3 install numpy# 值得注意的是,如果先用 pip3 安装了numpy,那么 python3-numpy 还是可以用 apt-get 进行安装...,但是Python 2中就不是这样,如果已经用pip 安装过了 numpy,那么 python-numpy 就不会被安装...anyway,总之是装上了模块了

欲采用 pip 安装 Python 3.4 or Python 3.5 的库,则需要用到 virtualenv 命令,在独立环境中用 pip 进行安装,详细参照本文的下一篇

查看 module 的位置

# python3.4import numpy as npprint(np.__path__)

安装 Python 3的库(以numpy为例),安装位置是 /usr/lib/python3/dist-packages/

sudo apt-get install python3-numpy

安装 Python 3.4的库

因为其实目前无法安装 python3.4-numpy 或者 python3.5-numpy,我估计是因为目前的python3-numpy 包对Python 3的任意版本都是通用

如果要安装 python3.4-name1 的库,那么安装的位置是 /usr/lib/python3.4/dist-packages

采用 apt-get 方式的安装

采用 pip 的方式安装

shell中调用Python的不同版本

假设我们将 Python 每种版本对应的 module 都采用 pip2 or pip3进行安装,那么我们可以采用如下的方式来调用 Python 2 和 Python 3。

1、小贴士

# 查看 Python 这个可执行程序的位置which python# 查看 Python 这个文件名或文件夹名在系统中出现的位置# locate 跟 find 不同,find 是直接硬查找,而locate 是查询系统中的数据库来快速定位相关 name 出现的位置locate python

2、shell 中调用 Python 2

# 以下三种方式都可以调用 Python 2.7pythonpython2python2.7

3、shell 中调用 Python 3

# 前两种方式调用的是 Python 3.4python3python3.4# 该种方式调用的是 Python 3.5python3.5

4、进入 Python 的解释器后,就可以 import 各种module了,只要这个模块存在于对应Python 版本的lib中。

原文链接:https://jianshu/p/772f53c74d67

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:leadai.org

Python 3.X脚本——自动安装Python版本并自动配置python环境变量 互联网视频课程

img

安定

关注

Python 3.X 脚本——一键自动安装Python版本并自动配置python环境变量

使用Python 3.X 语言实现一个选择python版本后,自动化在Linux CentOS系统上安装python并配置python环境变量的脚本。

在该脚本中需要用到python的两个模块:os、sys。

其中os模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作。

OS模块重要函数和变量:

1 )、os.sep 更改操作系统中的路径分隔符。

2 )、os.getcwd()获取当前路径,这个在Python代码中比较常用。

3 )、os.listdir() 列出当前目录下的所有文件和文件夹。

4 )、os.remove() 方法可以删除指定的文件。

5 )、os.system() 方法用来运行shell命令。

6 )、os.chdir() 改变当前目录,到指定目录中。

sys模块提供了一种方便的使用操作系统函数的方法。

1 )、sys.argv: 实现从程序外部向程序传递参数。

2 )、sys.exit([arg]): 程序中间的退出,arg=0为正常退出。

3 )、sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。

4 )、sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding('utf8'),此时将系统默认编码设置为utf8。

5 )、sys.getfilesystemencoding(): 获取文件系统使用编码方式

6 )、sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

7 )、sys.platform: 获取当前系统平台。

8 )、sys.stdin,sys.stdout,sys.stderr: stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们

sys模块与os模块的区别在于:os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。

在本脚本中,实现思路为:判断当前用户是否为root用户 ---> 选择安装的软件版本 ---> 下载软件安装包 ---> 解压、配置、编译、安装 --->配置python环境变量。

其在在编写时需要注意的点有:Linux 中安装时,要注意安装python相关依赖。比如gcc,zlib-devel等;根据选择安装的python版本号进行校验判断重而走不同的逻辑实现。进行判断校验时需要留住异常情况,当出现异常错误时,使用sys模块进行退出,并在退出时返回不同的状态码。

脚本源码:

学习Python,你选哪个版本 2 vs 3 ? 行业视频课程

img

波特马多克

关注

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哪个版本适合初学者 推广视频课程

img

苦咖啡

关注

想学习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版本的切换 公司视频课程

img

舔伤

关注

这个问题其实也不是在树莓派上的问题,在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版本,看哪个最快? 企业视频课程

img

程问梅

关注

本文所选的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的支持,但他们解决了问题。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP