Linux下切换Python2和Python3的4种方法

本篇博文面向Linux用户,在Linux下(Ubuntu)下测试通过,Win用户嘛,……

0x00 为什么需要有两个版本的Python

Python2和Python3不兼容是每个接触过Python的开发者都知道的事,虽说Python3是未来,但是仍然有很多项目采用Python2开发。Linux的许多发行版本(如Ubuntu)都会自带Python2.7,但是当我们准备开发一个Python3项目的时候,我们该怎么办?

那就把Python3也下咯。嗯,Linux下确实是可以两个一起装的,但是问题是你怎么切换两个版本的Python。

0x01 修改别名

首先先来看一下我们的默认Python版本

$ python --version
Python 2.7.6

然后我们修改一下别名

$ alias python='/usr/bin/python3'
$ python --version
Python 3.4.3  # 版本已经改变

/usr/bin/python3这个路径是怎么找到的呢?

一般来说,软件的二进制文件都可以在/usr/bin/usr/local/bin(这个优先级高一点)找到。当然如果你是Debian系的Linux,可以这么找(前提是你已经安装了Python3):

$ dpkg -L python3

上面的别名修改只是暂时性的,重开一个窗口后配置就不见了。如果要使每个窗口都使用这个别名,可以编辑~/.bashrc(如果你是别的shell的话,就不是这个文件,如zsh是~/.zshrc),把alias配置写入文件。

修改别名优点是足够简单,但是切换不灵活。

0x02 链接文件

/usr/bin中建立一个链接文件指向Python3。

$ ln -s python /usr/bin/python3
$ python --version
Python 3.4.3

跟修改别名一样,也是修改不够灵活。

0x03 采用update-alternatives 切换版本

update-alternatives是Debian提供的一个工具(非Debian系的就不用看了),原理类似于上面一个办法,也是通过链接的方式,但是其切换的过程非常方便。

首先看一下update-alternatives的帮助信息:

$ update-alternatives --help
用法:update-alternatives [<选项> ...] <命令>

命令:
–install <链接> <名称> <路径> <优先级>
[–slave <链接> <名称> <路径>] …
在系统中加入一组候选项。
–remove <名称> <路径> 从 <名称> 替换组中去除 <路径> 项。
–remove-all <名称> 从替换系统中删除 <名称> 替换组。
–auto <名称> 将 <名称> 的主链接切换到自动模式。
–display <名称> 显示关于 <名称> 替换组的信息。
–query <名称> 机器可读版的 –display <名称>.
–list <名称> 列出 <名称> 替换组中所有的可用候选项。
–get-selections 列出主要候选项名称以及它们的状态。
–set-selections 从标准输入中读入候选项的状态。
–config <名称> 列出 <名称> 替换组中的可选项,并就使用其中
哪一个,征询用户的意见。
–set <名称> <路径> 将 <路径> 设置为 <名称> 的候选项。
–all 对所有可选项一一调用 –config 命令。

<链接> 是指向 /etc/alternatives/<名称> 的符号链接。
(如 /usr/bin/pager)
<名称> 是该链接替换组的主控名。
(如 pager)
<路径> 是候选项目标文件的位置。
(如 /usr/bin/less)
<优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。

选项:
–altdir <目录> 改变候选项目录。
–admindir <目录> 设置 statoverride 文件的目录。
–log <文件> 改变日志文件。
–force 就算没有通过自检,也强制执行操作。
–skip-auto 在自动模式中跳过设置正确候选项的提示
(只与 –config 有关)
–verbose 启用详细输出。
–quiet 安静模式,输出尽可能少的信息。不显示输出信息。
–help 显示本帮助信息。
–version 显示版本信息。

我们仅需要了解3个参数就行了

  • --install <链接> <名称> <路径> <优先级>:建立一组候选项
  • --config <名称>:配置<名称>组中的可选项,并选择使用其中哪一个
  • --remove <名称> <路径>:从<名称>中去掉<路径>选项

首先我们先看一下有没有关于Python的可选项:

$ update-alternatives --display python
update-alternatives: 错误: 无 python 的候选项

那首先先建立python的组,并添加Python2和Python3的可选项

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2 # 添加Python2可选项,优先级为2
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4 1 #添加Python3可选项,优先级为1

注意,这里的/usr/bin/python链接文件,两个可选项必须是一样的,这样这个链接文件才可以选择两个不同的可选项去链接。

这时如果我们查看/usr/bin/python这个文件时,会发现它已经链接到了/etc/alternatives/python

lrwxrwxrwx 1 root root        24  6月 19 18:39 python -> /etc/alternatives/python

然后我们再看一下版本

$ python --version
Python 2.7.6

为什么还是Python2,看一下配置

$ sudo update-alternatives --config python
有 2 个候选项可用于替换 python (提供 /usr/bin/python)

