文章目錄
- pip
- virtualenv
- 缺點(diǎn)
- Pipenv
- 總結(jié)
學(xué)Python有段時(shí)間了,學(xué)的時(shí)候會(huì)想著拿它和Java對比。
- 在對比的時(shí)候,發(fā)現(xiàn) Java 有很成熟的項(xiàng)目構(gòu)建工具,有使用 xml 的 Maven,也有使用 groovy 的 Gradle,這樣的構(gòu)建工具能夠自動(dòng)處理項(xiàng)目的依賴,很是方便。
-
對于Python,在依賴管理方面,從一個(gè)初學(xué)者的角度看,嗯,只能說,貴圈真亂!(本文純屬個(gè)人觀點(diǎn),不喜勿噴) 好吧,讓我們捋一捋。
- 在包管理方面,聽說現(xiàn)在在役的包管理工具有 distutils、 setuptools、 distribute、 distlib、 pip,真讓人眼花繚亂。幸運(yùn)的是,現(xiàn)在貌似有setuptools和pip就已經(jīng)足夠了。
- 在項(xiàng)目依賴隔離方面,Python主要使用虛擬環(huán)境,而關(guān)于虛擬環(huán)境的模塊,pyenv、 venv、 virtualenv、 virtualenvwrapper,也是叫人看到頭皮發(fā)麻!
- 此外,很多 Python庫使用了 C/C++語言,即使 Python 只是一個(gè)小版本的更新,對應(yīng)的庫也需要完全重新編譯一次,也就是說不同小版本的 Python 的依賴也不一定能兼容。
- 還有就是版本問題(一直認(rèn)為是個(gè)大坑!),很多時(shí)候,我們都希望能用一個(gè)工具來在兩個(gè)版本間靈活地切換,并分別管理它們的依賴。
- 雖然存在眾多不足,但可以看到的是,Python依然在往好的方向發(fā)展,比如目前的終極解決方案pipenv,其出現(xiàn)讓Python的依賴管理逐漸優(yōu)雅和簡單。下面來總結(jié)一下我覺得比較有用的依賴管理工具,希望可以讓和我一樣的初學(xué)者在依賴管理方面少走一些彎路。
pip
? 之前我曾寫過關(guān)于pip使用的,pip的基本使用。但如果在做項(xiàng)目時(shí),只會(huì)使用
pip intall
來管理包,用久了會(huì)發(fā)現(xiàn)各個(gè)項(xiàng)目的模塊雜揉到一起,很是混亂,還可能會(huì)導(dǎo)致各種奇怪的錯(cuò)誤,因?yàn)閜ip安裝好的模塊全都在一個(gè)全局的模塊庫中,無法實(shí)現(xiàn)項(xiàng)目間的依賴隔離。顯然,pip在包管理方面很好用,但在要隔離項(xiàng)目間的依賴,還需要使用別的工具,比如
virtualenv
。
virtualenv
在使用 virtualenv 處理項(xiàng)目依賴時(shí),我們通常會(huì)使用 virtualenv 創(chuàng)建一個(gè)虛擬環(huán)境,再創(chuàng)建一個(gè)依賴包列表 requirements.txt ,然后他們可以使用 pip進(jìn)行安裝。這種方法一般都會(huì)工作正常,但有時(shí)它會(huì)表現(xiàn)出一些怪異行為。下面是其使用時(shí)的一些缺陷。
缺點(diǎn)
- 你可能得手動(dòng)安裝或刪除某些特定版本的包,并記得定期更新 requirements.txt 文件,以保持項(xiàng)目環(huán)境的一致。特別是當(dāng)你想要在你的虛擬環(huán)境中安裝Python包,但它不一定與項(xiàng)目本身相關(guān)聯(lián)的時(shí)候。
- 此外,一些項(xiàng)目有時(shí)會(huì)保留 requirements.txt 文件的兩個(gè)版本——一個(gè)用于開發(fā)環(huán)境,一個(gè)用于生產(chǎn)環(huán)境,這可能會(huì)導(dǎo)致更多的復(fù)雜性。
Pipenv
不得不說,在項(xiàng)目包管理方面,Python確實(shí)存在不少的坑。直到Pipenv的出現(xiàn),Python的依賴管理才逐漸變得優(yōu)雅起來。Pipenv是官方推薦的的python包管理工具,它旨在將所有包管理工具(如bundler, composer, npm, cargo, yarn等)的優(yōu)點(diǎn)集中應(yīng)用于python領(lǐng)域。
下面是其主要優(yōu)勢:
- 集成了pip,virtualenv兩者的功能,且完善了兩者的一些缺陷。
- 支持Python2 和 Python3,在各個(gè)平臺(tái)的命令都是一樣的。
- 過去用virtualenv管理requirements.txt文件可能會(huì)有問題,Pipenv使用Pipfile和Pipfile.lock,后者存放將包的依賴關(guān)系,查看依賴關(guān)系是十分方便。
- 各個(gè)地方使用了哈希校驗(yàn),無論安裝還是卸載包都十分安全,且會(huì)自動(dòng)公開安全漏洞。
-
通過加載
.env
文件簡化開發(fā)工作流程。
總結(jié)
- 如果需要將庫安裝到全局系統(tǒng),我們還是需要使用pip;
- 管理項(xiàng)目依賴方面,pipenv是目前的終極解決方案;
- 如果需要維護(hù)使用virtualenv的項(xiàng)目,也可以使用pipenv,因?yàn)榧嫒輛irtualenv,并且virtualenv項(xiàng)目可以方便地遷移到pipenv。
最后, 個(gè)人建議,保持簡單,擁抱pipenv吧!
關(guān)于Pipenv的使用,可以看一下我的另一篇文章, Pipenv使用入門
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
