python?pip特殊用法之pip?install?-v?-e?.命令詳解
前言
之前在使用包括大型文檔(商湯科技、百度飛漿)代碼的時(shí)候都一直使用 pip install -v -e . ,這一命令,但是一直不是很清楚它到底是”什么“。
- 當(dāng)修改完代碼文件的一些配置文件之后都要使用它,不然就會(huì)報(bào)錯(cuò)!
- 他出現(xiàn)在了商湯科技的使用文檔里面。
在學(xué)習(xí)商湯科技的mmdetection文檔時(shí)遇到:

(1)安裝mmcv時(shí),它使用了類(lèi)似的 pip install -e .
(2)安裝mmdet的時(shí)候,他又使用了這個(gè)命令。
分析
在分析之前,我們要先來(lái)說(shuō)一個(gè)知識(shí)點(diǎn):什么是 命名空間軟件包 ?
當(dāng)我們右鍵一個(gè)文件夾時(shí),我們可以找到如下的一個(gè)選項(xiàng):

命名空間軟件包是對(duì)相關(guān)的包或模塊進(jìn)行分組的一種方法,通常是一個(gè)被忽略的功能,它對(duì)于在較大的項(xiàng)目中構(gòu)建打包生態(tài)系統(tǒng)非常有用。
如果你的應(yīng)用組件的開(kāi)發(fā)、打包和版本化都是獨(dú)立的,但仍然希望從同一個(gè)命名空間訪問(wèn)它們,那么命名空間包特別有用,它有利于明確每個(gè)包所屬的組織或項(xiàng)目。
為什么要講這個(gè)呢,因?yàn)樵谖覀兿螺d的代碼里面,有一個(gè)文件夾是命名空間軟件包:

關(guān)于 命名空間軟件包 的解讀我們先到這里,知道他是為了方便使用者可以自由修改的可以了。
自己也分析了有一段時(shí)間了,已經(jīng)有了理解,也就不和大家賣(mài)關(guān)子了,直接開(kāi)始說(shuō)結(jié)論:
首先,這個(gè)命令前面的pip install大家應(yīng)該都熟悉,之后的-v -e .應(yīng)該分成 -v ,-e , . 這三個(gè)部分來(lái)看。
- -v:verbose, or more output. (輸出更詳細(xì)的信息)
- -e: installing a project in editable mode. (以可編輯的模式安裝項(xiàng)目)
- . : 一個(gè)點(diǎn),代表相對(duì)路徑,也就是當(dāng)前路徑 (代表路徑)
注: 我自己翻譯的,勿噴~~~
首先,我把mmdetection的項(xiàng)目文件夾放到了lalala文件夾下面,cd進(jìn)入文件夾,執(zhí)行 pip install -e . 命令:

之后,我來(lái)到lalala文件夾路徑下面,執(zhí)行 pip install -e .\mmdetection-master\ 命令:

他們居然執(zhí)行了相同的操作?。。。ê冒?,我只是證明了那個(gè)點(diǎn)是個(gè)路徑而已~~~)
好了!接下來(lái),我將把 pip install -e . 的全部執(zhí)行流程截圖:

注:這里我把所有庫(kù)都裝完了,所以他只是檢測(cè)了一遍,就過(guò)去了。
對(duì)于大家來(lái)說(shuō),看到了:
- 他把 requirments.txt 里面的依賴(lài)裝了一遍。
- 他把 mmdet 這個(gè)庫(kù)重新卸載又裝了一遍。<這個(gè)是命名空間軟件包>
對(duì)于我來(lái)說(shuō):
- 他把 setup.py 執(zhí)行了一遍! (使用命令 python setup.py develop !)
注:至于 setup.py 是如何工作的,這又是一門(mén)學(xué)問(wèn)~~~這里就不在詳細(xì)展開(kāi)了【狗頭保命】,以后有時(shí)間可能會(huì)再寫(xiě)一篇博客說(shuō)說(shuō)。
對(duì)于好多小伙伴來(lái)說(shuō),都以為 -e . 是把當(dāng)前文件夾下面的 命名空間軟件包 安裝到第三方庫(kù)里面,這是錯(cuò)誤的,就比如說(shuō),我把 setup.py 刪了,他就會(huì)報(bào)錯(cuò):
這里我把 setup.py 刪了:

