1. 程式人生 > >008_使用pyenv進行py開發環境管理

008_使用pyenv進行py開發環境管理

準備 upgrade 設計 喜歡 uninstall targe 額的 共存 打印

一、

安裝Python

絕大多數Python入門書籍,都會介紹如何安裝Python,然而,本書要介紹一種全新的安裝方式。使用pyenv來安裝並管理我們的環境。

pyenv簡介

由於Python的依賴是基於site的,這多與生產環境來說,是一種簡單而正確的方式,然後,對於我們的開發環境,基於這樣的管理方式,帶來了可怕的第三方依賴管理的難題。想象一下,你在開發一個新項目的同時,還在維護一個就項目, 新項目依賴某個包的較新的版本,舊項目卻依賴一個相對較舊的版本,而這兩個版本是不兼容的,事實上,這種不兼容,在Python世界裏是司空見慣的。

基於以上難題,virtualenv適時出現了,拯救了廣大因依賴問題焦頭爛額的Python程序員。virtualenv無疑是成功的,他為每個項目創建一個虛擬環境,使得項目的依賴全部在一個虛擬且封閉的環境中,互不幹擾。然而,這就夠了嗎?

想象下面一種場景:你的新項目在Python 3.3下面開發,而你維護的舊項目,缺工作在Python 2.7之上,為了完成工作,你不得不安裝兩個Python解釋器,並為每個解釋器配置virtualenv,在你調試執行的時候,不得不適用冗長的全路徑調用解釋器,或者不斷的修改你的環境變量。天哪,你再次陷入與你的工作無關的,煩人的事情中。

pyenv的出現,就是來拯救你的。pyenv是一個Python多版本管理工具,他設計精巧,通過巧妙的方法,可以使多版本的Python共存在一個操作系統能,簡單的實現切換,或者更具項目使用不同的Python。

pyenv支持插件,通過插件,可以和virtualenv完美結合,實現多版本,多環境的控制,是你的每個項目,仿佛運行在一個完全隔離的環境種一樣。

安裝pyenv

pyenv是純python開發的,安裝pyenv只需要極少數的依賴,它們是::

  • Python >= 2.5 < 3
  • git

因為pyenv是Python開發的,所以需要有一個可運行的python版本,然而,這個不必擔憂,絕大多數linux和unix發行版以及mac都已經預裝了python,我們唯一需要做的是安裝git,並且把他的路徑放到PATH中。

如果你能訪問Github, 那麽安裝pyenv是一件簡單而快樂的事, 因為pyenv的作者,很貼心的給我們準備了一個安裝腳本pyenv-installer,只需要簡單的執行就可以了。

使用pyenv-installer安裝pyenv很簡單,只需要在終端執行:

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

等待一段時間就可以了。安裝完成,pyenv-installer會提示你配置pyenv的環境變量,你僅僅需要做的就是根據提示,把如下的內容加入到你的profile裏。

export PYENV_ROOT="\${HOME}/.pyenv"

if [ -d "\${PYENV_ROOT}" ]; then
  export PATH="\${PYENV_ROOT}/bin:\${PATH}"
  eval "\$(pyenv init -)"
fi

重新載入profile之後,你就可以開始使用你的pyenv了,使用pyenv-installer安裝的pyenv,會幫助我們安裝幾個有用的插件,其中,最常用的有:

  • pyenv-virtualenv 用於整合virtualenv
  • pyenv-pip-rehash 用於使用pip安裝包之後自動執行rehash
  • pyenv-update 用於升級pyenv

使用pyenv安裝Python

使用pyenv安裝Python非常簡單,但是在由於需要編譯Python,所以我們需要有變異Python的依賴,以CentOS 6為例,我們需要如下依賴:

  • gcc
  • gcc-c++
  • make
  • patch
  • openssl-devel
  • zlib-devel
  • readline-devel
  • sqlite-devel
  • bzip2-devel

你可以使用你喜歡的包管理器來安裝這些依賴,例如:

yum -y install gcc gcc-c++ make patch openssl-devel zlib-devel readline-devel sqlite-devel bzip2-devel

完成以上步驟之後,你可以使用pyenv來管理你的Python環境了。安裝Python只需要使用install命令即可。

pyenv install 2.7.5

以上命令將在你的系統上安裝 Python-2.7.5, 使用過linux包管理系統的朋友,對這樣的安裝方式,是相當親卻的。

install命令有若幹選項可用,可以通過 pyenv help install來查看。常用的,我們可以通過-l 選項來查看所有可用版本:

pyenv install -l

講列出所有可用版本。

tips:由於使用pyenv安裝的時候,需要到github下載Python源碼包,國內用戶可能速度比較慢,這個時候,可以修改PYTHON_BUILD_MIRROR_URL環境變量,使用國內鏡像。http://magedu-python.qiniudn.com/pythons是我制作的一個鏡像,托管在七牛雲存儲上

安裝完成之後,並不能立刻使用你所安裝的Python,因為pyenv作為一個Python環境管理工具,安裝只是第一步,你還需要切換到你新的Python版本上。pyenv提供兩個命令來切換Python版本。global命令和local命令。故名思議,一個是全局的,一個是本地的。

在介紹兩個切換命令之前,我們先來看其他幾個pyenv命令。

versions和version命令

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

pyenv versions

執行以上輸出,你將會得到如下的輸出: 技術分享

也許你的輸出會有所出入,但是大致相同,前面加*號的版本是當前版本,後面括號內的內容描述了它是在何處設置的,後面會詳細講解。

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

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

global和local命令

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

pyenv local 2.7.5

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

pyenv global 2.7.5

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

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

到這裏,你或許已經迫不及待的想要開始了,那麽你可以跳過本章之後的部分,直接看第二章,開始你的Python之旅,但是我還是強烈建議你以後回過頭來看看本章剩下的部分,他演示了如何使用pyenv結合virtualenv的強大功能。

uninstall 命令

顧名思義,uninstall命令是用來卸載Python版本的,一個已經安裝的版本,如果我們不在使用,可以簡單的執行uninstall命令把它從硬盤上卸載。

pyenv uninstall 2.7.5

以上命令將卸載Python-2.7.5

pyenv與virtualenv

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

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

cd $PYENV_ROOT/plugins
git 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.5 my_project

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

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

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

pyenv virtualenvs

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

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

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

二、使用

pyenv virtualenv 2.7.10 jyallprodpy

參考:https://github.com/comynli/pybooklet/blob/master/install.md

008_使用pyenv進行py開發環境管理