Python2及Python3如何实现兼容切换

由于历史原因,Python有两个大的版本分支,Python2和Python3,又由于一些库只支持某个版本分支,所以需要在电脑上同时安装Python2和Python3,因此如何让两个版本的Python兼容,如何让脚本在对应的Python版本上运行,这个是值得总结的。

对于Ubuntu 16.04 LTS版本来说,Python2(2.7.12)和Python3(3.5.2)默认同时安装,默认的python版本是2.7.12。

当然你也可以用python2来调用。

如果想调用python3,就用python3.

对于Windows,就有点复杂了。因为不论python2还是python3,python可执行文件都叫python.exe,在cmd下输入python得到的版本号取决于环境变量里哪个版本的python路径更靠前,毕竟windows是按照顺序查找的。比如环境变量里的顺序是这样的:

那么cmd下的python版本就是2.7.12。

反之,则是python3的版本号。

这就带来一个问题了,如果你想用python2运行一个脚本,一会你又想用python3运行另一个脚本,你怎么做?来回改环境变量显然很麻烦。

网上很多办法比较简单粗暴,把两个python.exe改名啊,一个改成python2.exe,一个改成python3.exe。这样做固然可以,但修改可执行文件的方式,毕竟不是很好的方法。

我仔细查找了一些python技术文档,发现另外一个我觉得比较好的解决办法。

借用py的一个参数来调用不同版本的Python。py -2调用python2,py -3调用的是python3.

当python脚本需要python2运行时,只需在脚本前加上,然后运行py xxx.py即可。

#! python2

当python脚本需要python3运行时,只需在脚本前加上,,然后运行py xxx.py即可。

#! python3

就这么简单。

同时,这也完美解决了在pip在python2和python3共存的环境下报错,提示Fatal error in launcher: Unable to create process using '"'的问题。

当需要python2的pip时,只需

py -2 -m pip install xxx

当需要python3的pip时,只需

py -3 -m pip install xxx