选择 路径 优先级 状态
------------------------------------------------------------
0 /usr/bin/python2.7 2 自动模式
1 /usr/bin/python2.7 2 手动模式
2 /usr/bin/python3.4 1 手动模式
要维持当前值[]请按回车键,或者键入选择的编号:

原来是因为默认选中了自动模式,而Python2的优先级高于Python3,这时候只要键入2,就可以使用Python3了。

如果你想要删除某个可选项的话:

$ sudo update-alternatives --remove python /usr/bin/python2.7

update-alternatives只适用于Debian系Liunx。

0x04 virtualenvwrapper 切换版本

virtualenvwrapper是管理Python虚拟环境的工具,可以很方便的为不同的项目建立独立的环境,每个项目都可以安装自己的依赖,同时也支持在不同的虚拟环境中存在不同版本的Python。

首先安装virtualenvwrapper,可以选择apt安装或者pip安装

apt安装

$ sudo apt-get install virtualenvwrapper

pip安装

$ sudo pip install virtualenvwrapper

当你需要使用Python2开发项目时,建立一个Python2的虚拟环境:

$ mkvirtualenv -p /usr/bin/python2 env27

当你需要Python3开发时:

$ mkvirtualenv -p /usr/bin/python3.4 env34

然后可以随时切换不同的虚拟环境:

$ workon env27  # 进入Python2环境
$ workon env34  # 进入Python3环境

更爽的是,你可以在进入虚拟环境的同时切换到项目目录,只需要编辑$VIRTUAL_ENV/bin/postactivate这个文件即可:

$ vim $VIRTUAL_ENV/bin/postactivate  #前提是已经进入对应的虚拟环境

在文件中添加切换目录的命令:

cd  /path/to/your/project

0x05 总结

前面两种方法不推荐使用。

使用 update-alternatives 切换版本只适用于Debian系的Linux。

推荐使用 virtualenvwrapper 来管理虚拟环境和版本。

另外,本文介绍的切换不同版本软件的方法,除了 virtualenvwrapper 之外,前面3种方法都适用于其他软件,比如Java(open-jdk和oracle-jdk)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

异步EJB只是一个Gi头吗?

在之前的文章&#xff08; 此处和此处 &#xff09;中&#xff0c;我展示了当服务器负载沉重时&#xff0c;创建非阻塞异步应用程序可以提高性能。 EJB 3.1引入了Asynchronous批注&#xff0c;用于指定方法将在将来的某个时间返回其结果。 Javadocs声明必须返回void或Future 。…

常见的清除浮动的五种解决办法

方法一:使用带clear属性的空元素 在浮动元素后使用一个空元素如 <div class="clear"></div> 并在CSS中赋予 .clear{clear:both;} 属性即可清理浮动。亦可使用 <br class="clear" /> 或 <hr class="clear" /> …

Kali环境下安装python3

Kali环境下安装python3 参考&#xff1a; 由于kali环境下是自动安装了python 2.7&#xff0c;没有python3以上的版本&#xff0c;现在开始安装python 1. 先下载python3的tar包 进入这个目录&#xff1a; cd /usr/local/ 创建一个新文件夹python3&#xff1a; mkdir /usr/loc…

用汇编语言写的第一个DOS程序

今天整理电脑时&#xff0c;看到两三年前学习汇编语言时写的显示“Hello”的程序。不禁感叹那个时候学得如此用心&#xff0c;同样的功能&#xff0c;我竟然用了四种写法。现贴出源码&#xff0c;为了以后继续学习&#xff0c;也为了给初学者一点启发。(删掉注释了&#xff0c;…

对安卓应用进行加固签名,为上架各大应用市场做准备

上架安卓各大应用市场之前需要对自己的应用进行签名加固&#xff0c;签名是为了证明你是这个应用的开发者&#xff0c;软著也是一种方式&#xff0c;这是不做介绍&#xff0c;加固是为了从安全角度给安装包加一个保护层&#xff0c;防止被恶意破解及攻击。下面简单介绍一下签名…

ADO.Net 事务操作

DbTransaction转载于:https://www.cnblogs.com/lxf1117/p/4773742.html

docker安装pocbox(漏洞测试验证辅助平台)

PoCBox - 漏洞测试验证辅助平台 开发这个平台的初衷是帮助自己在漏洞挖掘测试中更加方便快捷的辅助自己进行漏洞验证。 一开始的想法是框架化、模块化&#xff0c;但是开发着开发着就发现有点累&#xff0c;于是采用了原始的方法去开发&#xff1a;原生JavaScriptPHP。 PoCBo…

内存映射获取行数_使用内存映射文件获取巨大的矩阵

