Mac多Python版本共存,多個(gè)獨(dú)立Python開(kāi)發(fā)環(huán)境切換。

一、安裝配置pyenv

經(jīng)常遇到這樣的情況:

系統(tǒng)自帶的Python是2.x,自己需要Python 3.x,測(cè)試嘗鮮;

系統(tǒng)是2.6.x,開(kāi)發(fā)環(huán)境是2.7.x

由于Mac機(jī)器系統(tǒng)保護(hù)的原因,默認(rèn)的Python中無(wú)法對(duì)PIP一些包升級(jí),需要組建新的Python環(huán)境。

此時(shí)需要在系統(tǒng)中安裝多個(gè)Python,但又不能影響系統(tǒng)自帶的Python,即需要實(shí)現(xiàn)Python的多版本共存。pyenv就是這樣一個(gè)Python版本管理器。

1、安裝pyenv

brew install pyenv

2、根據(jù)提示需要添加

if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

export PYENV_ROOT=/usr/local/var/pyenv

這里注意了,如果使用的zsh,務(wù)必不要在zshrc配置里面的插件開(kāi)啟pyenv。會(huì)導(dǎo)致終端無(wú)限循環(huán)退出,只需要在你的zshrc結(jié)尾處追加上面兩行就行了。筆者親測(cè)。

3、查看當(dāng)前激活的是那個(gè)版本的Python

pyenv version

4、查看已經(jīng)安裝了那些版本的Python

pyenv versions

5、安裝指定版本的Python

pyenv install 3.5.0

#安裝完成后必須rehash

pyenv rehash

6、切換和使用指定的版本Python版本有3種方法:

λ ~/ pyenv

pyenv 20151006

Usage: pyenv <command> [<args>]

Some useful pyenv commands are:

? commands? ? 列出所有pyenv可用的命令

? local? ? ? 設(shè)置或顯示本地應(yīng)用程序特定的Python版本

? global? ? ? 設(shè)置或顯示系統(tǒng)全局的Python版本

? shell? ? ? 設(shè)置或顯示shell外殼的Python版本

? install? ? 使用python-build安裝指定Python版本

? uninstall? 卸載已經(jīng)安裝的Python

? rehash? ? ? 刷新 pyenv shims (安裝之后運(yùn)行這個(gè))

? version? ? 查看當(dāng)前使用的版本

? versions? ? 列出已經(jīng)安裝的Python版本,當(dāng)前激活版本用*號(hào)標(biāo)注

? which? ? ? 顯示的完整路徑的可執(zhí)行文件

? whence? ? ? 列出包含給定的可執(zhí)行所有的Python版本

