Pipenv指令大全

Adventurous Johnny
12 min readJul 9, 2018

--

Pipenv是一個結合virtual environment(虛擬環境)以及pip套件管理的開發工具。同時也是pip官方推薦的套件管理工具。這個工具,讓我的開發環境變得整潔許多。有鑑於我推薦給同事之後佳評不斷,我決定寫一篇文章來推廣pipenv,也記錄一下我這段時間的使用。

安裝 pipenv(以及pyenv):

雖然github上面有其他方式(brew, apt-get), 但我覺得使用pip來安裝pipenv還是最方便,通常我會使用系統的python來安裝,這樣無論我切換到哪個版本我都可以使用pipenv。另外若你有同時需要在多個python版本下開發的需求話也建議一併安裝pyenv,pyenv與pipenv的搭配是很棒的,在建立虛擬環境的時候,若該python版本目前主機上沒有,會自動提示要不要使用pyenv安裝,非常方便。

sudo -H pip install pipenv #安裝pipenv

curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash #安裝pyenv

基本使用:

首先,切換到專案目錄底下。

cd <project_path>

然後,使用pipenv創建我們的虛擬環境,使用以下指令皆可。

pipenv install --three        #使用python 3建立環境
pipenv install --two #使用python 2建立環境
pipenv install --python 3.6.5 #更精確的指定版本

大概會看到像這樣的東西:

$ pipenv install --python 3.6.0
Creating a virtualenv for this project…
Using /Users/hiimdoublej/.pyenv/versions/3.6.0/bin/python3.6m (3.6.0) to create virtualenv…
⠋Running virtualenv with interpreter /Users/hiimdoublej/.pyenv/versions/3.6.0/bin/python3.6m
Using base prefix '/Users/hiimdoublej/.pyenv/versions/3.6.0'
New python executable in /Users/hiimdoublej/.local/share/virtualenvs/tmp-6jmove0L/bin/python3.6m
Also creating executable in /Users/hiimdoublej/.local/share/virtualenvs/tmp-6jmove0L/bin/python
Installing setuptools, pip, wheel...done.
Virtualenv location: /Users/hiimdoublej/.local/share/virtualenvs/tmp-6jmove0L
Creating a Pipfile for this project…
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (625834)!
Installing dependencies from Pipfile.lock (625834)…
🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00
To activate this project's virtualenv, run the following:
$ pipenv shell

走到這一步,你的虛擬環境就建置好了! 你會發現多了兩個檔案 : Pipfile , Pipfile.lock ,兩個檔案的詳細解說可以參考這篇stackoverflow。這兩個檔案基本上都給pipenv管理就好,非常偶而才會要手動更改這兩個檔案。

安裝套件:

pipenv install django #在虛擬環境中安裝django套件

進入虛擬環境中:

pipenv shell 

如果你有使用oh-my-zsh的話,將這個plugin加到 oh-my-zsh 裡面,在你 cd到一個有虛擬環境的資料夾的時候就會自動幫你進入虛擬環境喔 ! (plugin source: gangleri/oh-my-zsh@pipenv_plugin branch)

想安裝這個plugin的話,首先執行下面這些command:

mkdir -p $ZSH/plugins/pipenv
curl https://raw.githubusercontent.com/gangleri/oh-my-zsh/pipenv_plugin/plugins/pipenv/pipenv.plugin.zsh -o $ZSH/plugins/pipenv/pipenv.plugin.zsh

一切順利的話,我們的oh-my-zsh資料夾裡應該有來自gangleri大神的pipenv plugin了,接下來我們需要將 pipenv 加到你的 ~/.zshrc 裡的 plugins 清單裡,大概會像這樣:

# ~/.zshrc
plugins = (
git,
pipenv, #將剛剛下載的pipenv plugin加到zshrc裡面
others....
)

pipenv的基本使用介紹到這裡。

進階使用以及其他指令:

更新pipenv&pip到最新版本:

 pipenv --upgrade

輸出虛擬環境根目錄資訊:

pipenv --where

輸出虛擬環境執行檔所在目錄:

pipenv --venv

輸出現在使用的python執行檔資訊(等同於which python):

pipenv --py

輸出相關環境變數:

pipenv --envs

刪除此虛擬環境:

pipenv --rm 

最小化輸出:

pipenv --bare 

顯示man page(詳細說明):

pipenv --man 

顯示版本:

pipenv --version

檢查已安裝套件之安全性:

pipenv check
pipenv check --three / --two #指定python2 or 3
pipenv check --python TEXT #指定python版本
pipenv check --system #使用系統原生python
pipenv check --unused TEXT #檢視沒有用到的套件

刪除不在pipfile.lock中的套件:

pipenv clean
pipenv clean -v, --verbose #詳細輸出
pipenv clean --three / --two #指定python2 or 3
pipenv clean --python TEXT #指定python版本
pipenv clean --dry-run #模擬並列出不需要的套件,而不真的刪除

顯示目前安裝的套件以及相依性:

