pip 與 Pipfile

Reproduce from pip 與 Pipfile冒嫡,virtualenv

pip 是什么?

pip 是一個 Python 包也是 Python 推薦的包管理程序四苇,可以用于安裝和管理 Python 包孝凌,Python 2.7.9+ 版本中已經(jīng)自帶了 pip 包。針對 Python 2 和 3月腋,pip 分別提供了 pippip3 兩個命令蟀架。

pip 常用命令

  • 基本用法:pip install SomePackage,等效于 python -m pip install SomePackage榆骚;
  • 明確指定版本號:pip install SomePackage==1.0.0片拍;
  • 制定最小版本號:pip install SomePackage>=1.0.0
  • 指定版本號區(qū)間:pip install SomePackage>=1.0.0,<2.0.0寨躁。

pip 也支持直接從文件讀取包列表一邊批量安裝,通常命名為 requirements.txt牙勘,可以使用 pip install -r requirements.txt 來安裝职恳。requirements.txt 文件內(nèi)容是如下的扁平格式:

SomePackage1
SomePackage2>=1.0.0
SomePackage3>=1.0.0,<2.0.0

Pipfile 與 Pipfile.lock

PipfilePipfile.lock 是社區(qū)擬定的依賴管理文件,用于替代過于簡陋的 requirements.txt 文件方面。

基本理念

  • Pipfile 文件是 TOML 格式而不是 requirements.txt 這樣的純文本放钦;
  • 一個項目對應(yīng)一個 Pipfile,支持開發(fā)環(huán)境與正式環(huán)境區(qū)分恭金。默認(rèn)提供 defaultdevelopment 區(qū)分操禀;
  • 提供版本鎖支持,存為 Pipfile.lock横腿。

示例:

[[source]]
url = 'https://pypi.python.org/simple'
verify_ssl = true

[requires]
python_version = '2.7'

[packages]
requests = { extras = ['socks'] }
Django = '>1.10'
pinax = { git = 'git://github.com/pinax/pinax.git', ref = '1.4', editable = true }

[dev-packages]
nose = '*'

PEP 508 支持

可以設(shè)置支持的運(yùn)行環(huán)境:

[requires]
python_full_version = '3.6.0b1'

platform = 'windows'

pip 支持

From WoHowLearn 提醒颓屑,pip 最新版 19.2.1 已不支持 Pipfile, 參數(shù) -p / --pipfile 也已經(jīng)被移除耿焊。
pip 提供了 -p / --pipfile 參數(shù)用于安裝 Pipfile揪惦,類似 -r / --requirement 會默認(rèn)尋找 requirements.txt 文件,如果沒有指定 -p 的參數(shù)將會自動尋找 Pipfile 文件罗侯。

例如:

pip install -p    # 沒有參數(shù)會自動尋找 Pipfile 文件
pip install -p Pipfile.lock  # 根據(jù) Pipfile.lock 安裝指定依賴

需要注意的是器腋,pip install -p 安裝時會自動生成或更新 Pipfile.lock 文件。

Pipfile.lock

Pipfile.lock 是根據(jù) Pipfile 和當(dāng)前環(huán)境自動生成的 JSON 格式的依賴文件,任何情況下都不要手動修改該文件纫塌!

生成命令:pip freeze -p Pipfile诊县。

或者:pip freeze -p different_pipfile,將會生成 different_pipfile.lock措左。

virtualenv

一般情況依痊,每個應(yīng)用都需要各自擁有一套“獨(dú)立”的Python運(yùn)行環(huán)境。virtualenv就是用來為一個應(yīng)用創(chuàng)建一套“隔離”的Python運(yùn)行環(huán)境媳荒。

  1. 安裝 virtualenv:
    pip3 install virtualenv

  2. 進(jìn)入項目目錄抗悍,創(chuàng)建獨(dú)立的 Python 運(yùn)行環(huán)境,命名為 venv
    virtualenv -p python3 --no-site-packages venv
    命令 virtualenv 會創(chuàng)建一個獨(dú)立的 Python 運(yùn)行環(huán)境

    • 參數(shù) -p python3 將創(chuàng)建 python3 環(huán)境钳枕,而不是 python2缴渊;
    • 參數(shù) --no-site-packages 表明不復(fù)制已經(jīng)安裝到系統(tǒng) Python 環(huán)境中的所有第三方包,這樣就得到了一個不帶任何第三方包的「干凈」的 Python 運(yùn)行環(huán)境鱼炒。

    新的 Python 環(huán)境被放到當(dāng)前目錄下的 venv 目錄衔沼。

  3. 建立好環(huán)境后,進(jìn)入該環(huán)境:
    source venv/bin/activate
    命令提示符將會變化昔瞧,有個 (venv) 前綴指蚁,表示當(dāng)前環(huán)境是一個名為 venv 的 Python 環(huán)境。
    在 venv 環(huán)境下自晰,用 pip 安裝的包都被安裝到 venv 這個環(huán)境下凝化,系統(tǒng) Python 環(huán)境不受任何影響。

  4. 退出當(dāng)前的 venv 環(huán)境
    deactivate
    此時就回到了正常的環(huán)境酬荞,現(xiàn)在 pippython 均是在系統(tǒng) Python 環(huán)境下執(zhí)行搓劫。

