Python依賴管理那點(diǎn)事

學(xué)Python有段時(shí)間了痒筒,學(xué)的時(shí)候會(huì)想著拿它和Java對(duì)比悉抵。

  • 在對(duì)比的時(shí)候袜腥,發(fā)現(xiàn) Java 有很成熟的項(xiàng)目構(gòu)建工具见擦,有使用 xml 的 Maven钉汗,也有使用 groovy 的 Gradle羹令,這樣的構(gòu)建工具能夠自動(dòng)處理項(xiàng)目的依賴,很是方便损痰。

  • 對(duì)于Python福侈,在依賴管理方面,從一個(gè)初學(xué)者的角度看卢未,嗯肪凛,只能說(shuō)堰汉,貴圈真亂!(本文純屬個(gè)人觀點(diǎn)伟墙,不喜勿噴) 好吧翘鸭,讓我們捋一捋。

    • 在包管理方面戳葵,聽(tīng)說(shuō)現(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庫(kù)使用了 C/C++語(yǔ)言耳胎,即使 Python 只是一個(gè)小版本的更新惯吕,對(duì)應(yīng)的庫(kù)也需要完全重新編譯一次,也就是說(shuō)不同小版本的 Python 的依賴也不一定能兼容怕午。

    • 還有就是版本問(wèn)題(一直認(rèn)為是個(gè)大坑废登!),很多時(shí)候郁惜,我們都希望能用一個(gè)工具來(lái)在兩個(gè)版本間靈活地切換堡距,并分別管理它們的依賴。

  • 雖然存在眾多不足兆蕉,但可以看到的是羽戒,Python依然在往好的方向發(fā)展,比如目前的終極解決方案pipenv虎韵,其出現(xiàn)讓Python的依賴管理逐漸優(yōu)雅和簡(jiǎn)單易稠。下面來(lái)總結(jié)一下我覺(jué)得比較有用的依賴管理工具,希望可以讓和我一樣的初學(xué)者在依賴管理方面少走一些彎路包蓝。

pip

之前我曾寫(xiě)過(guò)關(guān)于pip使用的驶社,pip的基本使用企量。但如果在做項(xiàng)目時(shí),只會(huì)使用pip intall來(lái)管理包亡电,用久了會(huì)發(fā)現(xiàn)各個(gè)項(xiàng)目的模塊雜揉到一起届巩,很是混亂,還可能會(huì)導(dǎo)致各種奇怪的錯(cuò)誤份乒,因?yàn)閜ip安裝好的模塊全都在一個(gè)全局的模塊庫(kù)中姆泻,無(wú)法實(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è)用于開(kāi)發(fā)環(huán)境祝高,一個(gè)用于生產(chǎn)環(huán)境栗弟,這可能會(huì)導(dǎo)致更多的復(fù)雜性。

Pipenv

不得不說(shuō)工闺,在項(xiàng)目包管理方面乍赫,Python確實(shí)存在不少的坑。直到Pipenv的出現(xiàn)陆蟆,Python的依賴管理才逐漸變得優(yōu)雅起來(lái)雷厂。Pipenv是官方推薦的的python包管理工具,它旨在將所有包管理工具(如bundler, composer, npm, cargo, yarn等)的優(yōu)點(diǎn)集中應(yīng)用于python領(lǐng)域遍搞。

下面是其主要優(yōu)勢(shì):

  1. 集成了pip罗侯,virtualenv兩者的功能器腋,且完善了兩者的一些缺陷溪猿。

  2. 支持Python2 和 Python3钩杰,在各個(gè)平臺(tái)的命令都是一樣的。

  3. 過(guò)去用virtualenv管理requirements.txt文件可能會(huì)有問(wèn)題诊县,Pipenv使用Pipfile和Pipfile.lock讲弄,后者存放將包的依賴關(guān)系,查看依賴關(guān)系是十分方便依痊。

  4. 各個(gè)地方使用了哈希校驗(yàn)避除,無(wú)論安裝還是卸載包都十分安全,且會(huì)自動(dòng)公開(kāi)安全漏洞胸嘁。

  5. 通過(guò)加載.env文件簡(jiǎn)化開(kāi)發(fā)工作流程瓶摆。

