Steven5538

用 pyenv 及 pipenv 為多專案建立虛擬開發環境

Word count: 865Reading time: 3 min
2018/05/13 Share

隨著專案越來越多,專案 A 使用 Python 2,專案 B 使用 Python 3,而兩者的套件也互相不相依。
原本都是透過安裝兩種版本的 Python 並且透過 virtualenv 來進行專案套件管理。儘管這樣管理也是可以的,但當事情多起來時,常常不小心 A B 專案的虛擬環境誤用,在 A 專案環境不小心裝到 B 專案所需要的套件。

在這種情況下,好像是時候導入 pyenv 以及 pipenv 了。


pyenv - Python 多版本管理工具

pyenv 是一個 Python 版本管理工具,可以用它很簡單的在同台電腦上裝多個版本的 Python 且輕鬆的切換。

在 Mac 上安裝也很簡單:

1
2
$ brew update
$ brew install pyenv

安裝完成後可以用以下指令查看一下有哪些版本可以裝:

1
$ pyenv install -l

可以看到包含 pypystackless 等等許多 python 的兄弟姊妹都可以透過 pyenv 安裝。

在這裡我們就安裝一下 3.6.5

1
$ pyenv install 3.6.5

接著就可以看到你多了一個版本:

1
2
3
$ pyenv versions
* system (set by /Users/steven5538/.pyenv/version)
3.6.5

system 就是原本你所使用系統自代的 python 了,3.6.5 則是剛剛我們新增的版本。

接下來就可以切到專案底下並針對專案設定不同的 python 版本。

1
$ pyenv local 3.6.5

如果有需求的話,也可以直接 global 切換 python 版本。

pipenv - 你的 Python 現代化套件管理

原本使用 virtualenv 進行套件管理的方式已經漸漸不符合現代專案開發的需求,於是有了 pipenv,現在已成為 Python.org 官方推薦的套件管理工具。

他並不是廢棄了 virtualenv,而是融合了 virtualenv + pip + pyenv,用官方的說法就是 Python Development Workflow for Humans

pipenv 導入了 Pipfile 以及 Pipefile.lock,類似 nodejs 的套件管理方式。相比以前要手動維護 requirements.txt 的方式,這種方法可以有效的降低開發者忘記新增套件的風險。

在 Mac 上安裝也就是一行:

1
$ brew install pipenv

接下來在專案裡面,我們可以用下面的方式在專案底下建立特定版本的虛擬環境:

1
$ pipenv --python 3.6.5

想跑跑看是否有裝對版本可以使用:

1
2
3
4
5
$ pipenv run python
Python 3.6.5 (default, Apr 4 2018, 17:39:32)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

確定完成之後,就可以啟動囉。

1
$ pipenv shell

接下來安裝套件:

1
$ pipenv install

如果專案底下原本是使用 requirements.txt 的不用擔心,第一次透過以下指令安裝時,會將 requirements.txt 轉譯成 PipfilePipefile.lock

之後如果想要新增套件:

1
$ pipenv install flask

該套件就會自動新增至 Pipfile,再也不需要手動新增。

另外,pipenv 也導入了 dev 的概念,讓你可以在測試環境與實際佈署環境中安裝不同的套件,從而使實際佈署環境更乾淨。

1
$ pipenv install pycodestye --dev

比起以前自己透過 binrary file 區分 python2、python3,透過 pyenv 顯得簡單許多。另外,在團隊中引入 pipenv 也能夠降低套件忘記加入的風險。而能夠區分測試環境與實際佈署環境也能減少 docker image size。

CATALOG
  1. 1. pyenv - Python 多版本管理工具
  2. 2. pipenv - 你的 Python 現代化套件管理