python2与python3转换记录
為什么需要有兩個(gè)版本的Python
Python2和Python3不兼容是每個(gè)接觸過Python的開發(fā)者都知道的事,雖說Python3是未來,但是仍然有很多項(xiàng)目采用Python2開發(fā)。Linux的許多發(fā)行版本(如Ubuntu)都會(huì)自帶Python2.7,但是當(dāng)我們準(zhǔn)備開發(fā)一個(gè)Python3項(xiàng)目的時(shí)候,Linux下確實(shí)是可以兩個(gè)一起裝的,但是問題是你怎么切換兩個(gè)版本的Python?
01 修改別名
查看一下我們的默認(rèn)Python版本
$ python --version
Python 2.7.6
?然后我們修改一下別名
$ alias python='/usr/bin/python3'
$ python --version
Python 3.4.3 # 版本已經(jīng)改變
/usr/bin/python3?這個(gè)路徑是怎么找到的呢?
一般來說,軟件的二進(jìn)制文件都可以在?/usr/bin?或?/usr/local/bin?(這個(gè)優(yōu)先級(jí)高一點(diǎn))找到。當(dāng)然如果你是Debian系的Linux,可以這么找(前提是你已經(jīng)安裝了Python3):
$ dpkg -L python3
上面的別名修改只是暫時(shí)性的,重開一個(gè)窗口后配置就不見了。如果要使每個(gè)窗口都使用這個(gè)別名,可以編輯?~/.bashrc?(如果你是別的shell的話,就不是這個(gè)文件,如zsh是?~/.zshrc?),把a(bǔ)lias配置寫入文件。
修改別名優(yōu)點(diǎn)是足夠簡(jiǎn)單,但是切換不靈活。
0x02 鏈接文件
在?/usr/bin?中建立一個(gè)鏈接文件指向Python3。
$ ln -s python /usr/bin/python3
$ python --version
Python 3.4.3
跟修改別名一樣,也是修改不夠靈活。
03 采用update-alternatives 切換版本
update-alternatives是Debian提供的一個(gè)工具(非Debian系的就不用看了),原理類似于上面一個(gè)辦法,也是通過鏈接的方式,但是其切換的過程非常方便。
首先看一下update-alternatives的幫助信息:
$ update-alternatives --help
用法:update-alternatives [<選項(xiàng)> ...] <命令>
我們僅需要了解3個(gè)參數(shù)就行了
--install <鏈接> <名稱> <路徑> <優(yōu)先級(jí)>?:建立一組候選項(xiàng)--config <名稱>?:配置 <名稱>組中的可選項(xiàng),并選擇使用其中哪一個(gè)--remove <名稱> <路徑>?:從 <名稱> 中去掉 <路徑>選項(xiàng)
首先我們先看一下有沒有關(guān)于Python的可選項(xiàng):
$ update-alternatives --display python
update-alternatives: 錯(cuò)誤: 無 python 的候選項(xiàng)
那首先先建立python的組,并添加Python2和Python3的可選項(xiàng)
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2 # 添加Python2可選項(xiàng),優(yōu)先級(jí)為2
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4 1 #添加Python3可選項(xiàng),優(yōu)先級(jí)為1
注意,這里的?/usr/bin/python?鏈接文件,兩個(gè)可選項(xiàng)必須是一樣的,這樣這個(gè)鏈接文件才可以選擇兩個(gè)不同的可選項(xiàng)去鏈接。
這時(shí)如果我們查看?/usr/bin/python?這個(gè)文件時(shí),會(huì)發(fā)現(xiàn)它已經(jīng)鏈接到了?/etc/alternatives/python?。
lrwxrwxrwx 1 root root 24 6月 19 18:39 python -> /etc/alternatives/python
然后我們?cè)倏匆幌掳姹?/p>
$ python --version
Python 2.7.6
為什么還是Python2,看一下配置
$ sudo update-alternatives --config python
有 2 個(gè)候選項(xiàng)可用于替換 python (提供 /usr/bin/python)。選擇 路徑 優(yōu)先級(jí) 狀態(tài)
------------------------------------------------------------
* 0 /usr/bin/python2.7 2 自動(dòng)模式1 /usr/bin/python2.7 2 手動(dòng)模式2 /usr/bin/python3.4 1 手動(dòng)模式
要維持當(dāng)前值[*]請(qǐng)按回車鍵,或者鍵入選擇的編號(hào):
原來是因?yàn)槟J(rèn)選中了自動(dòng)模式,而Python2的優(yōu)先級(jí)高于Python3,這時(shí)候只要鍵入2,就可以使用Python3了。
如果你想要?jiǎng)h除某個(gè)可選項(xiàng)的話:
$ sudo update-alternatives --remove python /usr/bin/python2.7
update-alternatives只適用于Debian系Liunx。
04 virtualenvwrapper 切換版本
virtualenvwrapper是管理Python虛擬環(huán)境的工具,可以很方便的為不同的項(xiàng)目建立獨(dú)立的環(huán)境,每個(gè)項(xiàng)目都可以安裝自己的依賴,同時(shí)也支持在不同的虛擬環(huán)境中存在不同版本的Python。
首先安裝virtualenvwrapper,可以選擇apt安裝或者pip安裝
apt安裝
$ sudo apt-get install virtualenvwrapper
pip安裝
$ sudo pip install virtualenvwrapper
當(dāng)你需要使用Python2開發(fā)項(xiàng)目時(shí),建立一個(gè)Python2的虛擬環(huán)境:
$ mkvirtualenv -p /usr/bin/python2 env27
當(dāng)你需要Python3開發(fā)時(shí):
$ mkvirtualenv -p /usr/bin/python3.4 env34
然后可以隨時(shí)切換不同的虛擬環(huán)境:
$ workon env27 # 進(jìn)入Python2環(huán)境
$ workon env34 # 進(jìn)入Python3環(huán)境
更爽的是,你可以在進(jìn)入虛擬環(huán)境的同時(shí)切換到項(xiàng)目目錄,只需要編輯?$VIRTUAL_ENV/bin/postactivate?這個(gè)文件即可:
$ vim $VIRTUAL_ENV/bin/postactivate #前提是已經(jīng)進(jìn)入對(duì)應(yīng)的虛擬環(huán)境
在文件中添加切換目錄的命令:
cd /path/to/your/project
05 總結(jié)
前面兩種方法不推薦使用。
使用 update-alternatives 切換版本只適用于Debian系的Linux。
推薦使用 virtualenvwrapper 來管理虛擬環(huán)境和版本。
另外,本文介紹的切換不同版本軟件的方法,除了 virtualenvwrapper 之外,前面3種方法都適用于其他軟件,比如Java(open-jdk和oracle-jdk)
?
part 2:Anaconda實(shí)現(xiàn)python2與python3版本切換
如果你已經(jīng)安裝了Anaconda Python3.6版,想要再安裝Python2.7環(huán)境,在命令行中輸入:
conda create -n python27 python=2.7
想要使用python2.7環(huán)境同樣需要命令source activate python27(這里面的python27是前面create時(shí)自己定義的名字),該條命令在linux和mac環(huán)境中使用 source activate python27 。接下來看到命令行的最前端多出來(python27),這時(shí)候已經(jīng)處在python2.7的環(huán)境中了。想要退出python2.7進(jìn)入python3.6,需要再次鍵入命令deactivate(linux和mac下用source deactivate命令)。
?
參考博客:
【1】https://blog.csdn.net/justdoithai/article/details/70310095
【2】https://www.cnblogs.com/zl1991/p/9041554.html
【3】https://blog.csdn.net/jainszhang/article/details/80345928
?
?
總結(jié)
以上是生活随笔為你收集整理的python2与python3转换记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有没有人知道杨幂这条裙子是什么牌子哒??
- 下一篇: SLAM精度测评——rpg_trajec