pyenv 讓 python 版本完美切換

原作地址:?jianshu.com/p/3e93311fe6cb


前言

我覺得如果使用 python 開發(fā)的話,還是在 unix/linux 的環(huán)境下吧,shell 工具的效率比 windows 高得多,盡管 windows 下也有 cmder 這種神器,而且現(xiàn)在 windows store 也很好的開發(fā)出了 linux 子系統(tǒng),但是瑕疵非常多,unix/linux 才是完美的環(huán)境。本文用到的是 archlinux ,另外 debian/ubuntu、centos 也完全適用。mac 用戶也可以參考,不過 homebrew 也提供了非常方便的安裝方法,但是建議使用文本做法。

背景

python 版本比較多,2 和 3 相差非常大,很多項(xiàng)目需要跑在同一臺(tái)服務(wù)器上,我們可以選擇直接運(yùn)行,也可以選擇使用 docker。如果用 docker 那就不需要隔離環(huán)境了,如果要直接運(yùn)行在服務(wù)器上,那就必須有隔離環(huán)境。比如有的項(xiàng)目使用 python 3.5,有的項(xiàng)目使用 python 3.7,此時(shí)我們可以借助 pyenv 幫助我們完美的隔離環(huán)境,讓多個(gè)版本的 python 沒有任何沖突,完美共存。

任務(wù)

使用 pyenv 和 pyenv-virtualenv ,在 linux 下完美隔離 python 各個(gè)版本

第 1 章:使用環(huán)境

操作系統(tǒng):archlinux

shell:zsh

請(qǐng)注意,接下來所有的操作都在 archlinux 下進(jìn)行,本文不涉及 windows

清單

git

zsh 或者 bash

pyenv

pyenv-virtualenv

1、安裝 git

在各大 linux 的發(fā)行版下安裝 git 都非常簡單,此處只展示部分示例

archlinux

sudo pacman -S git

debian/ubuntu

sudo apt-get install git

centos

sudo yum install git

2、開啟終端

本文使用 zsh

3、安裝 pyenv

說明:本文的所有安裝都嚴(yán)格遵守官方文檔,與官方文檔完全保持一致。

git 地址:https://github.com/pyenv/pyenv

在你的終端中執(zhí)行如下命令,安全無毒,請(qǐng)放心食用:

首先把項(xiàng)目克隆下來,放在家目錄下的隱藏文件夾中:.pyenv

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

然后配置環(huán)境變量

如果你使用 bash,就依次執(zhí)行如下命令:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc

如果你使用 zsh,就依次執(zhí)行如下命令:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc

echo 命令的含義是:將引號(hào)中內(nèi)容寫入某文件中

請(qǐng)注意,以上的三條 echo 命令的最后一條長長的命令,請(qǐng)你保證它引號(hào)中的內(nèi)容處于 ~/.bashrc 或者 ~/.zshrc 的最底部。

因?yàn)樵?pyenv 初始化期間會(huì)操作 path 環(huán)境變量,導(dǎo)致不可預(yù)測(cè)的行為。

查看文件的底部內(nèi)容,可以使用 tail 命令,用法:tail ~/.bashrc 或者 tail ~/.zshrc,編輯文件可以使用 vim 或者 vscode

最后,在使用 pyenv 之前,重新初始化 shell 環(huán)境,執(zhí)行如下命令

exec $SHELL

不執(zhí)行該命令也是完全可以的,你可以關(guān)閉當(dāng)前的終端窗口,重新啟動(dòng)一個(gè)就可以了。

此時(shí),你已經(jīng)完成了 pyenv 的安裝了,你使用可以它的全部命令了,但是我建議你先別急著用,一口氣裝完 pyenv 的一個(gè)插件,那就是 pyenv-virtualenv

4、安裝 pyenv-virtualenv

git 地址:https://github.com/pyenv/pyenv-virtualenv

把插件克隆在剛才已經(jīng)安裝完畢的 pyenv 的 plugins 文件夾中

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

然后配置環(huán)境變量

如果你使用 bash,就執(zhí)行如下命令:

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc

如果你使用 zsh,就執(zhí)行如下命令:

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

最后,在使用 pyenv 之前,重新初始化 shell 環(huán)境,執(zhí)行如下命令

exec $SHELL

不執(zhí)行該命令也是完全可以的,你可以關(guān)閉當(dāng)前的終端窗口,重新啟動(dòng)一個(gè)就可以了。

到此,我們的所有重要安裝已經(jīng)全部完成了,可以開始體驗(yàn)了。

第 2 章:使用 pyenv

此處僅僅展示 pyenv 和 virtualenv 的日常用法

檢查安裝是否正確

檢查 pyenv 的版本

pyenv version

查看 pyenv 已經(jīng)托管了哪些 python 版本

pyenv versions

如果你看到了正常的版本信息,就說明可以了,如果看到了類似于 command not found 之類的,就說明安裝失敗了。

安裝 3.6.6 版本的 python

pyenv install 3.6.6

這里有個(gè)問題,某些情況下會(huì)安裝失敗,報(bào)錯(cuò)就告訴你 Build failed

這個(gè)時(shí)候,pyenv 已經(jīng)在它的 github wiki 里面為我們準(zhǔn)備了一篇錯(cuò)誤應(yīng)對(duì)方案,原文地址https://github.com/pyenv/pyenv/wiki

