使用python進行開發,Unix/Linux 的環境會更加友好,不會出現莫名其妙的bug,雖然 windows store 也發佈了 Ubuntu 子系統,可是功能不夠全,系統不夠完善。本文全面介紹了 Ubuntu、Archlinux、Centos、Mac下安裝和使用pyenv的方法。Windows下使用pyenv的方法請移步 pyenv-win 源碼地址查看: github.com/pyenv-win/p… ,固然pyenv也能夠在Windows store的Linux子系統中使用。html
python 版本比較多,2 和 3 相差比較大,當你須要不一樣環境的時候,選擇使用 docker,docker的使用教程能夠在菜鳥教程找到python
www.runoob.com/docker/dock…linux
也能夠在官網查找相關文檔git
www.docker.com/github
若是用 docker 那就不須要隔離環境了,若是要直接運行在服務器上,那就必須有隔離環境。本文將會介紹使用pyenv來建立不一樣python版本的虛擬環境。sql
使用 pyenv 和 pyenv-virtualenv ,在 Linux 下完美隔離 python 各個版本docker
注意: 本文的 Linux和Mac OS X 下進行,不涉及 windows下的安裝使用shell
清單ubuntu
在各大 Linux 的發行版下安裝 git 都很是簡單,此處只展現部分示例vim
sudo pacman -S git
sudo apt install git
sudo yum install git
brew install git
Ubuntu下使用 shell
Ctrl + Alt + t 快捷鍵打開終端
說明: 本文的全部安裝都嚴格遵照官方文檔,與官方文檔徹底保持一致。
源碼git 地址:github.com/pyenv/pyenv
在終端中執行以下命令完成安裝:
首先把項目克隆下來,放在家目錄下的隱藏文件夾中:.pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
若是你是Mac用戶,可使用brew命令來安裝
brew update
brew install pyenv
複製代碼
而後配置環境變量:
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
複製代碼
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 -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init-)"\nfi' >> ~/.bash_profile
複製代碼
echo 命令的含義是:將引號中內容寫入某文件中
請注意,以上的三條 echo 命令的最後一條命令,請保證它引號中的內容處於 ~/.bashrc 或者 ~/.zshrc 的最底部。
由於在 pyenv 初始化期間會操做 path 環境變量,致使不可預測的行爲。
查看文件的底部內容,可使用 tail 命令,用法:tail ~/.bashrc 或者 tail ~/.zshrc,編輯文件可使用 vim 或者 vscode
而後,在使用 pyenv 以前,須要初始化 shell 環境,執行以下命令
exec $SHELL
或者source ~/.bashrc
一樣也能夠關閉當前的終端窗口,從新啓動一個。
源碼git 地址:github.com/pyenv/pyenv…
把插件克隆在剛纔已經安裝完畢的 pyenv 的 plugins 文件夾中
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
若是你是Mac用戶可使用brew命令來安裝
brew install pyenv-virtualenv
而後配置環境變量
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
複製代碼
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
最後,在使用 pyenv 以前,從新初始化 shell 環境,執行以下命令
exec $SHELL
或者source ~/.bashrc
或者重啓一個終端窗口。
沒有出錯的話,此時已經完成了全部的安裝操做,若是提示錯誤,請檢查前文中的==路徑==和==環境變量==(請檢查是否使用對應系統環境的命令)是否配置正確,或者將操做回退,從新執行安裝命令
此處僅展現 pyenv 和 pyenv-virtualenv 的平常用法
檢查安裝是否正確
pyenv version
pyenv versions
若是顯示了正常的版本信息,說明安裝成功,若是顯示相似於 command not found 之類的提示,說明安裝失敗,請查看第一章末尾的提示。
安裝 3.6.6 版本的 python
pyenv install 3.6.6
這裏須要注意,某些狀況下會安裝失敗,Build failed.
Don't panic,咱們能夠查看pyenv在github wiki裏面準備的應對方案,原文地址 github.com/pyenv/pyenv…
摘錄以下,只須要執行對應的命令便可:
sudo pacman -S base-devel openssl zlib
brew install openssl readline sqlite3 xz zlib
若是你使用的是OS X Mojave或者更高的版本(10.14+),還須要執行一下命令 sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
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
sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel
sudo dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel
zypper install gcc automake openssl-devel ncurses-devel readline-devel zlib-devel tk-devel
sudo eopkg it -c system.devel
sudo eopkg install git gcc make zlib-devel bzip2-devel readline-devel sqlite3-devel openssl-devel tk-devel
brew install bzip2 openssl readline sqlite xz
安裝完這些補充的工具以後,再次執行:
pyenv install 3.6.6
就能夠成功了,你能夠不斷的使用pyenv versions
來查看被 pyenv 託管的 python 版本,多版本之間不會衝突,完美共存
執行pyenv install
,而後按下 tab 鍵,就能夠看到全部可選的安裝版本
如何使用已經安裝的版本建立虛擬環境
pyenv和pyenv-virtualenv的協做能夠這麼理解:
pyenv 託管安裝的 python 版本,python-virtualenv 則調用對應的 python 版本
下面是如何建立和使用虛擬環境
首先須要建立一個虛擬環境,執行命令:
pyenv virtualenv 3.6.6 my-env
複製代碼
最後一個是環境的名字,能夠隨便取。安裝成功會顯示:
Looking in links: /tmp/tmp0eywgc7v
Requirement already satisfied: setuptools in /home/vic/.pyenv/versions/3.6.6/envs/my-env/lib/python3.6/site-packages (39.0.1)
Requirement already satisfied: pip in /home/vic/.pyenv/versions/3.6.6/envs/my-env/lib/python3.6/site-packages (10.0.1)
複製代碼
它寫明瞭該虛擬環境的絕對路徑。
在任意目錄下,執行命令:
pyenv activate my-env
複製代碼
在終端命令行前面,會出現(my-env)
的提示,進入python環境能夠看到版本爲虛擬環境設定的3.6.6,使用pip --version
,能夠看到 pip 包安裝的絕對路徑
使用終端進入任意目錄,好比 ~/envtest
cd ~/envtest
而後在該目錄下執行:
pyenv local my-env
也能夠激活建立好的虛擬環境,執行:
ls -al
local命令和以前的命令區別在於,在 ~/envtest 目錄下,會建立一個隱藏文件 .python-version,文件內容只包含一句話 my-env,只要使用終端進入 ~/test 目錄,就會自動激活虛擬環境
退出虛擬環境使用下面兩個中任意一條命令
pyenv deactivate # 或者
source deactivate
複製代碼
隨着時間推移,你可能積攢不少虛擬環境,刪除虛擬環境可使用命令
pyenv uninstall my-env
或者rm -rf my-env
直接刪除虛擬環境所在的目錄
若是是用 git 克隆的,更新則使用git pull命令
cd ~/.pyenv
或者 cd $(pyenv root)
git pull origin master
Mac用戶則使用brew命令
brew upgrade pyenv
因爲 pyenv 把一切都放在 ~/.pyenv 下了,因此Linux下卸載分爲兩步
刪除環境變量
執行:rm -rf ~/.pyenv
或者 rm -rf $(pyenv root)
Mac用戶卸載須要使用brew命令:
brew uninstall pyenv
本文參考了官方文檔並進行了修改,文檔能夠在源碼github地址中找到
pyenv: github.com/pyenv/pyenv
pyenv-virtualenv: github.com/pyenv/pyenv…