摘要
本文以一假想情境來說明pipenv的使用方式。環境是Ubuntu 18.04,使用pipenv建立虛擬環境,安裝Python 3.7.4與需要的包。本文涉及以下軟體工具的使用,必要時可先稍了解一下其作用:
假想情境簡介
假定想在Ubuntu 18.04(系統用的Python 3版號是3.6.x)安裝使用Python 3.7.4,但又不想干擾到系統用的Python版本。於是另行建立Python虛擬環境,在其中使用Python 3.7.4,之後在此虛擬環境中安裝想要的Python包。假定在開發期間需要用到pytest寫測試,且寫CLI軟體要使用到docopt包,這裡假定寫好的程式是naval_fate.py。借用此範例程式內容不是本文的重點,這裡只為了方便展示。
必要軟體
要達成本文所述工作,有幾個東西有必要先安裝好:- pip3:安裝Python包用。
- pyenv:利用它來安裝不同的Python版號。
- pipenv:本文主角,用它來建立虛擬環境並安裝Python包。
- pyenv在安裝Python時是下載源碼來安裝的,要在本地機器進行編譯源碼,所以會用到這方面的一些系統套件。
安裝必要軟體
全系統用的pip3是常用的工具,如果還沒安裝好,請以下指令來安裝:
$ sudo apt install python3-pip
順便把編譯Python的函式庫也安裝好:
$ sudo apt update
$ sudo apt install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
安裝pyenv:有不同的安裝方式,這裡採用原作者所提供的方法:
$ curl https://pyenv.run | bash
完成後會提示在.bashrc後面增加內容,照著做即可,如:
export PATH="/home/fygul/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
因修改了.bashrc,關閉目前用的terminal,另開新的好讓新設定值生效。再來以pip3安裝pipenv,同樣有不同的安裝方式,這裡採用:
$ pip3 install --user pipenv
這樣會在用戶環境的Python 3.6安裝pipenv。若想啟用pipenv的 Shell Completion,在 .bashrc 中加入:
eval "$(pipenv --completion)"
安裝好後另開shell讓新設定生效。為專案建立虛擬環境
以下逐步進行建立虛擬環境的工作。現在萬事俱備,可以讓pipenv登場建立虛擬環境了,先準備好該專案所用的資料夾,並進入其中:
$ mkdir naval_fate
$ cd naval_fate
建立使用Python 3.7.4版的虛擬環境:
$ pipenv --python 3.7.4
完成後目錄中會產生Pipfile,記錄所用的Python版號。再來安裝docopt:
$ pipenv install docopt
完成後,會發現Pipfile被更新過,其中加入了docopt的記錄,也產生另一個檔案Pipfile.lock,記錄了包的hash值。以上為方便說明,分成兩行,其實可合併成一行,如下:
$ pipenv --python 3.7.4 install docopt
安裝好後,這目錄中只會出現兩個純文字檔案Pipfile, Pipfile.lock,實際的虛擬環境檔案所在會有訊息提示。完成的同時也會提示如何啟用虛擬環境,或者不進入虛擬環境而直接執行其中指令的方式,分別是:
$ pipenv shell
$ pipenv run [COMMAND]
再來安裝開發期才需要的Python包,注意這回加了--dev選項(表開發用的包):
$ pipenv install --dev pytest
上述Pipfile與Pipfile.lock內容會隨之更新。注意在這裡用不著requirements.txt這類東西。另外,雖然以pipenv shell進入虛擬環境後,也可以用pip安裝所需要的Python包,但要注意這樣並不會維護上述兩個檔案,故不建議。
假定寫好程式了naval_fate.py。
直接執行它:
$ pipenv run python naval_fate.py
或進入虛擬環境後執行它:
$ pipenv shell
(naval_fate)$ python naval_fate.py
要離開虛擬環境時,直接輸入exit或是Ctrl+D即可。重現工作環境
假定你使用git,想在別部機器進行後續的開發工作,先照前述安裝必要東西,以git或其它方式取得此資料夾並進入其中:
$ pipenv install --dev
這會依Pipfile與Pipfile.lock內容安裝好Python虛擬環境,docopt與開發期用的pytest。若交付客戶使用,用不到pytest,則是:
$ pipenv install
沒有留言:
張貼留言