使用Pipfile代替reqirements.txt

很多語(yǔ)言都提供了環(huán)境隔離的支持,例如nodejs的node_module,golang的go mod,python也有virtualenv和pyvenv等機(jī)制。為了建立依賴(lài)快照,通常會(huì)用pip freeze > requirements.txt 命令生成一個(gè)requirements.txt文件,在一些場(chǎng)景下這種方式就可以滿足需求,但是在復(fù)雜場(chǎng)景下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文件中只記錄了依賴(lài)的版本,所以如果遇到官方的pypi源下載速度慢,需要使用更快的國(guó)內(nèi)鏡像下載,通常只能使用pip install -i安裝或者修改全局的pip.conf文件。

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

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

Pipfile

Pipenv的出現(xiàn),一舉解決了上面的問(wèn)題,Pipenv是Kenneth Reitz在2017年1月發(fā)布的Python依賴(lài)管理工具,他所基于的Pipfile則用來(lái)替代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)容更詳細(xì)

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

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

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

好處3:鎖機(jī)制

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

常用命令

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

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

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

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

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

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