Python版本管理:pyenv和pyenv-virtualenv(MAC、Linux)、virtualenv和virtualenvwrapper(windows)
- 更新日誌:
- 2017年08月16日 更新linux環境需要的編譯環境
- 2017年07月16日 更新:重灌 mac 安裝 pyenv 遇到問題,安裝作者推薦的環境。
- 2017年03月24日 更新:windows python多版本教程
MAC/Linux 教程(推薦)
簡介
pyenv的作者:Yamashita, Yuu
由於Python的版本太多且比較雜,所以每個公司和專案可能採用的不同的版本進行開發,此時就需要多版本進行管理的必要性。
pyenv(不支援Windows,原因滑動到最後)
作用:可以在同一個環境安裝多個不同的Python版本,通過指令隨時隨地的切換不同的Python版本
但是又會出現一個新的問題,一個容器中雖然有不同的python版本,但是不同的專案使用的Python第三方庫的版本可能不同,此時需要每個專案都有一個獨立的Python才能滿足需求。此時就是大名鼎鼎的virtualenv了。
virtualenv和pyenv-virtualenv
作用:可以給某個目錄建立獨立的Python版本。
virtualenv專案,可以實現以上功能,但是牛逼的是pyenv也集成了這個外掛,可以通過pyenv直接管理virtualenv。
廢話不多說,也不講解實現的原理了,一個字就是:幹。
如何安裝pyenv
Linux 和 OSX 都通用的方式:
第一步:下載pyenv 的程式碼到~/.pyenv目錄下
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
第二步:新增環境變數
OSX 一般會用bash終端和zsh終端,如何查詢自己用了哪個終端,在終端中使用:
echo $SHELL
指令。echo $SHELL /bin/zsh
Zsh注意:
把下面指令的~/.bash_profile修改為~/.zshrc或者~/.zshenv,建議使用zshrc(zsh預設啟動會執行該指令碼)。Ubuntu和Fedora注意:
把下面指令的~/.bash_profileecho 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
第三步:啟動shell 的時候,使初始化pyenv。
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
Zsh注意:修改您的~/.zshenv或者~/.zshrc,而不是~/.bash_profile。
Ubuntu和Fedora注意:修改您的~/.bashrc檔案而不是~/.bash_profile。
第四步:重新啟動shell,以使路徑更改生效。
exec $SHELL
強烈建議安裝:
如果不想使用中出現莫名其妙的問題,作者要求安裝的環境:
pyenv將盡力下載和編譯所需的Python版本,但由於未滿足的系統依賴關係,編譯失敗,或者編譯成功,但新的Python版本在執行時顯示出奇怪的錯誤。以下說明是我們針對正確構建環境的建議。
Mac OS X環境:
需要安裝Xcode Command Line Tools和Homebrew
Xcode Command Line Tools安裝指令:xcode-select --install
Homebrew安裝指令:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
以下是可選安裝:
brew install openssl readline xz
linux環境:
Ubuntu/Debian:sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev
Fedora/CentOS/RHEL:
dnf install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel
NOTE: libssl-dev is required when compiling Python, installing libssl-dev will actually install zlib1g-dev, which leads to uninstall and re-install Python versions (installed before installing libssl-dev). On Redhat and derivatives the package is named openssl-devel.
pyenv的使用
此時準備工作已經完成,我們可以使用pyenv了:
介紹下常用指令集:
- pyenv commands
- pyenv local
- pyenv global
- pyenv shell
- pyenv install
- pyenv uninstall
- pyenv rehash
- pyenv version
- pyenv versions
- pyenv which
- pyenv whence
查詢所有可以安裝的版本:
pyenv install --list Available versions: 2.1.3 ... 2.7 2.7.1 2.7.2 ... 3.2-dev 3.2 ... 3.5.0 3.5-dev ... 3.6.0 3.6-dev 3.7-dev ...
安裝所需的版本:
pyenv install 2.7.6 pyenv install 2.6.8
如果遇到問題:
例如:zipimport.ZipImportError: can't decompress data; zlib not available
,請回到上面安裝建議的環境。解除安裝特定的Python版本。
pyenv uninstall
顯示當前活動的Python版本
pyenv version 2.7.6 (set by /home/yyuu/.pyenv/version)
Python的全域性設定,整個系統生效
pyenv global 2.7.6
Python的區域性設定,當前目錄生效
pyenv local 2.7.6
取消設定
pyenv local --unset
高階用法
您可以一次將多個版本指定為本地Python。
假設你有兩個版本的2.7.6和3.3.3。如果你喜歡2.7.6超過3.3.3,
pyenv local (高階)
pyenv local 2.7.6 3.3.3
pyenv versions
system
* 2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
* 3.3.3 (set by /Users/yyuu/path/to/project/.python-version)
python --version
Python 2.7.6
python2.7 --version
Python 2.7.6
python3.3 --version
Python 3.3.3
或者,如果你喜歡3.3.3超過2.7.6,
pyenv local 3.3.3 2.7.6
pyenv versions
system
* 2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
* 3.3.3 (set by /Users/yyuu/path/to/project/.python-version)
venv27
python --version
Python 3.3.3
python2.7 --version
Python 2.7.6
python3.3 --version
Python 3.3.3
pyenv global (高階)
您可以同時將多個版本指定為全域性Python。
假設你有兩個版本的2.7.6和3.3.3。如果你喜歡2.7.6超過3.3.3,
pyenv global 2.7.6 3.3.3
pyenv versions
system
* 2.7.6 (set by /Users/yyuu/.pyenv/version)
* 3.3.3 (set by /Users/yyuu/.pyenv/version)
python --version
Python 2.7.6
python2.7 --version
Python 2.7.6
python3.3 --version
Python 3.3.3
或者,如果你喜歡3.3.3超過2.7.6,
pyenv global 3.3.3 2.7.6
pyenv versions
system
* 2.7.6 (set by /Users/yyuu/.pyenv/version)
* 3.3.3 (set by /Users/yyuu/.pyenv/version)
venv27
python --version
Python 3.3.3
python2.7 --version
Python 2.7.6
python3.3 --version
Python 3.3.3
如何安裝pyenv-virtualenv(pyenv的外掛)
重要說明: 如果將pyenv安裝到非標準目錄中,請確保將此repo克隆到您安裝到的任何位置的“plugins”目錄中,預設使用(~/.pyenv)。
Linux 和 OSX 都通用的方式:
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
第一步:
第二步:virtualenvs的自動啟用,就是當你進入到你自己設定過的Python版本的目錄下,自動切換到virtualenvs的模式,此時你的相關命令只在當前virtualenvs下有效果。
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
Zsh注意:修改您的~/.zshenv或者~/.zshrc,而不是~/.bash_profile。
Ubuntu和Fedora注意:修改您的~/.bashrc檔案而不是~/.bash_profile。
第三步:重新啟動shell,以使路徑更改生效。
exec $SHELL
pyenv-virtualenv的使用
要為使用pyenv的Python版本建立virtualenv,請執行 pyenv virtualenv,指定所需的Python版本和virtualenv目錄的名稱。
- 從當前版本建立virtualenv
pyenv virtualenv venv27
如果只有一個引數pyenv virtualenv,virtualenv將使用給定的名稱建立,基於當前的pyenv Python版本。
- 制定版本建立virtualenv
pyenv virtualenv 2.7.13 venv27
- 列出現有virtualenvs
pyenv virtualenvs顯示現有virtualenv和conda環境的列表。
pyenv shell venv34
pyenv virtualenvs
miniconda3-3.9.1(從/home/yyuu/.pyenv/versions/miniconda3-3.9.1建立)
miniconda3-3.9.1 / envs / myenv(從/home/yyuu/.pyenv/versions/miniconda3-3.9.1建立)
2.7.10 / envs / my-virtual-env-2.7.10(從/home/yyuu/.pyenv/versions/2.7.10建立)
3.4.3 / envs / venv34(從/home/yyuu/.pyenv/versions/3.4.3建立)
my-virtual-env-2.7.10(從/home/yyuu/.pyenv/versions/2.7.10建立)
* venv34(從/home/yyuu/.pyenv/versions/3.4.3建立)
每個virtualenv有兩個條目,較短的一個只是一個符號連結。
- 啟用virtualenv
如果eval "$(pyenv virtualenv-init -)"
在shell中配置,pyenv-virtualenv將在進入/離開包含.python-version列出有效虛擬環境的檔案的目錄時自動啟用/停用virtualenvs。
看圖效果:
python-version檔案表示本地Python版本,可以使用pyenv local
命令建立和刪除。
您還可以手動啟用和停用pyenv virtualenv:
pyenv activate virtualenv的名稱
pyenv deactivate
- 刪除現有virtualenv
pyenv uninstall my-virtual-env
前方高能:
說道Windows平臺了,悲劇的是大神比較吊,說他不用Windows,相容Windows浪費大神時間,哈哈。
花了一下午整理和寫部落格,不要吝嗇你的贊、評論和 打賞 ��。
windows 教程
因為大部分小夥伴使用的是 windows 電腦,所以我又回到我的神舟筆記本,實驗後更新該部落格。
這是我安裝的兩個 python 版本,一個是2.7
的一個是3.5.2
的,因為是以前學習安裝的,沒有安裝目前最新的3.6.0
,但是多版本管理是一樣的。
如何切換版本
如何在 python2
和 python3
中自如的切換版本呢?
其實很簡單,使用引數制定即可。
因為 windows
下的 shell
很難用,所以我們用 cmd 命令列
。
使用 py -2 制定 python2 的環境,使用 py -3 制定 python3 的環境。
使用pip安裝庫
安裝到Python 2
時,就使用 pip2 install [name]
,例如:pip2 install virtualenv
安裝到Python 3
時,就使用 pip3 install [name]
,例如:pip3 install virtualenv
安裝virtualenv
VirtualEnv可以方便的建立獨立虛擬的Python環境,然後在每個環境中安裝獨立的需要的軟體包(配合 pip 使用),這一系列的環境是相互隔離的。
多個專案部署在一臺機器上的時候,很實用。
安裝指令:
因為 python3
效能比較高,以下我都以 python3
作為優先演示:
安裝到Python 3
時,pip3 install virtualenv
安裝到Python 2
時,pip2 install virtualenv
Pip2
安裝使用的是 Pip3
剛剛下載的快取安裝的,所以沒有下載安裝,而是直接安裝了。
黃色的警告還提示,目前最新的pip
是9.0.1
,建議升級,使用命令:python -m pip install --upgrade pip
,但是我們指定 Python2
的 pip
,需要使用指令: py -2 -m pip install --upgrade pip
我們檢視下,我們的virtualenv
是否安裝成了
此時我們就可以使用了,但是這樣建立好虛擬 python 空間,還要手動啟用,特別反人類的操作,所以我們還要安裝virtualenvwrapper
,更好的使用。
例如:
先建立虛擬空間
指令:
virtualenv -p C:\dev\Python35-32\python.exe venv35
上面的C:\dev\Python35-32\python.exe是我的 python 安裝目錄,大家對應自己的目錄即可。
命令解釋:
virtualenv -p [制定 python 的版本路徑] [python 虛擬空間的名稱]python 虛擬空間的名稱:隨便取,我習慣加上 python 的版本或者專案縮寫
再啟用
確實很麻煩,我們繼續安裝virtualenvwrapper
,提高使用效率。
安裝 virtualenvwrapper
安裝指令:
因為 python3
效能比較高,以下我都以 python3
作為優先演示:
安裝到Python 3
時,pip3 install virtualenvwrapper-win
安裝到Python 2
時,pip2 install virtualenvwrapper-win
因為我的 python3 是後安裝的,所以預設是python 是3.5的,所以不指定引數是建立 python3 的,如下:
大家可以看到,我們建立成功後,就自動啟用虛擬空間了,我們想要指定對應 python 版本進行建立 python 虛擬環境,如下:
windows 上我安裝的 python2 和 python3 的位置是:
C:\dev\Python27\python.exe
C:\dev\Python35-32\python.exe
大家可自行找自己的安裝位置,然後根據我的配置改成自己的路徑即可。
預設建立的虛擬環境位於C:\Users\username\envs,可以通過環境變數 WORKON_HOME 來定製。username是你的計算機使用者名稱。
通過計算機–>屬性–>高階系統設定–>環境變數–>在系統變數中新建“變數名”:WORKON_HOME,變數值:“你自定義的路徑”。
注意:
此時我們的配置結束了,我們專案中,開發或者部署的時候,進入專案目錄下,然後啟用虛擬模式,就可以在當前虛擬的 python
環境下做任何事情。
常用的 virtualenvwrapper 指令:
mkvirtualenv [指定的 python 路徑] [虛擬空間名稱]
- 例如:
mkvirtualenv -p C:\dev\Python27\python.exe venv27
啟用虛擬環境 / 切換環境
- 例如:
workon env1 workon env2
**ps:**mac 或者 linux 的 pyenv 很智慧,進入目錄自動啟用,退出目錄自動退出模式。
進入虛擬環境目錄
進入當前環境的目錄。cdvirtualenv
列出已有環境
workon
退出環境
deactivate
刪除環境
rmvirtualenv
複製虛擬環境:
cpvirtualenv env1 env3
花了一下午整理和寫部落格,不要吝嗇你的贊、評論 和 打賞 ��。