pipenv graph
pipenv graph --bare #最小輸出(雖然官方文檔這樣寫,但實際上會輸出所有的套件)
pipenv graph --json #用json格式輸出
pipenv graph --reverse #內外翻轉輸出

install
安裝套件,若後面沒有帶任何參數則會安裝Pipfile內所有套件。

pipenv install [OPTIONS] [PACKAGE_NAME] [MORE_PACKAGES]
pipenv install -d,--dev #在[dev-packages]中安裝套件
pipenv install --system #直接從Pipfile中安裝套件到系統中,不建立虛擬環境
pipenv install -r, --requirements <requirements.txt>
#從requirements.txt安裝套件至虛擬環境中
pipenv install -c, --code #從code導入
pipenv install -v, --verbose #詳細資訊模式
pipenv install --ignore-pipfile #僅使用Pipfile.lock而非Pipfile安裝套件
pipenv install --skip-lock #安裝時不使用鎖定機制
pipenv install --sequential #一次僅安裝一個套件,而非同時安裝
pipenv install --deploy #若Pipfile.lock過時或python版本有誤則中斷指令
pipenv install --pre #允許預發布
pipenv install --keep-outdated #防止Pipfile.lock更新過時的套件依賴關係

lock
生成pipfile.lock

pipenv lock [OPTIONS]
pipenv lock -v, --verbose #詳細資訊模式
pipenv lock --pypi-mirror <pypi_mirror> #使用一個指定的鏡相
pipenv lock -r, --requirements #產生與requirements.txt相容的lock文件
pipenv lock -d, --dev #為開發模式的套件相依性產生與requirements.txt相容的lock文件
pipenv lock --clear #清除依賴關係緩存
pipenv lock --pre #允許預發布
pipenv lock --keep-outdated #防止Pipfile.lock更新過時的套件依賴關係

open
在編輯器中打開指定的套件

pipenv open [OPTIONS] MODULE
pipenv open --three / --two #指定python2 or 3
pipenv open --python TEXT #指定python版本
pipenv open --pypi-mirror <pypi_mirror> #使用一個指定的鏡相

run
在虛擬環境內執行指令,類似docker exec

pipenv run [OPTIONS] COMMAND
pipenv run --three / --two #指定python2 or 3
pipenv run --python TEXT #指定python版本

shell
在虛擬環境中產生一個shell並進入,意同virtualenv的activate

pipenv shell [OPTIONS] [SHELL_ARGS]
pipenv shell --three / --two #指定python2 or 3
pipenv shell --python TEXT #指定python版本
pipenv shell --fancy #使用美化模式運行shell,需要shell本身已配置過,我下了之後是沒有任何差別
pipenv shell --anyway #容許巢狀疊加產生shell

sync
安裝所有在pipfile.lock中的套件

pipenv sync [OPTIONS]
pipenv sync --three / --two #指定python2 or 3
pipenv sync --python TEXT #指定python版本
pipenv sync -v, --verbose #詳細訊息模式
pipenv sync --bare #精簡輸出
pipenv sync -d, --dev #另外在[dev-packages]中安裝套件
pipenv sync --clear #清除套件相依性快取
pipenv sync --sequential#一次只安裝一個套件

uninstall
反安裝指定的套件並將其從Pipfile中清除

pipenv uninstall [OPTIONS] [PACKAGE_NAME] [MORE_PACKAGES]...
pipenv uninstall --three / --two #指定python2 or 3
pipenv uninstall --python TEXT #指定python版本
pipenv uninstall -v, --verbose #詳細訊息模式
pipenv uninstall --system #使用系統的pip操作
pipenv uninstall --lock #反安裝之後鎖定
pipenv uninstall --all-dev #反安裝所有在[dev-packages]下的套件
pipenv uninstall --all #從虛擬環境中清除所有套件,但不更動Pipfile
pipenv uninstall --keep-outdated #防止Pipfile.lock更新過時的套件依賴關係

update
更新指定套件

pipenv update [OPTIONS] [PACKAGES]…
pipenv update -d,--dev #在[dev-packages]中安裝套件
pipenv update --three / --two #指定python2 or 3
pipenv update --python TEXT #指定python版本
pipenv update -v, --verbose #詳細訊息模式
pipenv update --clear #清除套件相依性快取
pipenv update --bare #精簡輸出
pipenv update --pre #允許預發佈
pipenv update --keep-outdated #防止Pipfile.lock更新過時的套件依賴關係
pipenv update --sequential #一次只安裝一個套件
pipenv update --outdated #列出過時的相依性關係
pipenv update --dry-run #列出過時的相依性關係

以上就是Pipenv的絕大部分指令,開始享受它的美好吧!

References: https://docs.pipenv.org/, https://github.com/pyenv/pyenv-installer, https://github.com/pyenv/pyenv, https://github.com/gangleri/pipenv

--

--

Adventurous Johnny

Backend engineer, developed a ton with Django, trying out NodeJS too……