<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 5503字,需瀏覽 12分鐘

           ·

          2021-08-11 02:30

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

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

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

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

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

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

          ?distutils:僅用于打包和安裝,嚴(yán)格來講不算是包管理工具?setuptools:distutils的增強(qiáng)版,擴(kuò)展了distutils,提供更多的功能,引入包依賴的管理,easy_install就是它的一個命令行工具,引入了 egg 的文件格式。?Pipenv:一個集依賴包管理(pip)及虛擬環(huán)境管理(virtualenv)的工具?還有其他的,這里不一一列出。

          今天的主角是 pip ,大家肯定不會陌生。但我相信不少人,只是熟悉其中幾個常用的用法,而對于其他幾個低頻且實用的用法,卻知之甚少,這兩天,我查閱官方文檔,把這些用法整理了一下,應(yīng)該是網(wǎng)絡(luò)上比較全的介紹。

          1. 查詢軟件包

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

          $ pip list

          查詢 pypi 上含有某名字的包

          $ pip search pkg

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

          $ pip list --outdated

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

          $ pip show pkg

          2. 下載軟件包

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

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

          下載完,總歸是要安裝的,可以指定這個目錄中安裝軟件包,而不從 pypi 上安裝。

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

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

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

          3. 安裝軟件包

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

          如下所示

          $ pip install requests

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

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

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

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

          以下三種,對單個 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

          以下命令用于管理/控制整個 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 包的平臺是運行 pip download 命令 的平臺,所以可能出現(xiàn)平臺不適配的情況。

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

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

          比 wheel 包,這種包在安裝時會進(jìn)行編譯,所以花費的時間會長一些。

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

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

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

          面對這種情況,可以有兩種方法:

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

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

          ?步驟繁雜,耗時耗力?無法處理包的依賴問題

          這里重點來介紹,第二種方法:

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

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

          對于這個路徑,說明幾點

          ?不同的操作系統(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.iniC:\Documents and Settings\All Users\Application Data\PyPA\pip\pip.conf (Windows XP)C:\ProgramData\PyPA\pip\pip.conf (Windows 7及以后)

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

          如何配置,這邊給個樣例:

          [global]index-url = http://mirrors.aliyun.com/pypi/simple/ 
          # 替換出自己的代理地址,格式為[user:passwd@]proxy.server:portproxy=http://xxx.xxx.xxx.xxx:8080
          [install]# 信任阿里云的鏡像源,否則會有警告trusted-host=mirrors.aliyun.com

          3.5 安裝用戶私有軟件包

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

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

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

          面對這種情況,我們就想能否安裝單獨為我所用的包呢?

          慶幸的是,還真有。

          我能想到的有兩種方法:

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

          虛擬環(huán)境,之前寫過一篇文章,你可以點擊下面閱讀:

          開發(fā)工具|給你的項目買份保險:Python虛擬環(huán)境

          今天的重點是第二種方法,教你如何安裝用戶私有的包?

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

          pip install --user pkg

          來舉個例子

          # 在全局環(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.1Name: requestsVersion: 2.22.0Summary: Python HTTP for Humans.Home-page: http://python-requests.orgAuthor: Kenneth ReitzAuthor-email: me@kennethreitz.orgInstaller: pipLicense: Apache 2.0Location: /home/wangbm/.local/lib/python2.7/site-packages[wangbm@localhost ~]$ exitlogout
          # 退出 wangbm 用戶,在 root 用戶環(huán)境中發(fā)現(xiàn) requests 未安裝[root@localhost ~]$ pip list | grep requests[root@localhost ~]$

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

          驗證如下,你可以發(fā)現(xiàn) /home/wangbm/ 的優(yōu)先于 /usr/lib/python2.7/。

          >>> 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. 升級軟件包

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

          $ pip install --upgrade pkg

          在升級的時候,其實還有一個不怎么用到的選項 --upgrade-strategy,它是用來指定升級策略。

          它的可選項只有兩個:

          ?eager :升級全部依賴包?only-if-need:只有當(dāng)舊版本不能適配新的父依賴包時,才會升級。

          在 pip 10.0 版本之后,這個選項的默認(rèn)值是 only-if-need,因此如下兩種寫法是一互致的。

          pip install --upgrade pkg1 pip install --upgrade pkg1 --upgrade-strategy only-if-need

          PS公號內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點一下,如果感覺文章內(nèi)容不錯的話,記得分享朋友圈讓更多的人知道!

          神秘禮包獲取方式

          識別文末二維碼,回復(fù):1024

          瀏覽 27
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  97超碰人人模人人人爽人人爱 | 深爱丁香网 | 亚洲AV无码成人精品区久 | 精品久久久久爆乳 | 国产swag |