網站首頁 編程語言 正文
前言
之前在使用包括大型文檔(商湯科技、百度飛漿)代碼的時候都一直使用 pip install -v -e . ,這一命令,但是一直不是很清楚它到底是”什么“。
- 當修改完代碼文件的一些配置文件之后都要使用它,不然就會報錯!
- 他出現在了商湯科技的使用文檔里面。
在學習商湯科技的mmdetection文檔時遇到:
?(1)安裝mmcv時,它使用了類似的 pip install -e .
(2)安裝mmdet的時候,他又使用了這個命令。
分析
在分析之前,我們要先來說一個知識點:什么是?命名空間軟件包 ?
當我們右鍵一個文件夾時,我們可以找到如下的一個選項:
命名空間軟件包是對相關的包或模塊進行分組的一種方法,通常是一個被忽略的功能,它對于在較大的項目中構建打包生態系統非常有用。
如果你的應用組件的開發、打包和版本化都是獨立的,但仍然希望從同一個命名空間訪問它們,那么命名空間包特別有用,它有利于明確每個包所屬的組織或項目。
為什么要講這個呢,因為在我們下載的代碼里面,有一個文件夾是命名空間軟件包:
關于?命名空間軟件包 的解讀我們先到這里,知道他是為了方便使用者可以自由修改的可以了。
自己也分析了有一段時間了,已經有了理解,也就不和大家賣關子了,直接開始說結論:
首先,這個命令前面的pip install大家應該都熟悉,之后的-v -e .應該分成 -v ,-e , .? 這三個部分來看。
- -v:verbose, or more output.? (輸出更詳細的信息)
- -e:? installing a project in?editable mode.? (以可編輯的模式安裝項目)
- . :? 一個點,代表相對路徑,也就是當前路徑? (代表路徑)
注: 我自己翻譯的,勿噴~~~
首先,我把mmdetection的項目文件夾放到了lalala文件夾下面,cd進入文件夾,執行 pip install -e . 命令:
之后,我來到lalala文件夾路徑下面,執行 pip install -e .\mmdetection-master\?命令:
?他們居然執行了相同的操作!!!(好吧,我只是證明了那個點是個路徑而已~~~)
好了!接下來,我將把 pip install -e . 的全部執行流程截圖:
注:這里我把所有庫都裝完了,所以他只是檢測了一遍,就過去了。
對于大家來說,看到了:
- 他把?requirments.txt?里面的依賴裝了一遍。
- 他把?mmdet?這個庫重新卸載又裝了一遍。<這個是命名空間軟件包>
對于我來說:
- 他把 setup.py 執行了一遍!?(使用命令?python setup.py develop !)
注:至于 setup.py 是如何工作的,這又是一門學問~~~這里就不在詳細展開了【狗頭保命】,以后有時間可能會再寫一篇博客說說。?
對于好多小伙伴來說,都以為 -e . 是把當前文件夾下面的??命名空間軟件包 安裝到第三方庫里面,這是錯誤的,就比如說,我把 setup.py 刪了,他就會報錯:
這里我把?setup.py 刪了:
再運行 pip install -e .
:
如果你還不服氣,覺得,這和??requirments.txt 有關系:(我再把?requirments.txt?刪了)
?注: 這里我不僅把?requirments.txt? 刪了,還把?requirments文件夾 刪了。
如果你還不服氣,你說-e 直接指定mmdet就可以安裝這個命名空間軟件包到包管理器里面(第三方庫):(我改變執行命令為 pip install -e mmdet
)
得了。。沒脾氣了。。?
結論
行了,也差不多可以得出結論了:
- 命名空間軟件包: 這里指 mmdet 這個庫的可修改的體現,就是如果是一個正常的第三方庫的話,他一般只是可讀模式,但是使用命名空間軟件包這個方式,可以實現對第三方庫進行修改。
- 對于 命名空間軟件包 來說,他只當作一個標記,并不是 pip install -e . 的直接執行對象。
- pip install -e .的直接執行對象是當前文件下面的 setup.py 。
- setup.py 內包含了執行命令,也就是 安裝依賴 和將 命名空間軟件 重新安裝到包管理器中。
使用方法總結:
- 你在mmdet包下面修改的配置,其實并沒有直接加載到第三方庫里面,也就是修改完之后并沒有讓環境變成你修改完的樣子。
- mmdetection里面導的mmdet是你anaconda里面的(也就是你的包管理器里面的)mmdet庫,不是你那個 mmdetection-master/mmdet 的文件夾。
第三方庫里面的 mmdet 和 mmdetection-master 對比:
mmdet 第三方庫:
?mmdetection-master 里面的mmdet包:
呦,,還挺相似啊~~~至少大差不差
后記
大家可能不大適應這種動態修改第三方庫的方法,但他設計出來就是為了方便我們修改第三方庫的,不要去拒絕,嘗試著去使用,耐心的去研究這里面的方法,會有不一樣的收獲!
原文鏈接:https://blog.csdn.net/m0_61139217/article/details/125784977
相關推薦
- 2023-07-04 Netty的SO_LINGER不要隨便用
- 2022-10-14 SpringCloud組件之Gateway微服務網關
- 2022-07-02 C++精要分析右值引用與完美轉發的應用_C 語言
- 2023-07-22 SpringBoot操作MongoDB時,對同一個字段設置多次條件
- 2022-12-11 Golang?內存模型The?Go?Memory?Model_Golang
- 2022-07-09 給復雜的數組結構數據換key
- 2023-07-22 Redis使用教程之jedis客戶端sendCommand方法的byte[]入參,防止混淆strin
- 2022-12-09 Python中的main函數與import用法_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支