python2.X和python3.X在同一平台下的切换技巧

最近在自己的电脑上同时安装了python2.7.11和python3.5.1

在网上搜了一些答案,主要还是参照《learning python》第五版里的appendix B,以及官方文档:Python Launcher for Windows,总结如下:

从python3.3开始,安装python的时候会自动安装一个launcher,包含两个程序:

py.exe for console programs  可以运行.py文件

pyw.exe for nonconsole (typically GUI) programs  可以运行.pyw文件

它允许我们在程序中提前声明使用哪一版本的python(详见方法一),或者可以在command-line里利用command-line argument来声明python的版本(详见方法二)。

在本文中我们均使用如下的脚本(我们把它命名为script.py保存起来)来进行测验:

	1>	import sys
2> print(sys.version.splict()[0]) #打印出运行该程序的python版本

方法一

我们在script.py的第一行添加一行语句,以#!开头(#!被称作shebang,熟悉linux的程序员应该有所了解),改语句可以有如下四种(效果都是一样的):

1.  #!/usr/bin/env python*

2.  #!/usr/bin/python*

3.  #!/usr/local/bin/python*

4.  #!python*

其中*是指python的版本,如果此处*是2,则会从我们电脑中安装的最新版的python2来运行该脚本。例如我的电脑中同时装了python2.5和python2.6,那么它会自动选择python2.6来运行脚本。如果此处*是3,也是一样的,会选择最新一版的python3来运行。

当然,如果我们把*指定成某一明确的python版本,那么launcher会直接使用此版本来运行该脚本,前提是该版本存在。例如在脚本开头添加#!python2.6,会直接用python2.6来运行脚本。

注意:

1.  只有以上四种情况可以在脚本开头用来声明python的版本。

2.  #!后面可以加上空格。

3.  如果没有使用以上四种方法的任何一种,会默认使用电脑中安装的python2.X的最新一版来运行脚本。

方法二

我们可以不用在脚本中的第一行提前声明使用何种版本的python,而是可以在command-line中使用py语句,加上command-line argument来切换python版本。

我们这里还是以script.py为例,在command-line中输入

	py -2 script.py

其效果和在脚本开头添加#!python2是一样的,我们也开始明确某一python版本,例如我们想使用python3.3

	py -3.3 script.py

以上两个例子中的-2和-3.3即为command-line argument。

注意:

方法一和方法二同时存在时,我们以方法二为准。

例如,我在script.py开头添加#!python2.7,而在command-line中输入py -3.5 script.py,那么launcher还是会用python3.5来运行该脚本。

总结

一旦安装pyton3.3以上版本,就会自动安装launcher,并且将py.exe和pyw.exe自动关联到windows registry(注册表),我们双击任何.py或者.pyw文件时都会使用相应的py.exe或者pyw.exe来执行。

一般不明确声明,都会默认使用电脑中安装的最新版的python2.X或者python3.X来运行。可以通过在command prompt(即DOS)中设置PY_PYTHON来暂时修改默认值(在powershell中设置无效)。至于永久修改默认值,我暂时还没细究,读者可以自行google。

之前我安装的是python2.7,在command-line中可以用python script.py来执行。在安装完python3.5之后,python script.py依然使用python2.7来执行。

本人尚在学习python中,本文是以我目前所掌握的知识来对launcher进行的理解。可能有所纰漏,还望读者指正。

另,转载本文请表明出处:http://www.cnblogs.com/an9wer/p/5564284.html