内存映射获取行数总览 矩阵可能真的很大&#xff0c;有时甚至比您可以容纳在一个数组中的要大。 您可以通过具有多个数组来扩展最大大小&#xff0c;但这会使堆大小确实很大且效率低下。 一种替代方法是在内存映射文件上使用包装器。 内存映射文件的优点是它们对堆的影响很小&a…

大前端最强vscode教程(基础篇)

这段时间入职了一家外包公司的前端工程师岗位,前端编辑器用起来,前端一般会用到几个编译器,VScode、sublime text3、webstorm、Hbuid等,这里主要介绍VScode. 初次使用vscode时各种不适应,所有需要用到的功能貌似都需要单独安装插件才能用。这让很多初次使用vscode的朋友有…

pdf转换成可编辑的word转换器

头条号&#xff1a;近期有不少网友向我咨询有关PDF转换成可编辑的Word文档的软件&#xff0c;小Q认为网上虽然有很多类似的PDF转换成Word转换器&#xff0c;但是从性能以及转换效果来看&#xff0c;迅捷PDF转换成Word转换器免费版v6.0算是比较理想的选择&#xff0c;有需要的童…

edusrc0day挖掘技巧

网瑞达web资源管理系统0day ps&#xff1a; 作为在edusrc的小白&#xff0c;经常看见大师傅们的刷屏&#xff0c;我也很向往能像大师们一样有一次刷屏的机会&#xff0c;于是有了这一次的渗透之旅。 思路&#xff1a;要想刷屏上分&#xff0c;就得找系统来挖掘&#xff0c;对…

通过NFS访问编年引擎

总览 编年史引擎是数据虚拟化层。 它抽象化了访问&#xff0c;操纵和订阅各种数据源的复杂性&#xff0c;因此该数据的用户无需知道实际存储数据的方式或位置。 这意味着该数据可以在系统之间迁移或以更有效的方式存储&#xff0c;但对于开发人员来说使用起来会很复杂。 基本接…

个人或者公司如何写版权认证的证明文件?

项目场景&#xff1a; 现在好多平台都在做知识付费&#xff0c;比如百度文库、CSDN、微博、头条、知乎等等&#xff0c;因此我想给大家做一些付费文档&#xff0c;想上传到百度文库的知识店铺 问题描述&#xff1a; 一般人不知道这个版权认证文件怎么写&#xff0c;怎么弄&am…

Bypass WAF实战总结

0X00前言 上个月刷了一波洞&#xff0c;然后这个月初远程支持了一个HW&#xff0c;在文件上传getshell的时候&#xff0c;碰到个各式各样的云waf&#xff0c;通过一个月的实战&#xff0c;总结了几个比较实用的技巧&#xff0c;文章总结的不全&#xff0c;只是基于我实战中用到…

Git教程学习总结(分享给热爱学习的你,团队的协作离不开你呀)

目录 Git 教程 Git 安装配置 Git 工作流程 Git 工作区、暂存区和版本库 Git 创建仓库 Git 基本操作 Git 分支管理 Git 查看提交历史 git log git blame Git 标签 Git 远程仓库(Github) Git Gitee Git 服务器搭建 Git 教程 Git 是一个开源的分布式版本控制系统&…

Linux的shell编写

-eq //等于 -ne //不等于 -gt //大于 -lt //小于 ge //大于等于 le //小于等于实验中遇到的问题&#xff1a; 1.NAMEuser1 中间不能有空格 2.[ xxx ] xxx前面和后面要有空格 任务1&#xff1a;使用case语句编…

rest spring_Spring的REST服务发现性,第5部分

rest spring这是关于使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第五篇。 上一篇文章介绍了RESTful服务HATEOAS的可发现性的概念&#xff0c;然后介绍了一些由测试驱动的实际方案。 本文将重点介绍可发现性的实际实现以及…

为啥这么多程序员大佬学习Cortex-M3

Cortex-M3是一个32位处理器内核。内部的数据路径是32位的&#xff0c;寄存器是32位的&#xff0c;存储器接口也是32位的。CM3采用了哈佛结构&#xff0c;拥有独立的指令总线和数据总线&#xff0c;可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线&#xff0c;…

Ffuf使用教程

kali安装教程链接&#xff1a;https://www.iculture.cc/cybersecurity/pig210 该工具用途广泛&#xff0c;可用于多种用途。一些用途&#xff1a; • 目录发现&#xff0c;可选择在 URL 中的任何位置进行模糊测试。 • 子域名发现 • 使用各种 HTTP 方法进行模糊测试。 安装 …

PHP中的__toString方法(实现JS里的链式操作)

_toString方法是在打印对象时自动调用的魔术方法,如果不声明会报以下错 Catchable fatal error: Object of class String could not be converted to 示例: PHP里有很多的字符串函数,假如要先过滤字符首尾的空格,再求出字符串的长度,一般会这么写:strlen(trim($str));如果要实…