Linux下切換Python版本的幾種方法

本篇博文面向Linux用戶,在Ubuntu下測試經過javascript

0 爲何須要有兩個版本的Python

Python2和Python3不兼容是每一個接觸過Python的開發者都知道的事,雖然說Python3是將來,可是仍然有不少項目採用Python2開發。Linux的許多發行版本(如Ubuntu)都會自帶Python2.7,可是當咱們準備開發一個Python3項目的時候,咱們該怎麼辦?java

那就把Python3也下咯。嗯,Linux下確實是能夠兩個一塊兒裝的,可是問題是你怎麼切換兩個版本的Python。python

1 修改別名

首先先來看一下咱們的默認Python版本sql

$ python --version Python 2.7.6 

而後咱們修改一下別名shell

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

/usr/bin/python3這個路徑是怎麼找到的呢?vim

通常來講,軟件的二進制文件均可以在/usr/bin/usr/local/bin(這個優先級高一點)找到。固然若是你是Debian系的Linux,能夠這麼找(前提是你已經安裝了Python3):ruby

$ dpkg -L python3 

上面的別名修改只是暫時性的,重開一個窗口後配置就不見了。若是要使每一個窗口都使用這個別名,能夠編輯~/.bashrc(若是你是別的shell的話,就不是這個文件,如zsh是~/.zshrc),把alias配置寫入文件。bash

修改別名優勢是足夠簡單,可是切換不靈活。oracle

2 連接文件

/usr/bin中創建一個連接文件指向Python3。app

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

跟修改別名同樣,也是修改不夠靈活。

3 採用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。

4 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 

5 總結

前面兩種方法不推薦使用。

使用 update-alternatives 切換版本只適用於Debian系的Linux。

推薦使用 virtualenvwrapper 來管理虛擬環境和版本。

另外,本文介紹的切換不一樣版本軟件的方法,除了 virtualenvwrapper 以外,前面3種方法都適用於其餘軟件,好比Java(open-jdk和oracle-jdk)。

相關文章
相關標籤/搜索