再運(yùn)行 pip install -e . :

如果你還不服氣,覺(jué)得,這和 requirments.txt 有關(guān)系:(我再把 requirments.txt 刪了)

注: 這里我不僅把 requirments.txt 刪了,還把 requirments文件夾 刪了。
如果你還不服氣,你說(shuō)-e 直接指定mmdet就可以安裝這個(gè)命名空間軟件包到包管理器里面(第三方庫(kù)):(我改變執(zhí)行命令為 pip install -e mmdet)

得了。。沒(méi)脾氣了。。
結(jié)論
行了,也差不多可以得出結(jié)論了:
- 命名空間軟件包: 這里指 mmdet 這個(gè)庫(kù)的可修改的體現(xiàn),就是如果是一個(gè)正常的第三方庫(kù)的話,他一般只是可讀模式,但是使用命名空間軟件包這個(gè)方式,可以實(shí)現(xiàn)對(duì)第三方庫(kù)進(jìn)行修改。
- 對(duì)于 命名空間軟件包 來(lái)說(shuō),他只當(dāng)作一個(gè)標(biāo)記,并不是 pip install -e . 的直接執(zhí)行對(duì)象。
- pip install -e .的直接執(zhí)行對(duì)象是當(dāng)前文件下面的 setup.py 。
- setup.py 內(nèi)包含了執(zhí)行命令,也就是 安裝依賴(lài) 和將 命名空間軟件 重新安裝到包管理器中。
使用方法總結(jié):
- 你在mmdet包下面修改的配置,其實(shí)并沒(méi)有直接加載到第三方庫(kù)里面,也就是修改完之后并沒(méi)有讓環(huán)境變成你修改完的樣子。
- mmdetection里面導(dǎo)的mmdet是你anaconda里面的(也就是你的包管理器里面的)mmdet庫(kù),不是你那個(gè) mmdetection-master/mmdet 的文件夾。
第三方庫(kù)里面的 mmdet 和 mmdetection-master 對(duì)比:
mmdet 第三方庫(kù):



mmdetection-master 里面的mmdet包:

呦,,還挺相似啊~~~至少大差不差
后記
大家可能不大適應(yīng)這種動(dòng)態(tài)修改第三方庫(kù)的方法,但他設(shè)計(jì)出來(lái)就是為了方便我們修改第三方庫(kù)的,不要去拒絕,嘗試著去使用,耐心的去研究這里面的方法,會(huì)有不一樣的收獲!
到此這篇關(guān)于python pip特殊用法之pip install -v -e .命令詳解的文章就介紹到這了,更多相關(guān)pip install -v -e .命令詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用python實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了用python實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
python使用百度或高德地圖獲取地理位置并轉(zhuǎn)換
用python處理地理位置是非常常見(jiàn)的需求,下面這篇文章主要給大家介紹了關(guān)于python使用百度或高德地圖獲取地理位置并轉(zhuǎn)換的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
Python Logging 日志記錄入門(mén)學(xué)習(xí)
這篇文章主要介紹了Python Logging 日志記錄入門(mén)學(xué)習(xí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
Python爬取Coursera課程資源的詳細(xì)過(guò)程
這篇文章主要介紹了Python爬取Coursera課程資源的詳細(xì)過(guò)程,需要的朋友可以參考下2014-11-11
Python趣味挑戰(zhàn)之用pygame實(shí)現(xiàn)簡(jiǎn)單的金幣旋轉(zhuǎn)效果
今天教大家怎么用pygame實(shí)現(xiàn)簡(jiǎn)單的金幣旋轉(zhuǎn)效果,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Python 把兩層列表展開(kāi)平鋪成一層(5種實(shí)現(xiàn)方式)
這篇文章主要介紹了Python 把兩層列表展開(kāi)平鋪成一層(5種實(shí)現(xiàn)方式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04

