為什么需要有兩個版本的Python
Python2和Python3不兼容是每個接觸過Python的開發(fā)者都知道的事笛园,雖說Python3是未來茁瘦,但是仍然有很多項目采用Python2開發(fā)攘蔽。Linux的許多發(fā)行版本(如Ubuntu)都會自帶Python2.7瞳脓,但是當(dāng)我們準備開發(fā)一個Python3項目的時候逐样,我們該怎么辦景用?
那就把Python3也下咯。嗯坤邪,Linux下確實是可以兩個一起裝的熙含,但是問題是你怎么切換兩個版本的Python。
修改別名
首先先來看一下我們的默認Python版本
$ python --version
Python 2.7.6
然后我們修改一下別名
$ alias python='/usr/bin/python3'
$ python --version
Python 3.4.3 # 版本已經(jīng)改變
/usr/bin/python3
這個路徑是怎么找到的呢艇纺?
一般來說怎静,軟件的二進制文件都可以在 /usr/bin
或 /usr/local/bin
(這個優(yōu)先級高一點)找到。當(dāng)然如果你是Debian系的Linux黔衡,可以這么找(前提是你已經(jīng)安裝了Python3):
$ dpkg -L python3
上面的別名修改只是暫時性的蚓聘,重開一個窗口后配置就不見了。如果要使每個窗口都使用這個別名盟劫,可以編輯 ~/.bashrc
(如果你是別的shell的話夜牡,就不是這個文件,如zsh是 ~/.zshrc
)侣签,把alias配置寫入文件塘装。
修改別名優(yōu)點是足夠簡單,但是切換不靈活影所。
鏈接文件
在 /usr/bin
中建立一個鏈接文件指向Python3蹦肴。
$ ln -s python /usr/bin/python3
$ python --version
Python 3.4.3
跟修改別名一樣,也是修改不夠靈活猴娩。
采用update-alternatives 切換版本
update-alternatives是Debian提供的一個工具(非Debian系的就不用看了)阴幌,原理類似于上面一個辦法勺阐,也是通過鏈接的方式,但是其切換的過程非常方便裂七。
首先看一下update-alternatives的幫助信息:
$ update-alternatives --help
用法:update-alternatives [<選項> ...] <命令>
命令:
--install <鏈接> <名稱> <路徑> <優(yōu)先級>
[--slave <鏈接> <名稱> <路徑>] ...
在系統(tǒng)中加入一組候選項皆看。
--remove <名稱> <路徑> 從 <名稱> 替換組中去除 <路徑> 項。
--remove-all <名稱> 從替換系統(tǒng)中刪除 <名稱> 替換組背零。
--auto <名稱> 將 <名稱> 的主鏈接切換到自動模式腰吟。
--display <名稱> 顯示關(guān)于 <名稱> 替換組的信息。
--query <名稱> 機器可讀版的 --display <名稱>.
--list <名稱> 列出 <名稱> 替換組中所有的可用候選項徙瓶。
--get-selections 列出主要候選項名稱以及它們的狀態(tài)毛雇。
--set-selections 從標準輸入中讀入候選項的狀態(tài)。
--config <名稱> 列出 <名稱> 替換組中的可選項侦镇,并就使用其中
哪一個灵疮,征詢用戶的意見。
--set <名稱> <路徑> 將 <路徑> 設(shè)置為 <名稱> 的候選項壳繁。
--all 對所有可選項一一調(diào)用 --config 命令震捣。
<鏈接> 是指向 /etc/alternatives/<名稱> 的符號鏈接。
(如 /usr/bin/pager)
<名稱> 是該鏈接替換組的主控名闹炉。
(如 pager)
<路徑> 是候選項目標文件的位置蒿赢。
(如 /usr/bin/less)
<優(yōu)先級> 是一個整數(shù),在自動模式下渣触,這個數(shù)字越高的選項羡棵,其優(yōu)先級也就越高。
選項:
--altdir <目錄> 改變候選項目錄嗅钻。
--admindir <目錄> 設(shè)置 statoverride 文件的目錄皂冰。
--log <文件> 改變?nèi)罩疚募? --force 就算沒有通過自檢,也強制執(zhí)行操作养篓。
--skip-auto 在自動模式中跳過設(shè)置正確候選項的提示
(只與 --config 有關(guān))
--verbose 啟用詳細輸出秃流。
--quiet 安靜模式,輸出盡可能少的信息柳弄。不顯示輸出信息剔应。
--help 顯示本幫助信息。
--version 顯示版本信息语御。
我們僅需要了解3個參數(shù)就行了
-
--install <鏈接> <名稱> <路徑> <優(yōu)先級>
:建立一組候選項 -
--config <名稱>
:配置 <名稱>組中的可選項,并選擇使用其中哪一個 -
--remove <名稱> <路徑>
:從 <名稱> 中去掉 <路徑>選項
首先我們先看一下有沒有關(guān)于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可選項席怪,優(yōu)先級為2
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4 1 # 添加Python3可選項应闯,優(yōu)先級為1
注意,這里的 /usr/bin/python
鏈接文件挂捻,兩個可選項必須是一樣的碉纺,這樣這個鏈接文件才可以選擇兩個不同的可選項去鏈接。
這時如果我們查看 /usr/bin/python
這個文件時,會發(fā)現(xiàn)它已經(jīng)鏈接到了 /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)。
選擇 路徑 優(yōu)先級 狀態(tài)
------------------------------------------------------------
* 0 /usr/bin/python2.7 2 自動模式
1 /usr/bin/python2.7 2 手動模式
2 /usr/bin/python3.4 1 手動模式
要維持當(dāng)前值[*]請按回車鍵态贤,或者鍵入選擇的編號:
原來是因為默認選中了自動模式舱呻,而Python2的優(yōu)先級高于Python3,這時候只要鍵入2悠汽,就可以使用Python3了箱吕。
如果你想要刪除某個可選項的話:
$ sudo update-alternatives --remove python /usr/bin/python2.7
update-alternatives只適用于Debian系Liunx。
virtualenvwrapper 切換版本
virtualenvwrapper是管理Python虛擬環(huán)境的工具柿冲,可以很方便的為不同的項目建立獨立的環(huán)境茬高,每個項目都可以安裝自己的依賴,同時也支持在不同的虛擬環(huán)境中存在不同版本的Python假抄。
首先安裝virtualenvwrapper怎栽,可以選擇apt安裝或者pip安裝
apt安裝
$ sudo apt-get install virtualenvwrapper
pip安裝
$ sudo pip install virtualenvwrapper
當(dāng)你需要使用Python2開發(fā)項目時,建立一個Python2的虛擬環(huán)境:
$ mkvirtualenv -p /usr/bin/python2 env27
當(dāng)你需要Python3開發(fā)時:
$ mkvirtualenv -p /usr/bin/python3.4 env34
然后可以隨時切換不同的虛擬環(huán)境:
$ workon env27 # 進入Python2環(huán)境
$ workon env34 # 進入Python3環(huán)境
更爽的是宿饱,你可以在進入虛擬環(huán)境的同時切換到項目目錄熏瞄,只需要編輯 $VIRTUAL_ENV/bin/postactivate
這個文件即可:
$ vim $VIRTUAL_ENV/bin/postactivate #前提是已經(jīng)進入對應(yīng)的虛擬環(huán)境
在文件中添加切換目錄的命令:
cd /path/to/your/project
總結(jié)
前面兩種方法不推薦使用。
使用 update-alternatives 切換版本只適用于Debian系的Linux刑棵。
推薦使用 virtualenvwrapper 來管理虛擬環(huán)境和版本巴刻。
另外,本文介紹的切換不同版本軟件的方法蛉签,除了 virtualenvwrapper 之外胡陪,前面3種方法都適用于其他軟件,比如Java(open-jdk和oracle-jdk)碍舍。
轉(zhuǎn)載于:https://blog.csdn.net/justdoithai/article/details/70310095