使用Pipfile代替reqirements.txt

很多語言都提供了環(huán)境隔離的支持,例如nodejs的node_module,golang的go mod,python也有virtualenv和pyvenv等機制。為了建立依賴快照,通常會用pip freeze > requirements.txt 命令生成一個requirements.txt文件,在一些場景下這種方式就可以滿足需求,但是在復(fù)雜場景下requirements.txt就力不從心了。

requirements.txt

appdirs==1.4.3
astroid==2.3.3
attrs==19.3.0
black==19.3b0
certifi==2019.11.28
chardet==3.0.4
click==7.1.1
et-xmlfile==1.0.1
Flask==1.1.1
gevent==1.4.0
greenlet==0.4.15
idna==2.9
isort==4.3.21
itsdangerous==1.1.0
jdcal==1.4.1
Jinja2==2.11.1
lazy-object-proxy==1.4.3
MarkupSafe==1.1.1
mccabe==0.6.1
numpy==1.18.2
openpyxl==3.0.3
pandas==1.0.3
pylint==2.4.4
python-dateutil==2.8.1
pytz==2019.3
requests==2.23.0
six==1.14.0
tinydb==3.15.2
toml==0.10.0
typed-ast==1.4.1
urllib3==1.25.8
Werkzeug==1.0.0
wrapt==1.11.2

requirements.txt文件中只記錄了依賴的版本,所以如果遇到官方的pypi源下載速度慢,需要使用更快的國內(nèi)鏡像下載,通常只能使用pip install -i安裝或者修改全局的pip.conf文件。

當(dāng)某個項目使用確定的python版本,這個版本也并不能在requirements.txt中體現(xiàn),只能通過readme或者文檔來記錄,并且需要在創(chuàng)建虛擬環(huán)境時手動調(diào)用正確的python版本。

項目需要使用flake8、pylint、black等代碼優(yōu)化工具時,這些依賴也會被pip freeze命令寫入requirements.txt中,然而這些依賴是不需要出現(xiàn)在生產(chǎn)環(huán)境的。

Pipfile

Pipenv的出現(xiàn),一舉解決了上面的問題,Pipenv是Kenneth Reitz在2017年1月發(fā)布的Python依賴管理工具,他所基于的Pipfile則用來替代requirements.txt。

[[source]]
name = "pypi"
url = "https://pypi.doubanio.com/simple"
verify_ssl = false

[dev-packages]
isort = "*"
black = "==19.3b0"
pylint = "*"

[packages]
flask = "*"
tinydb = "*"
pandas = "*"
requests = "*"
gevent = "*"
openpyxl = "*"

[requires]
python_version = "3.6"

好處1:記錄內(nèi)容更詳細

相比于requirements.txt,Pipfile多了pip源的設(shè)置,可以針對不同項目使用不同環(huán)境。并且將依賴分為dev和默認環(huán)境,例如pylint、flake8、black等依賴,可以將他們放入dev依賴中。

好處2:減少手動激活虛擬環(huán)境次數(shù)

pipenv將virtualenv、pyvenv和pip命令整合使用,pipenv減少了手動激活虛擬環(huán)境的次數(shù),使用pyvenv模塊運行main.py,需要先執(zhí)行source venv/bin/activate激活虛擬環(huán)境,然后再執(zhí)行python main.py,而pipenv只需要在項目根目錄執(zhí)行pipenv run main.py ,就可以自動激活當(dāng)前虛擬環(huán)境并執(zhí)行main.py。如果需要安裝依賴的,直接執(zhí)行pipenv install xxx,也不需要先激活虛擬環(huán)境,再使用pip install xxx安裝。

好處3:鎖機制

從Pipfile文件添加或刪除安裝的包,會生成Pipfile.lock來鎖定安裝包的版本和依賴信息,通過pipfile.lock文件,可以精確恢復(fù)以來的版本。

常用命令

# 初始化虛擬環(huán)境(可自己指定python版本)
$ pipenv --python 3.6.9

# 激活當(dāng)前項目虛擬環(huán)境
$ pipenv shell

# 安裝開發(fā)依賴包
$ pipenv install black --dev

# 生成lock文件
$ pipenv lock
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容