Mac開發系列之python多版本和環境管理(pyenv和virtualenv安裝配置使用)

Mac開發系列之python多版本和環境管理(pyenv和virtualenv安裝配置使用)

來自專欄編程札記Mac開發系列之python多版本和環境管理(pyenv和virtualenv安裝配置使用) - 畫船聽雨 | 潘少的小站?

blog.taohuawu.club

系統版本:Mac OS X El Capitan(10.13)

預先安裝:homebrew 安裝方法:運行ruby腳本:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

pyenv依賴:python 2.5+ , git

pyenv安裝

推薦使用pyenv-installer這個插件安裝pyenv,這種方式安裝會多安裝幾個是實用的插件,比如:

pyenv-virtualenv 用於整合virtualenvpyenv-pip-rehash 用於使用pip安裝包之後自動執行rehashpyenv-update 用於升級pyenv使用python-installer方式安裝:確保你的電腦可以訪問Github,然後在終端運行:curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

即可自動安裝pyenv,安裝完成後,pyenv默認安裝地址是:~/.pyenv,但是如果你的系統的環境變數中存在PYENV_ROOT則會被安裝到PYENV_ROOT目錄下(當使用homebrew等其他工具安裝後)信息,在你電腦使用的對應的shell的配置文件中添加環境變數(如使用的shell是bash則在~/.bashrc中添加,若是zsh則在~/.zshrc中添加,etc):

export PATH="$HOME/.pyenv/bin:$PATH"eval "$(pyenv init -)"eval "$(pyenv virtualenv-init -)"

至此,完成pyenv的安裝和基本配置。

ps:pyenv默認安裝地址是~/.pyenv,但是如果你的系統的環境變數中存在PYENV_ROOT則會被安裝到PYENV_ROOT目錄下(當使用homebrew等其他工具安裝後)

pyenv工作原理:

系統運行python的時候會檢測環境變數PATH, 如在以下路徑查找:

/usr/local/bin:/usr/bin:/bin

系統會檢測/usr/local/bin是否存在python,如果不存在則繼續搜索/usr/bin,以及類推 pyenv的工作原理是在PATH中添加shims目錄:

~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin

卸載pyenv

pyenv的卸載比較簡單,只需要刪除對應的目錄即可,默認目錄是:~/.pyenv。

pyenv使用

查看可安裝的包:

$ pyenv install -l

查看已安裝的python:

versions和version命令

versions命令列出你已經安裝的Python版本以及當前使用的版本

pyenv versions

如下圖:

version命令列印你當前使用版本。version命令的輸出類似versions命令,但是它只包含了當前版本那一行,並且沒有前導的。

版本名稱為system代表的是系統預裝的Python版本。

安裝2.7.11:

$ pyenv install 2.7.11$ pyenv rehash (這一步是更新pyenv中的python版本數據,每次安裝新的python版本後需執行此命令。)

安裝指定版本的python只需使用pyenv install 版本號即可。

卸載python版本:

使用pyenv uninstall {版本號}

pyenv rehash

切換當前目錄的python版本:

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

global和local命令:

global命令和local命令都是用來切換當前Python版本的命令。不同之處在於,global的切換是全局的,而local的切換是局部的。

pyenv local 2.7.11

以上命令:會在當前目錄下創建一個.pyenv-version文件,文件內容為2.7.11,pyenv通過這種形式,標記當前目錄使用Python-2.7.11。如果其子目錄下面沒有.pyenv-version文件,那麼此版本講繼承到子目錄。

pyenv global 2.7.11

以上命令:會修改$PYENV_HOME/version文件的內容,標記全局Python版本,如何理解全局Python版本,可以認為全局版本是一個默認值,當一個目錄及其父目錄下面都沒有.python-version文件的時候,會使用全局版本。

一般的,我們不修改全局版本,而使用期默認值system,因為在unix系統上,很多系統工具依賴於Python,如果我們修改了Python的版本,會造成絕大多數的依賴Python的系統工具無法使用,如果你不小心修改了,也不要緊張,使用global命令修改回來就可以了,有時候,你發現部分系統工具無法使用,你也可以看看你當前的Python版本。

系統全局用系統默認的Python比較好,不建議直接對其操作

pyenv global system

用local進行指定版本切換,一般開發環境使用。

pyenv local 2.7.11

對當前用戶的臨時設定Python版本,退出後失效

pyenv shell 3.5.1

取消某版本切換

pyenv local 3.5.1 --unset

優先順序關係:shell —> local —> global

利用virtualenv和Virtaulenvwrapper管理虛擬Python環境

virtualenv用於創建獨立的Python環境,多個Python相互獨立,互不影響,它能夠:

  • 在沒有許可權的情況下安裝新套件
  • 不同應用可以使用不同的套件版本
  • 套件升級不影響其他應用

Virtaulenvwrapper是virtualenv的擴展包,用於更方便管理虛擬環境,它可以做:

  • 將所有虛擬環境整合在一個目錄下
  • 管理(新增,刪除,複製)虛擬環境
  • 切換虛擬環境

1、安裝和使用方法

安裝

pip install virtualenvpip install virtualenvwrapper

創建虛擬環境

mkvirtualenv [虛擬環境名稱]

此時還不能使用virtualenvwrapper,默認virtualenvwrapper安裝在/usr/local/bin下面,實際上你需要運行virtualenvwrapper.sh文件才行,先別急,打開這個文件看看,裡面有安裝步驟,我們照著操作把環境設置好。

如果你使用的bash或者zsh

創建目錄用來存放虛擬環境

mkdir $HOME/.virtualenvs

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

export WORKON_HOME=$HOME/.virtualenvssource /usr/local/bin/virtualenvwrapper.sh

