python pip特殊用法之pip install -v -e .命令详解
作者:活成自己的样子啊 发布时间:2022-07-02 09:56:43
前言
之前在使用包括大型文档(商汤科技、百度飞浆)代码的时候都一直使用 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
猜你喜欢
- 自动弹出窗口是一个让人讨厌的事情,为什么我们用它来显示我们的调查表呢?用弹出窗口来显示调查表,被认为是达到我们收集访问用户信息的最方便快捷的
- flask-login 模块简介Flask-Login 是一个 Flask 模块,可以为 Flask 应用程序提供用户登录功能。要在 Fla
- 本文为大家分享了多种方法求质数python实现代码,供大家参考,具体内容如下题目要求是求所有小于n的质数的个数。 求质数方法1: 穷举法:
- 使用 NetBox 可以方便的将 asp 应用编译成为独立运行的执行程序,完全摆脱 iis 的束缚,在几乎所有的 Windows 版本上面直
- python 类的继承对于许多文章讲解python类的继承,大多数都是说一些什么oop,多态等概念,我认为这样可能对有一定基础的开发者帮助不
- 一朋友委托我帮他投票,地址在: http://publish.sina.com.cn/04/13/413/search.php 投票的链接是
- Python之Selenium自动化爬虫0.介绍Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Seleniu
- 一、算法 1、算法的主要思想就是将一个中缀表达式(Infix expression)转换成便
- 用过QQ的人应该都知道软键盘,他可以增强我们密码的安全性,以保证我们的密码资料不被非法监听。现在软键盘也用在了很多的网站上,像早期银行的在线
- 我的电脑环境是使用.net framework4.5.1,如果在调试过程中调不通请注意我用的是Visual studion 2017,pyt
- 如下所示:# x = ['c b a',"e d f"]# y = []# for i in x:# f
- 前言很多时候需要对自己模型进行性能评估,对于一些理论上面的知识我想基本不用说明太多,关于校验模型准确度的指标主要有混淆矩阵、准确率、精确率、
- 一、媒体管道1.1、媒体管道的特性媒体管道实现了以下特性:避免重新下载最近下载的媒体指定存储位置(文件系统目录,Amazon S3 buck
- 目录时间戳相减装饰器timeit模块重复调用 timeit()cProfile性能分析工具时间戳相减在代码执行前后各记录一个时间点,两个时间
- 咱们Python 集中营有一个专题就是分享一些有意思的东西,今天大概看了一下pygame的这个非标准库就想着使用它来做个小游戏-拼图。通过加
- 一、问题描述如题,在使用pip install xxx的方法安装python库,或者是基于python的软件时,报错“E
- 项目地址是:https://www.chenshiyang.com/dytk接下来我们分析下源码简要看下实现原理。实现原理该项目不需要使用模
- MySQL数据库配置技巧用root用户启动远程服务一直是安全大忌,因为如果服务程序出现问题,远程攻击者极有可能获得主机的完全控制权。MySQ
- 使用 Microsoft® SQL Server™ 2000,可以选择在一台计算机上安装 SQL Ser
- 在IDLE下清屏:#网上有些先定义函数,再?print("\n" * 100)输出一百个换行的方法有点扯淡,跟连按回车没