Python3 - Virtualenv & Virtualenvwrapper 拯救骯髒的套件環境

MineCola
4 min readJan 28, 2019

--

俗話說的好:「工欲善其事,必先利其器」

前陣子矇矇懂懂的踏入 Python 的世界,除了在課程中的 APCS、CPE 解題之外還玩到了一些爬蟲及機器學習的東西,然而當時還沒注意到 pip 的運作方式與 node.js 的 npm 不同,不是以專案的方式安裝套件及相依,所以裝了一整車的套件在使用者和全域底下…

先來說說為什麼需要乾淨的環境好了,如果今天有個老舊的程式在系統中需要版本 1.0 的 X 套件,又有個新程式需要版本 2.0 的 X 套件,升級後,老舊程式可能會因為 X 套件是新版的而發生衝突,那客官您說是升級還是不升級?

之前我還常常遇到個坑,明明在自己系統上跑總是順順利利,在別人電腦上卻缺東缺西,原因就是之前髒髒的環境套件都裝好了,搞得我寫好的程式還要想用到哪些套件整理給對方,有了獨立的開發環境,只要把這個環境所安裝的套件清單匯出給對方安裝,就一勞永逸了!還不會遇到安裝版本不同的問題呢

幫大家整理一下優點總結

  1. 開發環境獨立,所依賴套件清楚
  2. 升級不會影響其他環境原有的套件版本
  3. 防止系統大雜燴所造成的管理困難以及產生可能的衝突

大整肅開始

滿滿亂七八糟的套件,顯示都顯示不完(笑

然而就踏上今天的拯救環境大作戰,首先我們要把上面的東西清乾淨,在終端機把下面的指令 key 進去,就可以匯出一個現有安裝 library 的清單

pip3 freeze > requirements.txt

接著可以一次性的把他們都解除安裝,下面的指令是依據我們匯出的清單來移除 library

pip3 uninstall -r requirements.txt -y

最後用 pip3 list 就能看到乾淨的 pip ,舒服~!

開始安裝 Virtualenv 與 Virtualenvwrapper

首先不管怎樣都先裝一下套件

pip3 install virtualenv virtualenvwrapper

Virtualenv 運作有點像 npm,沒用過 npm 的朋友可以理解成:在資料夾中建立一個環境,讓你可以安裝屬於這個專案的套件,Github 上面命名習慣大多是 venvENV 之類的。

Virtualenv 使用方法大概如下:

## virtualenv 會將環境建立在當前資料夾底下virtualenv (環境名稱)## 以下是 Windowscd (環境名稱)/Scripts
activate.bat
## 以下是 Mac 用法cd (環境名稱)/bin
source activate
## 退出環境(兩個系統都一樣)deactivate

你可能會好奇為什麼還有 Virtualenvwrapper?那是因為如果有專案需要重複使用相同環境的話,在 Virtualenv 底下就需要重複安裝相同的環境,然而使用 Virtualenvwrapper 除了可以集中管理環境之外還能夠「共用」及「複製」環境。

Virtualenvwrapper 使用方法如下

首先先設定一下使用 python3 執行並指定環境儲存路徑(以 Linux、Mac 為例),首先先找到你的終端機啟動時的 startup file,例如 .bashrc.profile (我自己是使用 zsh,所以是在 ~/.zshrc 裡面加上下列設定)

export WORKON_HOME=(你想儲存環境的路徑)
export VIRTUALENVWRAPPER_PYTHON=(python3 的所在位置, 可以用 which python3 來查詢)
source /usr/local/bin/virtualenvwrapper.sh

再來是指令的部分,一目瞭然

## 查詢環境lsvirtualenv## 建立環境mkvirtualenv (環境名稱)## 複製環境cpvirtualenv (原有環境) (新環境名稱)## 刪除環境rmvirtualenv (環境名稱)## 使用環境workon (環境名稱)## 退出環境deactivate

以上,最後祝大家都有一個乾乾淨淨的環境可以使用 ~耶嘿

--

--