最全的 pip 使用指南者吁,50% 你可能沒用過

所有的 Python 開發(fā)者都清楚窘俺,Python 之所以如此受歡迎,能夠在眾多高級(jí)語言中复凳,脫穎而出瘤泪,除了語法簡單,上手容易之外染坯,更多還要?dú)w功于 Python 生態(tài)的完備均芽,有數(shù)以萬計(jì)的 Python 愛好者愿意以 Python 為基礎(chǔ)封裝出各種有利于開發(fā)的第三方工具包。

這才使用我們能夠以最快的速度開發(fā)出一個(gè)滿足基本需要的項(xiàng)目单鹿,而不是每次都重復(fù)造輪子掀宋。

Python 從1991年誕生到現(xiàn)在,已經(jīng)過去28個(gè)年頭了仲锄,這其間產(chǎn)生了數(shù)以萬計(jì)的第三方包劲妙,且每個(gè)包都會(huì)不斷更新,會(huì)有越來越多的版本儒喊。

當(dāng)你在一個(gè)復(fù)雜的項(xiàng)目環(huán)境中镣奋,如果沒有一個(gè)有效的依賴包管理方案,項(xiàng)目的維護(hù)將會(huì)是一個(gè)大問題怀愧。

pip 是官方推薦的包管理工具侨颈,在大多數(shù)開發(fā)者眼里余赢,pip 幾乎是 Python 的標(biāo)配。

當(dāng)然也有其他的包管理工具

distutils:僅用于打包和安裝哈垢,嚴(yán)格來講不算是包管理工具

setuptools:?distutils的增強(qiáng)版妻柒,擴(kuò)展了distutils,提供更多的功能耘分,引入包依賴的管理举塔,easy_install就是它的一個(gè)命令行工具,

引入了?egg?的文件格式求泰。

#?從?pypi?上下載安裝?easy_install?pkg?#?從本地的?tgz?文件中安裝?easy_install?pkg.tgz?#?從本地的?egg?

文件中安裝?

easy_install?pkg.egg?

Pipenv:一個(gè)集依賴包管理(pip)及虛擬環(huán)境管理(virtualenv)的工具

還有其他的央渣,這里不一一列出。

今天的主角是 pip 渴频,大家肯定不會(huì)陌生芽丹。但我相信不少人,只是熟悉幾個(gè)常用的用法枉氮,而對(duì)于其他幾個(gè)低頻且實(shí)用的用法志衍,卻知之甚少,這兩天聊替,我查閱官方文檔,把這些用法整理了一下培廓,應(yīng)該是網(wǎng)絡(luò)上比較全的介紹惹悄。

1. 查詢軟件包

查詢當(dāng)前環(huán)境安裝的所有軟件包

1$?pip?list

查詢 pypi 上含有某名字的包

1$?pip?search?pkg

查詢當(dāng)前環(huán)境中可升級(jí)的包

1$?pip?list?--outdated

查詢一個(gè)包的詳細(xì)內(nèi)容

1$?pip?show?pkg

2. 下載軟件包

在不安裝軟件包的情況下下載軟件包到本地

1$?pip?download?--destination-directory?/local/wheels?-r?requirements.txt

下載完,總歸是要安裝的肩钠,可以指定這個(gè)目錄中安裝軟件包泣港,而不從 pypi 上安裝。

1$?pip?install?--no-index?--find-links=/local/wheels?-r?requirements.txt

當(dāng)然你也從你下載的包中价匠,自己構(gòu)建生成 wheel 文件

1$?pip?install?wheel?$?pip?wheel?--wheel-dir=/local/wheels?-r?requirements.txt

3. 安裝軟件包

使用 pip install <pkg> 可以很方便地從 pypi 上搜索下載并安裝 python 包当纱。

如下所示

1$?pip?install?requests

這是安裝包的基本格式,我們也可以為其添加更多參數(shù)來實(shí)現(xiàn)不同的效果踩窖。

3.1 只從本地安裝坡氯,而不從 pypi 安裝

# 前提你得保證你已經(jīng)下載 pkg 包到 /local/wheels 目錄下 $ pip install --no-index --find-links=/local/wheels pkg

3.2 限定版本進(jìn)行軟件包安裝

以下三種,對(duì)單個(gè) python 包的版本進(jìn)行了約束

# 所安裝的包的版本為 2.1.2 $ pip install pkg==2.1.2 ?# 所安裝的包必須大于等于 2.1.2 $ pip install pkg>=2.1.2 ?# 所安裝的包必須小于等于 2.1.2 $ pip install pkg<=2.1.2

以下命令用于管理/控制整個(gè) python 環(huán)境的包版本

