Linux下切換python2和python3

為什么需要有兩個版本的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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柠座,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子片橡,更是在濱河造成了極大的恐慌妈经,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捧书,死亡現(xiàn)場離奇詭異吹泡,居然都是意外死亡,警方通過查閱死者的電腦和手機经瓷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門爆哑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舆吮,你說我怎么就攤上這事揭朝《蛹” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵潭袱,是天一觀的道長柱嫌。 經(jīng)常有香客問我,道長屯换,這世上最難降的妖魔是什么编丘? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮趟径,結(jié)果婚禮上瘪吏,老公的妹妹穿的比我還像新娘。我一直安慰自己蜗巧,他們只是感情好掌眠,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幕屹,像睡著了一般蓝丙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上望拖,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天渺尘,我揣著相機與錄音,去河邊找鬼说敏。 笑死鸥跟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盔沫。 我是一名探鬼主播医咨,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼架诞!你這毒婦竟也來了拟淮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谴忧,失蹤者是張志新(化名)和其女友劉穎很泊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沾谓,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡委造,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了均驶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片争涌。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辣恋,靈堂內(nèi)的尸體忽然破棺而出亮垫,到底是詐尸還是另有隱情,我是刑警寧澤伟骨,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布饮潦,位于F島的核電站,受9級特大地震影響携狭,放射性物質(zhì)發(fā)生泄漏继蜡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一逛腿、第九天 我趴在偏房一處隱蔽的房頂上張望稀并。 院中可真熱鬧,春花似錦单默、人聲如沸碘举。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽引颈。三九已至,卻和暖如春境蜕,著一層夾襖步出監(jiān)牢的瞬間蝙场,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工粱年, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留售滤,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓台诗,卻偏偏與公主長得像完箩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拉庶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容