Pipenv – 超好用的 Python 包管理工具

pipenv 是什麼

pipenv 是 python 官方推薦的包管理工具,集成了 virtualenv、pyenv 和 pip 三者的功能於一身,相似於 php 中的 composer。php

咱們知道,爲了方便管理 python 的虛擬環境和庫,一般使用較多的是 virtualenv 、pyenv 和 pip,可是他們不夠好用或者說不夠偷懶。因而 requests 的做者 Kenneth Reitz 開發了用於建立和管理 python 虛擬環境的工具 —- pipenv。python

它可以自動爲項目建立和管理虛擬環境,從 Pipfile 文件中添加或者刪除包,同時生成 Pipfile.lock 文件來鎖定安裝包的版本和依賴信息,避免構建錯誤。git

pipenv 主要解決了如下問題:shell

  • 不用再單獨使用 virtualenv、pyenv 和 pip 了,如今它們結合到了一塊兒。
  • 不用再維護 requirement.txt 了,使用 Pipfile 和 Pipfile.lock 來代替。
  • 能夠在開發環境使用多個 python 版本。
  • 在安裝的 pyenv 條件下,能夠自動安裝須要的 python 版本。
  • 安全,普遍地使用 Hash 校驗,可以自動曝露安全漏洞。
  • 隨時查看圖形化的依賴關係。

安裝 pipenv

因爲個人開發環境一直都是 Mac 筆記本,因此這裏只介紹在 Mac 環境如何安裝好了。安全

使用 pip 安裝

$ pip install --user pipenv
複製代碼

這個命令在用戶級別(非系統全局)下安裝 pipenv。若是安裝後 shell 提示找不到 pipenv 命令,你須要添加當前 Python 用戶主目錄的 bin 目錄到 PATH 環境變量。若是你不知道 Python 用戶主目錄在哪裏,用下面的命令來查看:bash

$ python -m site --user-base
複製代碼

你會看到相似下面的輸出composer

/Users/liyafeng/Library/Python/3.6
複製代碼

使用 brew 安裝

Mac 下使用 brew 安裝軟件應該是最方便的了,推薦使用:編輯器

brew install pipenv
複製代碼

升級 pipenv:工具

brew upgrade pipenv
複製代碼

shell 自動補齊

Linux or Mac 環境下,bash下若是能自動命令補全豈不是更好?請把以下語句追加到.bashrc或者.zshrc便可:post

eval "$(pipenv --completion)"
複製代碼

經常使用命令

pipenv 具備的選項:

$ pipenv
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
  --where          顯示項目文件所在路徑
  --venv           顯示虛擬環境實際文件所在路徑
  --py             顯示虛擬環境Python解釋器所在路徑
  --envs           顯示虛擬環境的選項變量
  --rm             刪除虛擬環境
  --bare           最小化輸出
  --completion     完整輸出
  --man            顯示幫助頁面
  --three / --two  使用Python 3/2建立虛擬環境(注意本機已安裝的Python版本)
  --python TEXT    指定某個Python版本做爲虛擬環境的安裝源
  --site-packages  附帶安裝原Python解釋器中的第三方庫
  --jumbotron      An easter egg, effectively.
  --version        版本信息
  -h, --help       幫助信息
複製代碼

pipenv 可以使用的命令參數:

Commands:
  check      檢查安全漏洞
  graph      顯示當前依賴關係圖信息
  install    安裝虛擬環境或者第三方庫
  lock       鎖定並生成Pipfile.lock文件
  open       在編輯器中查看一個庫
  run        在虛擬環境中運行命令
  shell      進入虛擬環境
  uninstall  卸載一個庫
  update     卸載當前全部的包,並安裝它們的最新版本
複製代碼

一些例子:

Usage Examples:
   Create a new project using Python 3.6, specifically:
   $ pipenv --python 3.6

   Install all dependencies for a project (including dev):
   $ pipenv install --dev

   Create a lockfile containing pre-releases:
   $ pipenv lock --pre

   Show a graph of your installed dependencies:
   $ pipenv graph

   Check your installed dependencies for security vulnerabilities:
   $ pipenv check

   Install a local setup.py into your virtual environment/Pipfile:
   $ pipenv install -e .

   Use a lower-level pip command:
   $ pipenv run pip freeze

複製代碼

pipenv 使用過程

建立環境,安裝指定 python 的版本信息:

mkdir new_env & cd new_env
pipenv install 	// pipenv install --three
複製代碼

若是指定了 --two 或者 --three 選項參數,則會使用 python2 或者 python3 的版本安裝,不然將使用默認的 python 版原本安裝。固然也能夠指定準確的版本信息:

$ pipenv install --python 3
$ pipenv install --python 3.6
$ pipenv install --python 2.7.14
複製代碼

pipenv 會自動掃描系統尋找合適的版本信息,若是找不到的話,同時又安裝了 pyenv 的話,則會自動調用 pyenv 下載對應版本的 python, 不然會報錯。

這時候在當前 new_env 環境下生成 PipfilePipfile.lock 兩個環境初始化文件。

進入|退出環境:

進入環境:

pipenv shell 
複製代碼

退出環境:

exit //或者 ctrl+d
複製代碼

安裝第三方包:

這裏咱們測試安裝 urllib3 包好了:

pipenv install urllib3
複製代碼

此時,Pipfile 裏有最新安裝的包文件的信息,如名稱、版本等。用來在從新安裝項目依賴或與他人共享項目時,你能夠用 Pipfile 來跟蹤項目依賴。

Pipfile 是用來替代原來的 requirements.txt 的,內容相似下面這樣。source 部分用來設置倉庫地址,packages 部分用來指定項目依賴的包,dev-packages 部分用來指定開發環境須要的包,這樣分開便於管理。

$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
"urllib3" = "*"

[dev-packages]

[requires]
python_version = "3.6"
複製代碼

Pipfile.lock 則包含你的系統信息,全部已安裝包的依賴包及其版本信息,以及全部安裝包及其依賴包的 Hash 校驗信息。

$ Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "af58f3510cb613d4d9241128f9a0ceb9bb936ad907543e23ad8317011dcb6715"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {                
         "urllib3": {
            "hashes": [
                "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf",
                "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5"
            ],
            "index": "pypi",
            "version": "==1.23"
        }
    },
    "develop": {}
}
複製代碼

如今安裝另外一個包,再次查看這兩個文件的內容。你會發現 Pipfile 如今包含兩個安裝包了,Pipfile.lock 也包含了全部已安裝包的依賴包及其版本信息,以及全部安裝包及其依賴包的 Hash 校驗信息。每次你安裝新的依賴包,這兩個文件都會自動更新。

安裝指定版本包:

pipenv install urllib3==1.22
複製代碼

安裝開發環境下的包:

--dev 表示包括 Pipfile 的 dev-packages 中的依賴。

pipenv install httpie --dev
複製代碼

卸載第三方包:

pipenv uninstall urllib3 //或者 pipenv uninstall --all
複製代碼

更新安裝包:

pipenv update urllib3
複製代碼

更新全部包:

pipenv update 
複製代碼

這個命令會刪除全部軟件包而後從新安裝最新的版本。

查看虛擬環境目錄:

$ pipenv --venv
/Users/liyafeng/.local/share/virtualenvs/new_env-UVLdq9CB
複製代碼

最後的虛擬環境目錄是以當前環境 new_env 做爲目錄開頭的。

查看項目根目錄:

$ pipenv --where
/Users/liyafeng/Documents/www/pythondemo/new_env
複製代碼

檢查軟件包的完整性

你是否擔憂已安裝的軟件包有沒有安全漏洞?不要緊,pipenv 能夠幫你檢查,運行下面的命令:

$  pipenv check
Checking PEP 508 requirements…
Passed!
Checking installed package safety…
All good!
複製代碼

上面的命令根據 Pipfile 裏的 PEP 508 標記檢查安全漏洞。

查看依賴樹

$ pipenv graph
httpie==0.9.9
  - Pygments [required: >=2.1.3, installed: 2.2.0]
  - requests [required: >=2.11.0, installed: 2.19.1]
    - certifi [required: >=2017.4.17, installed: 2018.4.16]
    - chardet [required: <3.1.0,>=3.0.2, installed: 3.0.4]
    - idna [required: <2.8,>=2.5, installed: 2.7]
    - urllib3 [required: >=1.21.1,<1.24, installed: 1.23]
複製代碼

鎖定版本

更新 lock 文件鎖定當前環境的依賴版本

pipenv lock
複製代碼

環境變量管理

若是你開發調試時須要配一堆環境變量,能夠寫到 .env 文件中,在 pipenv shell 進入虛擬環境時,它會幫你把這些環境變量加載好,很是方便。

例如寫一個 .env 文件:

echo "FOO=hello foo" > .env
複製代碼

以後 pipenv shell 進入虛擬環境,echo $FOO 就能看環境變量的值 hello foo 已經設置好了。

參考連接

docs.pipenv.org/

pipenv 新款 Python 虛擬環境工具詳解

pipenv 筆記

pipenv 使用指南

Pipenv – 官方推薦的 Python 包管理工具

相關文章
相關標籤/搜索