運行:

source ~/.bashrcsource ~/.zshrc

此時virtualenvwrapper就可以使用了。

2、創建虛擬環境例如:

在當前的環境的Python版本下創建名稱為py3dev的虛擬環境。

mkvirtualenv py3dev

默認情況下,虛擬環境會依賴系統環境中的site packages,就是說系統中已經安裝好的第三方package也會安裝在虛擬環境中,如果不想依賴這些package,那麼可以加上參數 –no-site-packages建立虛擬環境

例如:

mkvirtualenv --no-site-packages [虛擬環境名稱]mkvirtualenv --no-site-packages py3dev

3、查看創建的虛擬環境:

λ ~/ lsvirtualenvpy2dev======py3dev======λ ~/ workonpy2devpy3dev

4、啟動某虛擬環境:

works [虛擬環境名稱]workon py3dev

5、刪除某個虛擬環境:

rmvirtualenv [虛擬環境名稱]rmvirtualenv py3dev

6、刪除某個虛擬環境需要先退出這個環境:

deactivate

融合 pyenv、virtualenv、Virtaulenvwrapper 管理Python版本和虛擬環境

如何對Python2.7.11和Python3.5.1版本分別創建虛擬環境?

有這三個工具其實非常簡單,主要是確保環境切換成功後在創建虛擬環境。

為確保切換成功,我建議 source .zshrc 一下在切換(如果是使用pyenv-installer安裝的,則不需要,若是直接安裝的pyenv則需要,具體原因仍不清楚。)

#安裝全新的Python2.7.11版本pyenv install 2.7.11pyenv rehash#切換到剛安裝的這個版本pyenv local 2.7.11#確保切換成功source .zshrc#驗證一下版本,pip發現裡面包很少pip list#驗證版本python -V#務必在這個新的2.7.11中安裝pip install virtualenvpip install virtualenvwrapper#務必source .zshrc#創建2.7.11的開發環境mkvirtualenv py2dev#創建完某版本的開發環境後務必退出,當前虛擬環境,不然就是虛擬環境中在創建了。deactivate#退出2.7.11環境pyenv local --unset 2.7.11source .zshrc

3.5.1的虛擬環境創建也是一樣,因此驗證2.7.11和3.5.1的虛擬環境

(py3dev) ~ deactivate~ workon py2dev(py2dev)~ python -VPython 2.7.11(py2dev)~ deactivate~ workon py3dev(py3dev)~ python -VPython 3.5.1(py3dev)~ deactivate~

愉快無痛升級,一鍵升級所有PIP包

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

pyenv與virtualenv

pyenv通過插件,可以很好的和virtualenv一起工作,通過整合virtualenv,pyenv實現了真正意義上的環境隔離,每個項目都相當於使用一個單獨的解釋器。

通過pyenv-installer安裝的pyenv,已經安裝好virtualenv插件了,如果不是通過pyenv-installer安裝的pyenv,你可能需要自己安裝virtualenv插件,安裝方法也很簡單:

cd $PYENV_ROOT/pluginsgit clone https://github.com/yyuu/pyenv-virtualenv.git

直接把插件clone下來就安裝完成了。

安裝完成之後,我們可以通過virtualenv命令即可創建虛擬環境,virtualenv的一般用法如下:

pyenv virtualenv [-f|--force] [-u|--upgrade] [VIRTUALENV_OPTIONS] <version> <virtualenv-name>

選項-f表示強制的,也就是如果已經存在這個虛擬環境,那麼將會覆蓋這個虛擬環境 選項-u表示upgrade,用於修改已經存在的虛擬環境的Python版本 VIRTUALENV_OPTIONS 是傳遞給virtualenv的選項,可以通過virtualenv的幫助獲取選項的含義 version 表示Python版本 virtualenv-name 是我們給虛擬環境指定的名字

例如:

pyenv virtualenv 2.7.11 my_project

以上命令就創建了一個基於Python-2.7.11,名為my_project的虛擬環境。創建好的虛擬環境猶如一個單獨Python版本一樣,我們可以通過local或者global命令切換過去。

由於每個解釋器間是完全隔離的,所以強烈建議你的每個項目,都放置在單獨的虛擬環境中。

virtualenv插件還提供了virtualenvs命令,用於列出所有已經創建的虛擬環境,

pyenv virtualenvs

以上命令列出我們所有已經創建的虛擬環境,已經虛擬環境基於那個Python版本。

當我們的一個項目生命周期結束的時候,我們或許會想要刪除虛擬環境以釋放我們的硬碟空間,刪除虛擬環境非常簡單,直接用uninstall命令像刪除正常的Python版本一樣就可以了。

事實上,虛擬環境一旦創建,你就可以把他當成一個獨立的版本來使用和維護了。

刪除、設置當前目錄python以及取消設置版本使用下面的命令

# 創建一個基於`python 2.7.10`版本的名字叫做`env27`的虛擬環境, 使用`--no-site-packages`參數來隔離系統的site-packages$ pyenv virtualenv 2.7.10 env27 --no-site-packages# 指定目錄使用evn27的虛擬環境$ cd code$ pyenv local env27# 取消設定$ pyenv local env27 --unset# 刪除$ pyenv uninstall env27

我是妖道,人生這麼長,做個有趣的人,寫點有趣的文字。此文章首發於我的個人公眾號 - 傲來三少,歡迎關注,代碼、故事、靈魂,那裡都有。

關於我?

mp.weixin.qq.com圖標
推薦閱讀:

python一些有趣的小程序
使用Python爬取12306數據:如何搶到從北京回家的票
Tornado框架04-cookie
【Python3網路爬蟲開發實戰】 1-開發環境配置

TAG:Python | Mac | 開發環境 |