See `pyenv help <command>' for information on a specific command.

For full documentation, see: https://github.com/yyuu/pyenv#readme

特別建議:

系統(tǒng)全局用系統(tǒng)默認(rèn)的Python比較好,不建議直接對(duì)其操作

pyenv global system

用local進(jìn)行指定版本切換,一般開(kāi)發(fā)環(huán)境使用。

pyenv local 2.7.10

對(duì)當(dāng)前用戶的臨時(shí)設(shè)定Python版本,退出后失效

pyenv shell 3.5.0

取消某版本切換

pyenv local 3.5.0 --unset

優(yōu)先級(jí)關(guān)系:shell——local——global

二、利用virtualenv和Virtaulenvwrapper管理虛擬Python環(huán)境

virtualenv用于創(chuàng)建獨(dú)立的Python環(huán)境,多個(gè)Python相互獨(dú)立,互不影響,它能夠:

在沒(méi)有權(quán)限的情況下安裝新套件

不同應(yīng)用可以使用不同的套件版本

套件升級(jí)不影響其他應(yīng)用

Virtaulenvwrapper是virtualenv的擴(kuò)展包,用于更方便管理虛擬環(huán)境,它可以做:

將所有虛擬環(huán)境整合在一個(gè)目錄下

管理(新增,刪除,復(fù)制)虛擬環(huán)境

切換虛擬環(huán)境

1、安裝和使用方法

#安裝

pip install virtualenv

pip install virtualenvwrapper

#創(chuàng)建虛擬環(huán)境

mkvirtualenv [虛擬環(huán)境名稱]

此時(shí)還不能使用virtualenvwrapper,默認(rèn)virtualenvwrapper安裝在/usr/local/bin下面,實(shí)際上你需要運(yùn)行virtualenvwrapper.sh文件才行,先別急,打開(kāi)這個(gè)文件看看,里面有安裝步驟,我們照著操作把環(huán)境設(shè)置好。

如果你使用的bash或者zsh

#創(chuàng)建目錄用來(lái)存放虛擬環(huán)境

mkdir $HOME/.virtualenvs

#在. bash_profile 或者 .zshrc 追加兩行

export WORKON_HOME=$HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

運(yùn)行:

source ~/.bashrc

source ~/.zshrc

此時(shí)virtualenvwrapper就可以使用了。

2、創(chuàng)建虛擬環(huán)境例如:

#在當(dāng)前的環(huán)境的Python版本下創(chuàng)建名稱為py3dev的虛擬環(huán)境。

mkvirtualenv py3dev

默認(rèn)情況下,虛擬環(huán)境會(huì)依賴系統(tǒng)環(huán)境中的site packages,就是說(shuō)系統(tǒng)中已經(jīng)安裝好的第三方package也會(huì)安裝在虛擬環(huán)境中,如果不想依賴這些package,那么可以加上參數(shù) –no-site-packages建立虛擬環(huán)境

例如:

mkvirtualenv --no-site-packages [虛擬環(huán)境名稱]

mkvirtualenv --no-site-packages py3dev

3、查看創(chuàng)建的虛擬環(huán)境:

λ ~/ lsvirtualenv

py2dev

======

py3dev

======

λ ~/ workon

py2dev

py3dev

4、啟動(dòng)某虛擬環(huán)境:

works [虛擬環(huán)境名稱]

workon py3dev

5、刪除某個(gè)虛擬環(huán)境:

rmvirtualenv [虛擬環(huán)境名稱]

rmvirtualenv py3dev

6、刪除某個(gè)虛擬環(huán)境需要先退出這個(gè)環(huán)境

deactivate

三、融合 pyenv、virtualenv、Virtaulenvwrapper 管理Python版本和虛擬環(huán)境

如何對(duì)Python2.7.10和Python3.5.0版本分別創(chuàng)建虛擬環(huán)境?

有這三個(gè)工具其實(shí)非常簡(jiǎn)單,主要是確保環(huán)境切換成功后在創(chuàng)建虛擬環(huán)境。

#確保切換成功,我建議 source .zshrc 一下在切換

#安裝全新的Python2.7.10版本

pyenv install 2.7.10

pyenv rehash

#切換到剛安裝的這個(gè)版本

pyenv local 2.7.10

#確保切換成功

source .zshrc

#驗(yàn)證一下版本,pip發(fā)現(xiàn)里面包很少

pip list

#驗(yàn)證版本

python -V

#務(wù)必在這個(gè)新的2.7.10中安裝

pip install virtualenv

pip install virtualenvwrapper

#務(wù)必

source .zshrc

#創(chuàng)建2.7.10的開(kāi)發(fā)環(huán)境

mkvirtualenv py2dev

#創(chuàng)建完某版本的開(kāi)發(fā)環(huán)境后務(wù)必退出,當(dāng)前虛擬環(huán)境,不然就是虛擬環(huán)境中在創(chuàng)建了。

deactivate

#退出2.7.10環(huán)境

pyenv local --unset 2.7.10

source .zshrc

3.5.0的虛擬環(huán)境創(chuàng)建也是一樣,因此驗(yàn)證2.7.10和3.5.0的虛擬環(huán)境

(py3dev)?? ~? deactivate

?? ~? workon py2dev

(py2dev)?? ~? python -V

Python 2.7.10

(py2dev)?? ~? deactivate

?? ~? workon py3dev

(py3dev)?? ~? python -V

Python 3.5.0

(py3dev)?? ~? deactivate

?? ~

至今沒(méi)找到切換Python版本的時(shí)候要加載 source .zshrc。經(jīng)過(guò)無(wú)數(shù)次試驗(yàn),結(jié)果是務(wù)必這么干,不知道為什么。

#愉快無(wú)痛升級(jí),一鍵升級(jí)所有PIP包

pip list --outdated | grep '^[a-z]* (' | cut -d " " -f 1 | xargs pip install -U

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容