# 導(dǎo)出依賴包列表 pip freeze >requirements.txt ?# 從依賴包列表中安裝 pip install -r requirements.txt ?# 確保當(dāng)前環(huán)境軟件包的版本(并不確保安裝) pip install -c constraints.txt

3.3 限制不使用二進(jìn)制包安裝

由于默認(rèn)情況下洋腮,wheel 包的平臺(tái)是運(yùn)行 pip download 命令 的平臺(tái)箫柳,所以可能出現(xiàn)平臺(tái)不適配的情況。

比如在 MacOS 系統(tǒng)下得到的 pymongo-2.8-cp27-none-macosx_10_10_intel.whl 就不能在 linux_x86_64 安裝啥供。

使用下面這條命令下載的是 tar.gz 的包悯恍,可以直接使用 pip install 安裝。

比 wheel 包伙狐,這種包在安裝時(shí)會(huì)進(jìn)行編譯涮毫,所以花費(fèi)的時(shí)間會(huì)長一些瞬欧。

# 下載非二進(jìn)制的包 $ pip download --no-binary=:all: pkg ?#?安裝非二進(jìn)制的包 $ pip install pkg --no-binary

3.4 指定代理服務(wù)器安裝

當(dāng)你身處在一個(gè)內(nèi)網(wǎng)環(huán)境中時(shí),無法直接連接公網(wǎng)罢防。這時(shí)候你使用pip install 安裝包黍判,就會(huì)失敗。

面對(duì)這種情況篙梢,可以有兩種方法:

下載離線包拷貝到內(nèi)網(wǎng)機(jī)器中安裝使用代理服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求

第一種方法顷帖,雖說可行,但有相當(dāng)多的弊端

步驟繁雜渤滞,耗時(shí)耗力無法處理包的依賴問題

這里重點(diǎn)來介紹贬墩,第二種方法:

1$?pip?install?--proxy?[user:passwd@]http_server_ip:port?pkg

每次安裝包就發(fā)輸入長長的參數(shù),未免有些麻煩妄呕,為此你可以將其寫入配置文件中:$HOME/.config/pip/pip.conf

對(duì)于這個(gè)路徑陶舞,說明幾點(diǎn)

1

2

3

4

不同的操作系統(tǒng),路徑各不相同#?Linux/Unix:?/etc/pip.conf?~/.pip/pip.conf?~/.config/pip/pip.conf???

#?Mac?OSX:?~/Library/Application?Support/pip/pip.conf?~/.pip/pip.conf?/Library/Application?Support/pip/pip.conf???

#?Windows:?%APPDATA%\pip\pip.ini?%HOME%\pip\pip.ini?C:\Documents?and?Settings\All?Users\Application?Data\PyPA\pip\

pip.conf?(Windows?XP)?C:\ProgramData\PyPA\pip\pip.conf?(Windows?7及以后)

若在你的機(jī)子上沒有此文件绪励,則自行創(chuàng)建即可

如何配置肿孵,這邊給個(gè)樣例:

1

2

3

[global]?index-url?=?http://mirrors.aliyun.com/pypi/simple/??

#?替換出自己的代理地址,格式為[user:passwd@]proxy.server:port?proxy=http://xxx.xxx.xxx.xxx:8080???[install]?

#?信任阿里云的鏡像源疏魏,否則會(huì)有警告?trusted-host=mirrors.aliyun.com

3.5 安裝用戶私有軟件包

很多人可能還不清楚停做,python 的安裝包是可以用戶隔離的。

如果你擁有管理員權(quán)限大莫,你可以將包安裝在全局環(huán)境中蛉腌。在全局環(huán)境中的這個(gè)包可被該機(jī)器上的所有擁有管理員權(quán)限的用戶使用。

如果一臺(tái)機(jī)器上的使用者不只一樣只厘,自私地將在全局環(huán)境中安裝或者升級(jí)某個(gè)包烙丛,是不負(fù)責(zé)任且危險(xiǎn)的做法。

面對(duì)這種情況羔味,我們就想能否安裝單獨(dú)為我所用的包呢河咽?

慶幸的是,還真有赋元。

我能想到的有兩種方法:

使用虛擬環(huán)境將包安裝在用戶的環(huán)境中

虛擬環(huán)境忘蟹,之前寫過幾篇文章,這里不再展開講们陆。

今天的重點(diǎn)是第二種方法寒瓦,教你如何安裝用戶私有的包?

命令也很簡單坪仇,只要加上 --user 參數(shù)杂腰,pip 就會(huì)將其安裝在當(dāng)前用戶的 ~/.local/lib/python3.x/site-packages 下,而其他用戶的 python 則不會(huì)受影響椅文。

1pip?install?--user?pkg

來舉個(gè)例子

1

2

3

4

5

6

7

8

9

10

#?在全局環(huán)境中未安裝?requests?[root@localhost?~]#?pip?list?|?grep?requests????

