創用 CC 授權條款
除非另有註明,本網站的著作Fygul Hether製作,以創用CC 姓名標示-非商業性-禁止改作 4.0 國際 授權條款釋出。

2019年9月11日 星期三

pipenv使用例

摘要

本文以一假想情境來說明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。借用此範例程式內容不是本文的重點,這裡只為了方便展示。

必要軟體

要達成本文所述工作,有幾個東西有必要先安裝好:
  1. pip3:安裝Python包用。
  2. pyenv:利用它來安裝不同的Python版號。
  3. pipenv:本文主角,用它來建立虛擬環境並安裝Python包。
  4. pyenv在安裝Python時是下載源碼來安裝的,要在本地機器進行編譯源碼,所以會用到這方面的一些系統套件。
virtualenv在安裝pipenv時會自動安裝進來,所以不必刻意去安裝它。

安裝必要軟體

全系統用的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

其他

本文只是簡單快速概覽的例子,較詳細內容可見前述摘要所提到的幾篇。

沒有留言:

張貼留言