針對每個應(yīng)用創(chuàng)建獨(dú)立的Python運(yùn)行環(huán)境,這樣就可以對每個應(yīng)用的Python環(huán)境進(jìn)行隔離混巧。

virtualenv 是如何創(chuàng)建「獨(dú)立」的 Python 運(yùn)行環(huán)境的呢枪向?
原理很簡單,就是把系統(tǒng) Python 復(fù)制一份到 virtualenv 的環(huán)境咧党,用命令 source venv/bin/activate 進(jìn)入一個 virtualenv 環(huán)境時秘蛔,virtualenv 會修改相關(guān)環(huán)境變量,讓命令 pythonpip 均指向當(dāng)前的virtualenv環(huán)境傍衡。

pipenv

pipenvPipfile 主要倡導(dǎo)者深员,requests 作者 Kenneth Reitz 的一個庫,有機(jī)地結(jié)合了 Pipfile蛙埂,pip辨液,和virtualenv

主要特征

  • 根據(jù) Pipfile 自動尋找項目根目錄箱残;
  • 如果不存在滔迈,可以自動生成 PipfilePipfile.lock止吁;
  • 自動在項目目錄的 .venv 目錄創(chuàng)建虛擬環(huán)境。(暫時需要設(shè)置 export PIPENV_VENV_IN_PROJECT=1)燎悍;
  • 自動管理 Pipfile 新安裝和刪除的包敬惦;
  • 自動更新 pip。

基本命令

  • pipenv --where:尋找項目根目錄谈山;
  • pipenv install:安裝 Pipfile 中所列的所有包俄删;
  • pipenv install --dev:安裝 Pipfiledev 環(huán)境所列的所有包;
  • pipenv uninstall:卸載所有包奏路;
  • pipenv install pytest --dev:在 dev 環(huán)境中安裝 pytest 包畴椰;
  • pipenv lock:確認(rèn) Pipfile 中所有包已安裝,并根據(jù)安裝版本生成 Pipfile.lock鸽粉;
  • pipenv shell:應(yīng)用虛擬環(huán)境斜脂。

自動補(bǔ)全

由于 pipenv 的命令行程序是基于 Click 庫,因此自帶了 Bash 補(bǔ)全功能触机,只需要運(yùn)行或者將這行代碼加入 Bash 啟動腳本:eval "$(_FOO_BAR_COMPLETE=source foo-bar)"帚戳。

對于 Zsh,需要將這行代碼改為 eval "$(_PIPENV_COMPLETE=source-zsh pipenv)"儡首。

最后片任,Pipfilepipenv 仍然是實(shí)驗(yàn)性特性,可能存在不穩(wěn)定性和較大變動蔬胯,注意關(guān)注最新變化对供!。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氛濒,一起剝皮案震驚了整個濱河市产场,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泼橘,老刑警劉巖涝动,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迈勋,死亡現(xiàn)場離奇詭異炬灭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)靡菇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門重归,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厦凤,你說我怎么就攤上這事鼻吮。” “怎么了较鼓?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵椎木,是天一觀的道長违柏。 經(jīng)常有香客問我,道長香椎,這世上最難降的妖魔是什么漱竖? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮畜伐,結(jié)果婚禮上馍惹,老公的妹妹穿的比我還像新娘。我一直安慰自己玛界,他們只是感情好万矾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慎框,像睡著了一般良狈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲤脏,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天们颜,我揣著相機(jī)與錄音,去河邊找鬼猎醇。 笑死窥突,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硫嘶。 我是一名探鬼主播阻问,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沦疾!你這毒婦竟也來了称近?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤哮塞,失蹤者是張志新(化名)和其女友劉穎刨秆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忆畅,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衡未,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了家凯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缓醋。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绊诲,靈堂內(nèi)的尸體忽然破棺而出送粱,到底是詐尸還是另有隱情,我是刑警寧澤掂之,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布抗俄,位于F島的核電站脆丁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏动雹。R本人自食惡果不足惜偎快,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洽胶。 院中可真熱鬧晒夹,春花似錦、人聲如沸姊氓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翔横。三九已至读跷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間禾唁,已是汗流浹背效览。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荡短,地道東北人丐枉。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像掘托,于是被迫代替她去往敵國和親瘦锹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

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