[root@localhost?~]#?su?-?wangbm?[root@localhost?~]#???

#?由于用戶環(huán)境繼承自全局環(huán)境喂很,這里也未安裝?[wangbm@localhost?~]#?pip?list?|?grep?requests??[wangbm@localhost?~]

#?pip?install?--user?requests???[wangbm@localhost?~]#?pip?list?|?grep?requests??requests?(2.22.0)?

[wangbm@localhost?~]#???#?從?Location?屬性可發(fā)現(xiàn)?requests?只安裝在當(dāng)前用戶環(huán)境中?[wangbm@ws_compute01?~]

$?pip?show?requests?---?Metadata-Version:?2.1?Name:?requests?Version:?2.22.0?Summary:?Python?HTTP?for?Humans.?

Home-page:?http://python-requests.org?Author:?Kenneth?Reitz?Author-email:?me@kennethreitz.org?Installer:?pip?

License:?Apache?2.0?Location:?/home/wangbm/.local/lib/python2.7/site-packages?[wangbm@localhost?~]$?exit?logout??

#?退出?wangbm?用戶惜颇,在?root?用戶環(huán)境中發(fā)現(xiàn)?requests?未安裝?[root@localhost?~]$?pip?list?|?grep?requests?

root@localhost?~]$

當(dāng)你身處個(gè)人用戶環(huán)境中,python 導(dǎo)包時(shí)會(huì)先檢索當(dāng)前用戶環(huán)境中是否已安裝這個(gè)包少辣,已安裝則優(yōu)先使用凌摄,未安裝則使用全局環(huán)境中的包。

驗(yàn)證如下:

>>>?import?sys?

>>>?from?pprint?import?pprint??

>>>?pprint(sys.path)?['',??'/usr/lib64/python27.zip',??'/usr/lib64/python2.7',??'/usr/lib64/python2.7/plat-linux2',?

?'/usr/lib64/python2.7/lib-tk',??'/usr/lib64/python2.7/lib-old',??'/usr/lib64/python2.7/lib-dynload',??

?'/home/wangbm/.local/lib/python2.7/site-packages',??'/usr/lib64/python2.7/site-packages',??

?'/usr/lib64/python2.7/site-packages/gtk-2.0',??'/usr/lib/python2.7/site-packages',??

?'/usr/lib/python2.7/site-packages/pip-18.1-py2.7.egg',??'/usr/lib/python2.7/site-packages/lockfile-0.12.2-py2.7.egg']

??>>>

4. 卸載軟件包

就一條命令漓帅,不再贅述

$ pip uninstall pkg

5. 升級(jí)軟件包

想要對(duì)現(xiàn)有的 python 進(jìn)行升級(jí)锨亏,其本質(zhì)上也是先從 pypi 上下載最新版本的包,再對(duì)其進(jìn)行安裝忙干。所以升級(jí)也是使用 pip install器予,只不過要加一個(gè)參數(shù) --upgrade。

$ pip install --upgrade pkg

在升級(jí)的時(shí)候捐迫,其實(shí)還有一個(gè)不怎么用到的選項(xiàng) --upgrade-strategy乾翔,它是用來指定升級(jí)策略。

本文轉(zhuǎn)自:https://www.py.cn/toutiao/13982.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末施戴,一起剝皮案震驚了整個(gè)濱河市反浓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赞哗,老刑警劉巖雷则,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異懈玻,居然都是意外死亡巧婶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門涂乌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人英岭,你說我怎么就攤上這事湾盒。” “怎么了诅妹?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵罚勾,是天一觀的道長。 經(jīng)常有香客問我吭狡,道長尖殃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任划煮,我火速辦了婚禮送丰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弛秋。我一直安慰自己器躏,他們只是感情好俐载,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著登失,像睡著了一般遏佣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揽浙,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天状婶,我揣著相機(jī)與錄音,去河邊找鬼馅巷。 笑死膛虫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的令杈。 我是一名探鬼主播走敌,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼逗噩!你這毒婦竟也來了掉丽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤异雁,失蹤者是張志新(化名)和其女友劉穎捶障,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纲刀,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡项炼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了示绊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锭部。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖面褐,靈堂內(nèi)的尸體忽然破棺而出拌禾,到底是詐尸還是另有隱情,我是刑警寧澤展哭,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布湃窍,位于F島的核電站,受9級(jí)特大地震影響匪傍,放射性物質(zhì)發(fā)生泄漏您市。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一役衡、第九天 我趴在偏房一處隱蔽的房頂上張望茵休。 院中可真熱鬧,春花似錦、人聲如沸泽篮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帽撑。三九已至泼各,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亏拉,已是汗流浹背扣蜻。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留及塘,地道東北人莽使。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像笙僚,于是被迫代替她去往敵國和親芳肌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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