pipenv與pyenv、pyenv-virtualenv的關係和使用

爲何要有版本管理

咱們舉個例子:html

  1. 項目一要求用python 2.x
  2. 項目二要去python 3.x

若是服務器上要運行這兩個項目,就須要安裝兩個版本。若是項目更多,須要的版本也越多,咱們就須要有版本管理的概念。python

爲何要有虛擬版本

上面咱們看到,版本管理解決了,不一樣項目對python版本的需求。若是咱們服務器上有增長了一個項目,狀況以下,若是解決呢linux

  1. 項目一要求用python 2.x
  2. 項目二要去python 3.x,要求導入的requests包是1.x
  3. 項目三要去python 3.x,要去導入的requests包是2.x

咱們看到項目二和項目三要去的是一樣的版本,可是依賴的包是不一樣版本的,咱們沒法在一個版本上,同一個包安裝不一樣的版本。這樣容易形成混亂。所以就須要虛擬環境了。虛擬環境就是在所需的版本上,建立一個副本,在副本里進行依賴包的管理,這樣不一樣的項目用本身的副本,就不會相互干擾。git

關係

  1. pyenv 用來管理python版本,好比系統中有一個2.x的版本,安裝pyenv後能夠,使用pyenv安裝其餘版本的python,讓系統能夠同時支持多個版本。並且不影響系統版本。
  2. pyenv-virtualenv 用來建立虛擬環境,讓不一樣的項目擁有本身獨立的運行環境,避免相互干擾。
  3. pipenv 它有兩個功能,一個是管理依賴(替代pip管理工具)。二是能夠建立虛擬環境(使用方式與pyenv-virtualenv有所差異)。

簡單點說就是,安裝pyenv後,再安裝pipenv。就能夠知足平常的開發需求。若是對於虛擬環境的要求比較高,能夠安裝一下pyenv-virtualenv。後面具體講解一下他們的功能。根據實際需求作出選擇便可。github

使用策略

  1. 安裝pyenv和pipenv,基本能夠知足平常開發需求,可使用pipenv去管理依賴包,和虛擬環境
  2. 安裝pyenv、pipenv和pyenv-virtualenv,三個都安裝的狀況下,咱們可使用pipenv管理依賴包,用pyenv-virtualenv來管理虛擬環境,pyenv配合pyenv-virtualenv切換版本,使用起來比單獨使用pipenv或pyenv-virtualenv,都方便許多。

pyenv使用

pyenv安裝

pyenv不支持windows,只支持mac和linux。官方提供了一個安裝腳本,安裝起來很是簡單,它會自動安裝pyenvpyenv-virtualenvshell

  1. 執行如下命令開始安裝
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
複製代碼
  1. 安裝完成後須要配置環境變量,根據提示處理便可。 通常狀況是在 ~/.bashrc 裏添加以下代碼
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
複製代碼

pyenv卸載

pyenv安裝後會在用戶家目錄建立一個.pyenv的文件夾。若是要卸載,直接刪除這個文件夾,而後將~/.bashrc中,安裝時添加的3行代碼刪除,就能夠了。 刪除.pyenvsegmentfault

rm -rf $(pyenv root)
# 或
# rm -rf ~/.pyenv
複製代碼

經常使用命令

  1. 版本管理
  • pyenv versions 查看本機已有版本
  • pyenv install -l 查看可安裝的版本
  • pyenv install 2.7.3 安裝指定的版本
  • pyenv uninstall 2.7.3 卸載指定的版本
  1. 切換版本,分爲3種,按優先級排序:shell local global
  • pyenv shell 2.7.3 設置面向 shell 的 Python 版本,經過設置當前 shell 的 PYENV_VERSION 環境變量的方式。這個版本的優先級比 local 和 global 都要高。–unset 參數能夠用於取消當前 shell 設定的版本 pyenv shell --unset
  • pyenv local 2.7.3 設置 Python 本地版本,經過將版本號寫入當前目錄下的 .python-version 文件的方式。經過這種方式設置的 Python 版本優先級較 global 高。這種方式,每次進入目錄,執行python命令運行腳本時,會自動使用設置的版本。並且不會影響全局環境
  • pyenv global 2.7.3 設置全局的 Python 版本,經過將版本號寫入 ~/.pyenv/version 文件的方式。這種方式會營銷全局環境,要謹慎使用
  • pyenv rehash 建立墊片路徑(爲全部已安裝的可執行文件建立 shims,如:~/.pyenv/versions//bin/,所以,每當你增刪了 Python 版本或帶有可執行文件的包(如 pip)之後,都應該執行一次本命令)
  1. 虛擬環境管理
  • pyenv virtualenv 2.7.10 env-2.7.10 建立虛擬環境,若不指定 python 版本,會默認使用當前環境 python 版本。若是指定 Python 版本,則必定要是已經安裝過的版本,不然會出錯。環境的真實目錄位於 ~/.pyenv/versions 下
  • pyenv virtualenvs 列出當前虛擬環境
  • pyenv activate env-name 激活虛擬環境
  • pyenv deactivate 退出虛擬環境,回到系統環境
  • pyenv uninstall my-virtual-env 刪除虛擬環境,或者直接刪除目錄rm -rf ~/.pyenv/versions/env-name

小技巧 pyenv切換版本,也可使用虛擬環境,好比可使用pyenv local env-name,來達到當前目錄使用虛擬環境的目的。相比pyenv activate env-name更加方便,每次進入目錄自動切換版本。windows

pipenv使用

pipenv安裝

使用pip安裝便可安全

pip install pipenv
複製代碼

想要shell 自動補齊,Linux or Mac 環境下,bash下若是能自動命令補全豈不是更好?請把以下語句追加到.bashrc或者.zshrc便可:bash

eval "$(pipenv --completion)"
複製代碼

pipenv經常使用命令

  • pipenv --python 3.6 建立虛擬環境,pipenv 會自動掃描系統尋找合適的版本信息,若是找不到的話,同時又安裝了 pyenv 的話,則會自動調用 pyenv 下載對應版本的 python, 不然會報錯。
  • pipenv shell 進入虛擬環境
  • pipenv install urllib3 安裝虛擬環境或者第三方庫,也能夠指定版本pipenv install urllib3==1.22
  • pipenv uninstall urllib3 卸載一個庫,所有卸載使用pipenv uninstall --all
  • pipenv update urllib3 更新指定包,不帶參數pipenv update會卸載當前全部的包,並安裝它們的最新版本
  • pipenv --where 查看項目根目錄
  • pipenv --venv 查看虛擬環境目錄
  • pipenv run 在虛擬環境中運行命令
  • pipenv check 檢查安全漏洞
  • pipenv graph 顯示當前依賴關係圖信息
  • pipenv lock 鎖定並生成Pipfile.lock文件
  • pipenv open 在編輯器中查看一個庫

參考資料

github.com/pyenv/pyenv

github.com/pyenv/pyenv…

github.com/pypa/pipenv

segmentfault.com/a/119000001…

www.xncoding.com/2016/05/09/…

本文原文來自個人我的博客 www.xingjiehu.com

相關文章
相關標籤/搜索