pyenv讓python 版本完美切換
前言
我覺得如果使用 python 開發的話,還是在 unix/linux 的環境下吧,shell 工具的效率比 windows 高得多,儘管 windows 下也有 cmder 這種神器,而且現在 windows store 也很好的開發出了 linux 子系統,但是瑕疵非常多,unix/linux 才是完美的環境。本文用到的是 archlinux ,另外 debian/ubuntu、centos 也完全適用。mac 用戶也可以參考,不過 homebrew 也提供了非常方便的安裝方法,但是建議使用文本做法。
背景
python 版本比較多,2 和 3 相差非常大,很多項目需要跑在同一台伺服器上,我們可以選擇直接運行,也可以選擇使用 docker。如果用 docker 那就不需要隔離環境了,如果要直接運行在伺服器上,那就必須有隔離環境。比如有的項目使用 python 3.5,有的項目使用 python 3.7,此時我們可以藉助 pyenv 幫助我們完美的隔離環境,讓多個版本的 python 沒有任何衝突,完美共存。
任務
使用 pyenv 和 pyenv-virtualenv ,在 linux 下完美隔離 python 各個版本
第 1 章:使用環境
操作系統:archlinux
shell:zsh
請注意,接下來所有的操作都在 archlinux 下進行,本文不涉及 windows
清單
git
zsh 或者 bash
pyenv
pyenv-virtualenv
1、安裝 git
在各大 linux 的發行版下安裝 git 都非常簡單,此處只展示部分示例
archlinux
debian/ubuntu
centos
2、開啟終端
本文使用 zsh
3、安裝 pyenv
說明:本文的所有安裝都嚴格遵守官方文檔,與官方文檔完全保持一致。
git 地址:https://github.com/pyenv/pyenv
在你的終端中執行如下命令,安全無毒,請放心食用:
首先把項目克隆下來,放在家目錄下的隱藏文件夾中:.pyenv
然後配置環境變數
如果你使用 bash,就依次執行如下命令:
如果你使用 zsh,就依次執行如下命令:
echo 命令的含義是:將引號中內容寫入某文件中
請注意,以上的三條 echo 命令的最後一條長長的命令,請你保證它引號中的內容處於 ~/.bashrc 或者 ~/.zshrc 的最底部。
因為在 pyenv 初始化期間會操作 path 環境變數,導致不可預測的行為。
查看文件的底部內容,可以使用 tail 命令,用法:tail ~/.bashrc 或者 tail ~/.zshrc,編輯文件可以使用 vim 或者 vscode
最後,在使用 pyenv 之前,重新初始化 shell 環境,執行如下命令
不執行該命令也是完全可以的,你可以關閉當前的終端窗口,重新啟動一個就可以了。
此時,你已經完成了 pyenv 的安裝了,你使用可以它的全部命令了,但是我建議你先別急著用,一口氣裝完 pyenv 的一個插件,那就是 pyenv-virtualenv
4、安裝 pyenv-virtualenv
git 地址:https://github.com/pyenv/pyenv-virtualenv
把插件克隆在剛才已經安裝完畢的 pyenv 的 plugins 文件夾中
然後配置環境變數
如果你使用 bash,就執行如下命令:
如果你使用 zsh,就執行如下命令:
最後,在使用 pyenv 之前,重新初始化 shell 環境,執行如下命令
不執行該命令也是完全可以的,你可以關閉當前的終端窗口,重新啟動一個就可以了。
到此,我們的所有重要安裝已經全部完成了,可以開始體驗了。
第 2 章:使用 pyenv
此處僅僅展示 pyenv 和 virtualenv 的日常用法
檢查安裝是否正確
檢查 pyenv 的版本
查看 pyenv 已經託管了哪些 python 版本
如果你看到了正常的版本信息,就說明可以了,如果看到了類似於 command not found 之類的,就說明安裝失敗了。
安裝 3.6.6 版本的 python
這裡有個問題,某些情況下會安裝失敗,報錯就告訴你 Build failed
這個時候,pyenv 已經在它的 github wiki 裡面為我們準備了一篇錯誤應對方案,原文地址 https://github.com/pyenv/pyenv/wiki
大意如下,只需要執行對應的命令即可:
archlinux 用戶
mac 用戶
Ubuntu/Debian/Mint 用戶
CentOS/Fedora
Fedora >= 22 用戶,請你保證已經安裝了 xz 工具
openSUSE 用戶
Solus 用戶
Linuxbrew 用戶
安裝完這些補充的工具之後,再次執行:
就可以成功了,你可以不斷的使用
來查看被 pyenv 託管的 python 版本
而且你想裝什麼版本就裝什麼版本,想裝幾個裝幾個,都是完美共存,完美隔離,你可以在終端里輸入
然後按下 tab 鍵,就可以看到所有可選的安裝版本了
使用剛才安裝的 python 3.6.6
首先我們需要明確一個概念,pyenv 和 pyenv-virtualenv 他們是如何協作的,你可以這麼認為:
pyenv 託管 python 版本,virtualenv 使用 python 版本
好了,之前已經裝好了版本,那麼現在就來使用吧
第 1 步:創建虛擬環境
首先需要創建一個虛擬環境,執行命令:
它的格式就是這樣固定的,最後一個是你自己想要的環境的名字,可以隨便取。稍等片刻,你將會看到:
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)
類似於這樣的回顯信息,說明環境已經創建成功了,它還告訴了你,該虛擬環境的絕對路徑,如果你進去看了,你就會發現,所謂的虛擬環境,就是把 python 裝在 pyenv 的安裝目錄的某個文件夾中,以供它自己調用。
第 2 步:激活虛擬環境
在任意目錄下,執行命令:
你會發現,在你的終端裡面,多了一個類似於 這樣的一個東西,這時候你如果執行:
那就是 python 3.6.6 了
如果你執行:
它會告訴你 pip 包安裝的絕對路徑,也是 pyenv 安裝目錄下的某個文件夾
如果你關掉了終端,那麼下次啟動你又得重新激活一次了,你可以使用如下命令:
首先 cd 到某一個目錄,比如 ~/test
然後在該目錄下執行:
你會發現已經被激活了,那麼 local 命令和剛才有啥不同呢。如果你執行:
你就會發現,在 ~/test 目錄下,有個隱藏文件 .python-version,你可以看到這個文件裡面,只寫了一句話 my-env
這樣你只要進入 ~/test 目錄,就會自動激活虛擬環境
在虛擬環境下,你如果直接執行
就會進入到 python 的交互環境
如果你寫了一個文件,名字叫做 app.py ,裡面的內容只有一句代碼:print(1)
然後執行:
這時候,系統就會調用虛擬環境中的 python 解釋器來執行這些代碼了
第 3 章:更新 pyenv
由於我們是 git 克隆的,所以更新非常簡單
或者
第 4 章:卸載 pyenv
由於 pyenv 把一切都放在 ~/.pyenv 下了,所以卸載很方便,兩個步驟就行了
首先你需要刪除環境變數
然後你需要執行:
或者


TAG:usingNET |