python2.X和python3.X在同一平台下的切换技巧的更多相关文章

  1. Redis - Windows平台下怎么切换db并且清理数据

    Redis 本身支持16个数据库(0~15),通过 数据库id 设置,默认为0.在Windows平台下可以通过启动redis-cli.exe来进入客户端,客户端默认连接数据库0,在客户端里可以输入各种 ...

  2. python2.7与3.5共存windows平台安装

    文:铁乐与猫 2018-3-18 周日 01.首先是安装python2.7: 官网下载 https://www.python.org 点击安装包进行安装 可以选择自定义的路径 将默认打x的[add p ...

  3. Python2.X和Python3.X的w7同时安装使用

    一.介绍 Python([ˈpaɪθən])是一种面向对象.解释型计算机程序设计语言.Python语法简洁.清晰,具有丰富和强大的类库. Python源代码遵循GPL(GNU General Publ ...

  4. 烂泥:python2.7和python3.5源码安装

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前几天在centos6.6安装ansible时,一直提示python版本不对,导致不能安 ...

  5. python2.7和python3共存

    python2.7和python3共存 原本装了python,玩nodejs的时候需要node-gyp来编译依赖,无赖这货需要python2.5<v<3.0,那就弄两个版本吧 转载自 ht ...

  6. 自动发布工具版本从python2升级成python3后遇到的种种问题(涉及paramiko,Crypto,zipfile等等)

    从在公司实习到正式入职,一直还在被同事使用的是我写的一个自动发布工具.该工具的主要功能是:开发人员给出需要更新的代码包(zip格式),测试人员将该代码包部署到测服,这些代码包和JIRA数据库里的项目信 ...

  7. 相比于python2.6,python3.0的新特性。

    这篇文章主要介绍了相比于python2.6,python3.0的新特性.更详细的介绍请参见python3.0的文档. Common Stumbling Blocks 本段简单的列出容易使人出错的变动. ...

  8. python2.x和python3.x的区别

    一.python2.x和python3.x中raw_input( )和input( )区别 1.在Python2.x中raw_input( )和input( ),两个函数都存在,其中区别为 raw_i ...

  9. 在Windows下同时安装Python2.x和Python3.x

    前言: Python现在是两个版本共存,Python2.x和Python3.x都同时在更新.但是Python2.x和Python3.x的区别还是很多的(以后我可能会写一篇文章列举一下Python2.x ...

随机推荐

  1. qt界面不显示的原因

    用qt designer弄了一个qq.ui 新建一个空项目,把qq.ui加入,新建一个qq类,qq.h如下 #ifndef QQ#define QQ #include <QMainWindow& ...

  2. Single Number,Single Number II

    Single Number Total Accepted: 103745 Total Submissions: 218647 Difficulty: Medium Given an array of ...

  3. Yii系列总结:yii 标签用法

    yii 常用标签:label标签.文本标签.error标签.textarea标签.hidden标签.password标签.url标签.radio标签.file标签.button标签.checkBox标 ...

  4. ASP.net(C#)批量上传图片(完整版)

    摘自:http://www.biye5u.com/article/netsite/ASPNET/2010/1996.html   这篇关于ASP.Net批量上传图片的文章写得非常好,偶尔在网上看到想转 ...

  5. python学习day8

    目录 一.异常 二.多线程 三.守护线程与join 四.GIL与多线程锁 五.递归锁与信号量 六.线程间同步与交互 七.多进程 八.进程间通信与数据共享 九.进程池 一.异常 1.异常处理 在编程过程 ...

  6. 14.3.5.1 Interaction of Table Locking and Transactions 表锁和事务的相互作用

    14.3.5.1 Interaction of Table Locking and Transactions 表锁和事务的相互作用 LOCK TABLES 和UNLOCK TABLES 交互实用事务如 ...

  7. opendrive.com提供的免费网盘

    opendrive.com是由以前freehao123给大家介绍的BOXSTr免费网络硬盘演变而来的,现在BOXSTr已经无法使用了.打开BOXSTr网站就会自动跳转到opendrive.com网站. ...

  8. 【BZOJ 1088 扫雷Mine】模拟

    http://www.lydsy.com/JudgeOnline/problem.php?id=1088 2*N的扫雷棋盘,第二列的值a[i]记录第 i 个格子和它8连通的格子里面雷的数目. 第一列的 ...

  9. poj 3753 Training little cats_矩阵快速幂

    题意: 通过各种操作进行,给第i只猫花生,第i只猫吃光花生,第i只猫和第j只猫互换花生,问n次循环操作后结果是什么 很明显是构建个矩阵,然后矩阵相乘就好了 #include <iostream& ...

  10. SNMP协议具体解释

    简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议.在1988年被制定,并被Internet体系结构委员会(IAB)採纳作为一个短期的网络管理解决方式:因为SNMP的简单性,在Inter ...