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

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