總結(jié)

  • 如果需要將庫(kù)安裝到全局系統(tǒng),我們還是需要使用pip性宏;

  • 管理項(xiàng)目依賴方面群井,pipenv是目前的終極解決方案;

  • 如果需要維護(hù)使用virtualenv的項(xiàng)目毫胜,也可以使用pipenv书斜,因?yàn)榧嫒輛irtualenv,并且virtualenv項(xiàng)目可以方便地遷移到pipenv酵使。

最后荐吉, 個(gè)人建議,保持簡(jiǎn)單口渔,擁抱pipenv吧样屠! 關(guān)于Pipenv的使用,可以看一下我的另一篇文章缺脉, Pipenv使用入門(mén)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瞧哟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子枪向,更是在濱河造成了極大的恐慌勤揩,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秘蛔,死亡現(xiàn)場(chǎng)離奇詭異陨亡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)深员,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)负蠕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人倦畅,你說(shuō)我怎么就攤上這事遮糖。” “怎么了叠赐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵欲账,是天一觀的道長(zhǎng)屡江。 經(jīng)常有香客問(wèn)我,道長(zhǎng)赛不,這世上最難降的妖魔是什么惩嘉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮踢故,結(jié)果婚禮上文黎,老公的妹妹穿的比我還像新娘。我一直安慰自己殿较,他們只是感情好耸峭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著淋纲,像睡著了一般抓艳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帚戳,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天玷或,我揣著相機(jī)與錄音,去河邊找鬼片任。 笑死偏友,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的对供。 我是一名探鬼主播位他,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼产场!你這毒婦竟也來(lái)了鹅髓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤京景,失蹤者是張志新(化名)和其女友劉穎窿冯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體确徙,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡醒串,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鄙皇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芜赌。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖伴逸,靈堂內(nèi)的尸體忽然破棺而出缠沈,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布洲愤,位于F島的核電站颓芭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏禽篱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一馍惹、第九天 我趴在偏房一處隱蔽的房頂上張望躺率。 院中可真熱鬧,春花似錦万矾、人聲如沸悼吱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)后添。三九已至,卻和暖如春薪丁,著一層夾襖步出監(jiān)牢的瞬間遇西,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工严嗜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粱檀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓漫玄,卻偏偏與公主長(zhǎng)得像茄蚯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子睦优,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 分別是兩個(gè)情緒 一個(gè)是難過(guò) 另一個(gè)也是難過(guò) 分別是兩個(gè)人 一個(gè)是男人 另一個(gè)是女人 分別還是兩根神經(jīng) 一個(gè)是發(fā)神經(jīng)...
    大魔魔閱讀 148評(píng)論 2 8
  • “我的愛(ài)人渗常,你可聽(tīng)見(jiàn),家鄉(xiāng)的歌聲飛得多遠(yuǎn)汗盘;日夜相思苦皱碘,風(fēng)霜不覺(jué)寒,總感到你隐孽,就在我身邊”… 這是國(guó)家大劇院歷時(shí)四年...
    紅鸞星說(shuō)閱讀 6,122評(píng)論 0 2
  • 當(dāng)我們的境界還沒(méi)那么高時(shí)缓醋,很容易被境轉(zhuǎn)如失,能專注在一件事情上才會(huì)看到明顯的效果。所以送粱,我現(xiàn)在的重點(diǎn)是深度放松自己褪贵,讓...
    許元香閱讀 920評(píng)論 0 0
  • 跟隨詩(shī)人譚寧君去到揚(yáng)雄故里(和@譚寧君老師) 文/培善 中國(guó)農(nóng)家樂(lè)的源頭 邁過(guò)了第幾代紅門(mén) 楊雄故里 掀起你的蓋頭...
    培善閱讀 776評(píng)論 8 24