大意如下,只需要執(zhí)行對(duì)應(yīng)的命令即可:

archlinux 用戶

sudo pacman -S base-devel openssl zlib

mac 用戶

brew install openssl readline sqlite3 xz zlib

Ubuntu/Debian/Mint 用戶

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev

CentOS/Fedora <= 21 用戶,請(qǐng)你保證已經(jīng)安裝了 xz 工具

sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel

Fedora >= 22 用戶,請(qǐng)你保證已經(jīng)安裝了 xz 工具

sudo dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel

openSUSE 用戶

zypper install gcc automake openssl-devel ncurses-devel readline-devel zlib-devel tk-devel

Solus 用戶

sudo eopkg it -c system.devel

sudo eopkg install git gcc make zlib-devel bzip2-devel readline-devel sqlite3-devel openssl-devel tk-devel

Linuxbrew 用戶

brew install bzip2 openssl readline sqlite xz

安裝完這些補(bǔ)充的工具之后,再次執(zhí)行:

pyenv install 3.6.6

就可以成功了,你可以不斷的使用

pyenv versions

來查看被 pyenv 托管的 python 版本

而且你想裝什么版本就裝什么版本,想裝幾個(gè)裝幾個(gè),都是完美共存,完美隔離,你可以在終端里輸入

pyenv install

然后按下 tab 鍵,就可以看到所有可選的安裝版本了

使用剛才安裝的 python 3.6.6

首先我們需要明確一個(gè)概念,pyenv 和 pyenv-virtualenv 他們是如何協(xié)作的,你可以這么認(rèn)為:

pyenv 托管 python 版本,virtualenv 使用 python 版本

好了,之前已經(jīng)裝好了版本,那么現(xiàn)在就來使用吧

第 1 步:創(chuàng)建虛擬環(huán)境

首先需要?jiǎng)?chuàng)建一個(gè)虛擬環(huán)境,執(zhí)行命令:

pyenv virtualenv 3.6.6 my-env

它的格式就是這樣固定的,最后一個(gè)是你自己想要的環(huán)境的名字,可以隨便取。稍等片刻,你將會(huì)看到:

Looking in links: /tmp/tmp0eywgc7v

Requirement already satisfied: setuptools in /home/joit/.pyenv/versions/3.6.6/envs/my-env/lib/python3.6/site-packages (39.0.1)

Requirement already satisfied: pip in /home/joit/.pyenv/versions/3.6.6/envs/my-env/lib/python3.6/site-packages (10.0.1)

類似于這樣的回顯信息,說明環(huán)境已經(jīng)創(chuàng)建成功了,它還告訴了你,該虛擬環(huán)境的絕對(duì)路徑,如果你進(jìn)去看了,你就會(huì)發(fā)現(xiàn),所謂的虛擬環(huán)境,就是把 python 裝在 pyenv 的安裝目錄的某個(gè)文件夾中,以供它自己調(diào)用。

第 2 步:激活虛擬環(huán)境

在任意目錄下,執(zhí)行命令:

pyenv activate my-env

你會(huì)發(fā)現(xiàn),在你的終端里面,多了一個(gè)類似于(my-env)這樣的一個(gè)東西,這時(shí)候你如果執(zhí)行:

python --version

那就是 python 3.6.6 了

如果你執(zhí)行:

pip --version

它會(huì)告訴你 pip 包安裝的絕對(duì)路徑,也是 pyenv 安裝目錄下的某個(gè)文件夾

如果你關(guān)掉了終端,那么下次啟動(dòng)你又得重新激活一次了,你可以使用如下命令:

首先 cd 到某一個(gè)目錄,比如 ~/test

cd ~/test

然后在該目錄下執(zhí)行:

pyenv local my-env

你會(huì)發(fā)現(xiàn)已經(jīng)被激活了,那么 local 命令和剛才有啥不同呢。如果你執(zhí)行:

ls -al

你就會(huì)發(fā)現(xiàn),在 ~/test 目錄下,有個(gè)隱藏文件 .python-version,你可以看到這個(gè)文件里面,只寫了一句話 my-env

這樣你只要進(jìn)入 ~/test 目錄,就會(huì)自動(dòng)激活虛擬環(huán)境

在虛擬環(huán)境下,你如果直接執(zhí)行

python

就會(huì)進(jìn)入到 python 的交互環(huán)境

如果你寫了一個(gè)文件,名字叫做 app.py ,里面的內(nèi)容只有一句代碼:print(1)

然后執(zhí)行:

python app.py

這時(shí)候,系統(tǒng)就會(huì)調(diào)用虛擬環(huán)境中的 python 解釋器來執(zhí)行這些代碼了

第 3 章:更新 pyenv

由于我們是 git 克隆的,所以更新非常簡單

cd ~/.pyenv或者cd $(pyenv root)

git pull

第 4 章:卸載 pyenv

由于 pyenv 把一切都放在 ~/.pyenv 下了,所以卸載很方便,兩個(gè)步驟就行了

首先你需要?jiǎng)h除環(huán)境變量

然后你需要執(zhí)行:

rm -rf ~/.pyenv或者rm -rf $(pyenv root)

作者:JoiT

鏈接:http://www.itdecent.cn/p/3e93311fe6cb

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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