Pipenv 使用教學

By chairco(Jason), Feb 14, 2017, in category Python

Pipenv, Python

Pipenv 是一個整合 Pipfile, pip, virtualenv 的套件管理工具。

根據開發者得說法:

Pipenv是一個實驗性項目,旨在將所有最好的包裝世界帶到Python世界。它將Pipfile,pip和virtualenv整合到一個單一的工具。

Python 目前開發環境已經非常成熟,各種類型的套件只要隨手一個 pip install 就信手拈來讓開發者省去很多力氣。再來 Python 的生態系裡不像 node js 有非常多的版本,目前 Pytchon 的生態系主要就分成兩個分支 Python 2.x 與 Python 3.x,簡單來講 Python 就是一個簡單易懂又容易的語言。

不過這不代表 Python 就不需要一個好的套件管理。至少 Python 在不同的 2.x 與 3.x 透過 six 這些套件完美的橋接不同的套件,但事實上在開發過程中我們有更多使用 Python 所開發的 framework,這些 framework 相依著很多不同的套件,例如 Django 有一個很棒的套件叫 Django-Debug-Toolbar 這個套件在 1.5 可以支援 Django 1.9.x 的版本,但當 Django 1.10.x 後一些 api 作了改變就壞掉惹!這時就必須要升到 Django-Debug-Toolbar 1.6 的版本。所以其實還是需要一個好的套件管理協助我們避免這種事情發生。

要怎麼安裝這個套件呢?首先還是先用 pip 來安裝 pipenv 這個套件。(如果有 py2.x, py3.x 只要在其中一個環境安裝就可以了)

Python 2.x: pip install pipenv

Python 3.x: pip3 install pipenv

安裝完成之後可以試試看在 commandline 下輸入 pipenv 就會輸出相關使用方法:

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

Options:
  --where          Output project home information.
  --venv           Output virtualenv information.
  --rm             Remove the virtualenv.
  --bare           Minimal output.
  --three / --two  Use Python 3/2 when creating virtualenv.
  --python TEXT    Specify which version of Python virtualenv should use.
  -h, --help       Show this message then exit.
  --version        Show the version and exit.


Usage Examples:
   Create a new project using Python 3:
   $ pipenv --three

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

   Create a lockfile:
   $ pipenv lock

Commands:
  check      Checks PEP 508 markers provided in Pipfile.
  install    Installs provided packages and adds them to...
  lock       Generates Pipfile.lock.
  run        Spawns a command installed into the...
  shell      Spawns a shell within the virtualenv.
  uninstall  Un-installs a provided package and removes it...
  update     Updates pip to latest version, uninstalls all...

然後管理的方法很簡單,只要執行 pipenv --three 就會在預設資料夾底下(mac: /Users/{username}/.virtualenvs) 建立一個和這個資料夾同名稱的虛擬環境。 接著你就可以試試透過 pipenv install requests 安裝 requests 這個套件。安裝完後你可以執行cat Pipfile 看內容如下,這時 requests 已經被記錄在 Pipfile 了。

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true

[packages]
requests = "*"

你可以看到安裝完成了,接著用 pipenv lock 鎖定 dependence,cat Pipfile.lock 看到內容會如下,你會看見他會產生一個 hash 值,這個值其實就是讓你這個虛擬環境下能保持 requests == 2.13 相依性。

{
    "default": {
        "requests": {
            "version": "==2.13.0",
            "hash": "sha256:1a720e8862a41aa22e339373b526f508ef0c8988baf48b84d3fc891a8e237efb"
        }
    },
    "develop": {},
    "_meta": {
        "sources": [
            {
                "url": "https://pypi.python.org/simple",
                "verify_ssl": true
            }
        ],
        "requires": {},
        "hash": {
            "sha256": "da2810af0c3b5333e0de2fce9bea2a228812e2014e5f5fe3b1c533badc6c24e4"
        }
    }
}%

最後如果要執行 Python shell 一樣透過 pipenv 輸入 pipenv shell 就能進去。(不過筆者不知道為什麼不行 @@,至少上稿前還找不到原因。)

用很簡單篇幅介紹這個新的工具,如果有更多想參考可以到 Pipenv 教學


更新在 6/19,用了一陣子 Pipenv 覺得實在太好用了。不過有一些 Pip 使用習慣轉換過來做些紀錄。

2017-09-26 更新: 後來找到原因,因為安裝 pyenv 導致,原因在 issue#184。解決方法):