python2和python3的pip package就这样可以完美分开了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 编写同时兼容Python2.x与Python3.x版本的代码的几个示例

    编写兼容Python2.x与3.x代码 当我们正处于Python 2.x到Python 3.x的过渡期时,你可能想过是否可以在不修改任何代码的前提下能同时运行在Python 2和3中.这看起来还真是一个合理的诉求,但如何开始呢?哪些Python 2 代码在 3.x 解释器执行时容易出状况呢? print vs print() 如果你想的和我一样,你或许会说print语句,这是个很好的着手点,先简单展示一下,print在2.x中是一条语句,而在3.x中它是一个关键字或者是保留字.换句话说,因为这个

  • python json.loads兼容单引号数据的方法

    Python的json模块解析单引号数据会报错,示例如下 >>> import json >>> data = "{'field1': 0, 'field2': 'hehehehe', 'field3': 'hahaha'}" >>> json.loads(data) Traceback (most recent call last): File "", line 1, in File "/usr/li

  • Python中装饰器兼容加括号和不加括号的写法详解

    使用Django的时候,我发现一个很神奇的装饰器: @login_required, 这是控制一个view的权限的,比如一个视图必须登录才可以访问,可以这样用: @login_required def my_view(request): ... return render(...) 同时,如果要达到这样一种效果:如果用户没有登录,那么就把用户重定向到登录界面,可以这样用: @login_required(login_url='/accounts/login/') def my_view(requ

  • 在python3中pyqt5和mayavi不兼容问题的解决方法

    环境: win10 64bit & Linux Mint 18.2 WinPython3.6.1,spyder,qtconsole iep3.7 问题描述: 通过http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyside下载mayavi,pyqt4,vtk等包安装后执行mayavi代码不会出现问题,突然想学pyqt5,就 pip3 install pyqt5 安装了,安装之后重新运行mayavi代码便会出错 错误提示: RuntimeError: Inva

  • windows下 兼容Python2和Python3的解决方法

    windows下同时安装了python2和python3时,都可以配置环境变量,如果在命令行里输入python命令,windows会去环境变量里寻找Python的安装位置,如果先找到pytoon2的,那么此时默认用python2,如果先找到python3,那么此时默认用python3. python命令调用 如果想要指定使用python2还是Python3,需要使用如下命令: py -2 启动python2 py -3 启动python3 注:使用此命令,python2和python3都需要配置

  • CentOS 7下安装Python 3.5并与Python2.7兼容并存详解

    本文主要给大家介绍了关于在CentOS 7下安装Python 3.5并与Python2.7兼容并存的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: CentOS 7下安装Python3.5 CentOS7默认安装了python2.7.5,当需要使用python3的时候,可以手动下载Python源码后编译安装. 1.安装python3.5可能使用的依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readl

  • Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器

    最近在做的一个项目中需要使用到HTML5中引入的WebSocket技术,本来以为应该很容易就能搞定,谁知道在真正上手开发了以后才发现有很多麻烦的地方,虽然我们是一个以前端开发和设计见长的团队,而且作为一个二手程序猿又长期不被待见,但是为了让有同样需求的朋友少走些弯路,我还是决定把实现方法贴在这个地方. 关于WebSocket的基本概念,维基百科上解释的很清楚,而且网上也能搜出来一大把,这里就略过不表,直接进入正题. 这次的问题首先有一个前提,就是得用Python来实现这个服务器,如果对具体语言没

  • 让python同时兼容python2和python3的8个技巧分享

    python邮件列表里有人发表言论说"python3在10内都无法普及".在我看来这样的观点有些过于悲观,python3和python2虽然不兼容,但他们之间差别并没很多人想像的那么大.你只需要对自己的代码稍微做些修改就可以很好的同时支持python2和python3的.下面我将简要的介绍一下如何让自己的python代码如何同时支持python2和python3. 一.放弃python 2.6之前的python版本 python 2.6之前的python版本缺少一些新特性,会给你的迁移

  • Python2及Python3如何实现兼容切换

    由于历史原因,Python有两个大的版本分支,Python2和Python3,又由于一些库只支持某个版本分支,所以需要在电脑上同时安装Python2和Python3,因此如何让两个版本的Python兼容,如何让脚本在对应的Python版本上运行,这个是值得总结的. 对于Ubuntu 16.04 LTS版本来说,Python2(2.7.12)和Python3(3.5.2)默认同时安装,默认的python版本是2.7.12. 当然你也可以用python2来调用. 如果想调用python3,就用pyt

  • Python2和Python3的共存和切换使用

    从python2到python3,这两个版本可以说是从语法.编码等多个方面上都有很大的差别.为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容,也就是说许多针对早期Python2版本设计的程式都无法在Python 3上正常执行.而且现在,python中的大多数第三方库都正在努力地修改以相容Python 3.0版本. 我之前初次安装的就是python3.6.2版本,不过在cocos开发时要运行build_native.py等文件,这些文件的语法都是python2版本的语法,由于

  • python2和python3应该学哪个(python3.6与python3.7的选择)

    首先先说一下python2与python3的选择 许多刚入门 Python 的朋友都在纠结的的问题是:我应该选择学习 python2 还是 python3? 对此,回答是:果断 Python3 !(推荐学习:Python视频教程) 可是,还有许多小白朋友仍然犹豫:那为什么还是有人推荐我学习 Python2 呢? 其实,无外乎以下一些原因: 1. 无论是 Python 还是 Pip 的下载量,都是 2 比 3 多,可见 2 仍然是主流 错!造成 2 的下载量比 3 多的原因很多,但其中很重要的一条

  • 对Python2与Python3中__bool__方法的差异详解

    学习Python面向对象编程的时候,遇到了一个很有意思的小问题.Python的__bool__方法不起作用的问题. 我反复读了我手中的教程,确认了我写的代码应该管用.可是在测试的时候却一直不通过,后来发现我实现的__bool__方法似乎并不是Python本身的接口. 代码如下: class Demo(): def __init__(self,value = 0): self.value = value def __bool__(self): return bool(self.value > 5)

  • python2和python3哪个使用率高

    python语言是在20世纪90年代诞生的,算算到现在已经是25岁的大叔级的语言了(跟它同一个时代的还有一个鼎鼎大名的java是在1995发行的, 红了几十年).但是Python真正成名比java晚了很多年,其实也主要是应用领域的时代变迁.(猜测为啥,对了大数据的出现) Python2 是Python里面一个非常重要的版本,最早的版本是从2001的时候开始的,特别是从2006年开始py2.5的发布,python的功能逐渐强大起来,慢慢开始稳定下来,并且差不多1-2年左右递增一个版本,在08年左右

  • Python2和Python3中print的用法示例总结

    前言 最近在学习python,对于python的print一直很恼火,老是不按照预期输出.在python2中print是一种输出语句,和if语句,while语句一样的东西,在python3中为了填补python2的各种坑,将print变为函数,因此导致python3中print的一些使用和python2很不一样.下面就来给大家详细的总结了关于Python2和Python3中print的用法,话不多说了,来一起看看详细的介绍吧. 一.Python2中的print用法 在Python2 中 prin

  • python版本坑:md5例子(python2与python3中md5区别)

    起步 对于一些字符,python2和python3的md5加密出来是不一样的. # python2.7 pwd = "xxx" + chr(163) + "fj" checkcode = hashlib.md5(pwd).hexdigest() print checkcode # ea25a328180680aab82b2ef8c456b4ce # python3.6 pwd = "xxx" + chr(163) + "fj"

  • python嵌套函数使用外部函数变量的方法(Python2和Python3)

    python嵌套函数使用外部函数变量的方法,Python2和Python3均可使用 python3 def b(): b = 1 def bchange(): nonlocal b b += 1 bchange() print(b) Python 2 只能这样(利用 mutable 对象): def b(): b = [1] def bchange(): b[0] += 1 bchange() print b[0]

随机推荐