如何在一台电脑上同时使用 Python 2 和 Python 3

Python 的版本是这几年被开发者诟病的一大槽点,也让众多新手头疼不已。逐渐退居二线的老版本 2 存在不少缺陷但应用广泛,而新版本 3 为了彻底解决历史遗留问题决定另起炉灶不向后兼容。

对于开发者来说,如果要更新版本,将有大量的代码移植工作,同时还得考虑外部依赖库的兼容性。而对于学习者来说,最大的问题莫过于:我要学 2 还是学 3?

不过今天要说的不是 2 与 3 的选择,而是另一个事情。如果你想兼容并包地看下两个版本的教程,或是已经基本掌握一个版本,打算 get 另一个版本时,就必须要面对如何在你的电脑上同时使用 Python 2 和 Python 3 的问题。

Linux

如果你是 Linux 系统,通常都默认安装了 Python 2.x 版本,在命令行下查看版本:

python -V

而通过包管理或者编译安装的 Python 3 版本,会是另一个名字:python3(也有的是带小版本号如 python3.4)。再查看版本:

python3 -V

因此只要用不同的命令,就可以区分版本了。

python test_v2.py python3 test_v3.py

如果想要用 python3 替换默认的 python,常见的做法是修改系统 PATH 路径中的 python,让它成为一个指向 python3 的软链接,或者用 alias,将 python 指定为 python3 的别名。

Mac

Mac 系统也默认装有 Python 2.x 版本。安装3版本一种较方便的方法是使用 homebrew(需自行安装):

brew install python3

同样,它叫做 python3,与原有的 python 区别开。

Windows

而在 Windows 上,默认没有 Python,需要下载安装。官网上提供有不同版本,安装后路径不同,但执行程序名称均为 python.exe。

看上去好像要复杂一些。但其实官方已经很贴心地提供了一个解决方案:当你安装 Python 3 版本之后,就会同时安装一个名为 py.exe 的 Python 启动器。可以用它替代 python 命令:

py test.py

并且可以指定版本(前提是安装了对应版本):

py -2 test_v2.py py -3 test_v3.py

上一次说到可以通过 pip 来安装第三方模块(参见 如何安装 Python 的第三方模块)。如果系统里有了两个版本的 Python,用 pip 时需注意,究竟是安装在了哪个版本上。

通过命令可查看 pip 默认的对应版本:

pip -V

为了防止出现版本对应混乱的情况,除了默认的 pip 之外,每个版本都有对应的副本,如 pip2、pip2.7、pip3、pip3.5。所以当需要明确安装版本时,可使用对应的命令:

pip2 install ... pip3 install ...

除此之外,Windows 上也可以这样做:

py -2 -m pip install ... py -3 -m pip install ...

当然,这些的前提是将对应目录加到了系统变量 PATH 路径里,包括 Python 安装目录及其 Scripts 子目录。如果没有在安装时勾选全部可选项,让安装程序自动帮你设置好,则需要手动添加。

还有种优雅的方法控制不同 Python 版本的共存,就是通过 pyenv 或者 virtualenv 创建虚拟开发环境。之后也会来说一说。

点击文章下方的“阅读原文”进入 python 官网,可下载 Python 2 和 3 的最新版本。

原文发布于微信公众号 - Crossin的编程教室(crossincode)

原文发表时间:2016-05-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏源码之家

新浪应用Dzx!Sae完美反向代理绑米教程

1954
来自专栏性能与架构

linux 查看I/O状态的常用命令

介绍下linux的3个常用I/O相关命令,解决I/O压力过大问题时很有用 iostat 查看磁盘的I/O状态 iotop 查看I/O进程排名 lsof 查...

5459
来自专栏云计算教程系列

如何在Debian 7上使用wget命令寻找失效的链接

您多少次点击网页上的HTML链接只是为了获得404 Not Found错误?存在断开的链接,因为网页有时会随时间移动或删除。网站管理员的工作是在人类网络访问者或...

4003
来自专栏前端杂货铺

node中创建服务进程

背景 在node工程部署中,常常涉及到三方:本地客户端、跳板机和服务器(集群)。在通过git触发gitlab hook脚本后,需要在跳板机中执行相应的ssh命令...

3116
来自专栏Java学习网

提升效率的Linux终端快捷操作汇总

提升效率的Linux终端快捷操作汇总 很多普通 Linux 桌面用户都对使用终端感到排斥和恐惧,其实它没大家想的那么复杂,很多常见操作都可以直接在终端中进行,如...

3237
来自专栏MixLab科技+设计实验室

可视化爬虫SPY | 01

今天把我去年开发等可视化爬虫SPY整理了下,虽然它还在demo阶段,但我已经在经常使用来爬取一些数据了,用的过程还是比较方便的,区别于其他纯代码的爬虫工具。 S...

4928
来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 对象设计器使用帮助

介绍        AgileEAS.NET平台做为一个快速应用开发平台,其目的为是为了提高应用软件的生产效率,如何软件开发的生产效率,方法是多种多样的;使用工...

1885
来自专栏后端云

Raft算法和Gossip协议

raft 集群中的每个节点都可以根据集群运行的情况在三种状态间切换:follower, candidate 与 leader。leader 向 follower...

3963
来自专栏前端小作坊

加载第三方JS的各种姿势

如果你的网站上面有很多第三方JS代码,那么“下载速度的不可控”很有可能导致你的网站会被拖慢。因为JS在执行的时候会影响到页面的DOM和样式等情况。浏览器在解析渲...

3561
来自专栏令仔很忙

静态网页VS动态网页

在做《牛腩新闻发布系统》的时候,建立的网页有.html的,还有.aspx,刚开始接触,还以为这些东西是一样的呢,当看ASP.NET视频的时候,听见里面讲课的老...

1811

扫码关注云+社区

领取腾讯云代金券