首页 > 编程语言 >python扩展包依赖管理

python扩展包依赖管理

时间:2022-12-14 10:15:22浏览次数:53  
标签:依赖 log python required 扩展 installed test pip pipdeptree

日常开发中我们会用pip list查看安装了哪些包,直接以列表的形式展示给你,但是你知道某个包依赖于其它哪些包吗?或者你想删除一个包,它对应的依赖包会被同步删除吗?如果你有这些需求,可以继续往下看。

明确项目依赖(pipdeptree

pip listpip freeze 打印出来的依赖有一个问题,就是并没有明确依赖关系。这样的坏处是,当我们想清理依赖的时候,就不知道到底哪些依赖是能被直接删除的、哪些依赖又是被间接依赖而不能轻易删除的。

例如我们可能在项目中用了 Flask ,但是我们可能不知道 Flask 也引用了 Jinja2 。这是我们如果擅自删除了 Jinja2 ,项目就可能跑不起来。。。

这时就可以使用 pipdeptree 工具来管理依赖树:

安装pipdeptree

pip install pipdeptree

查看依赖树

$ pipdeptree
djangorestframework==3.13.1
  - django [required: >=2.2, installed: 4.0.6]
    - asgiref [required: >=3.4.1,<4, installed: 3.5.2]
    - backports.zoneinfo [required: Any, installed: 0.2.1]
    - sqlparse [required: >=0.2.2, installed: 0.4.2]
    - tzdata [required: Any, installed: 2022.1]
  - pytz [required: Any, installed: 2022.1]
Flask==2.1.3
  - click [required: >=8.0, installed: 8.1.3]
    - colorama [required: Any, installed: 0.4.5]
  - importlib-metadata [required: >=3.6.0, installed: 4.12.0]
    - zipp [required: >=0.5, installed: 3.8.1]
  - itsdangerous [required: >=2.0, installed: 2.1.2]
  - Jinja2 [required: >=3.0, installed: 3.1.2]
    - MarkupSafe [required: >=2.0, installed: 2.1.1]
  - Werkzeug [required: >=2.0, installed: 2.2.1]
    - MarkupSafe [required: >=2.1.1, installed: 2.1.1]
fluent-logger==0.10.0
  - msgpack [required: >1.0, installed: 1.0.4]
mysqlclient==2.1.1
pipdeptree==2.2.1
  - pip [required: >=6.0.0, installed: 21.1.2]
requests==2.28.1
  - certifi [required: >=2017.4.17, installed: 2022.6.15]
  - charset-normalizer [required: >=2,<3, installed: 2.1.0]
  - idna [required: >=2.5,<4, installed: 3.3]
  - urllib3 [required: >=1.21.1,<1.27, installed: 1.26.11]
setuptools==57.0.0
wheel==0.36.2

这样我们就知道了,原来 Jinja2 是被 Flask 依赖的,这样我们就不会随便删除了。

项目依赖治理(pip-autoremove

那么问题来了,如果我忽然不想依赖 Flask 了,我们需要怎么做呢?

无脑的做法是 pip uninstall flask -y 。不那么显然的是,这其实不够优雅:

$ pip uninstall flask -y
...
$ pipdeptree
certifi==2020.6.20
click==7.1.2
itsdangerous==1.1.0
Jinja2==2.11.3
  - MarkupSafe [required: >=0.23, installed: 1.1.1]
pipdeptree==2.0.0
  - pip [required: >=6.0.0, installed: 19.3.1]
setuptools==44.0.0.post20200106
Werkzeug==1.0.1
wheel==0.36.2

发现没,Flask 虽然被卸载了,但是他的依赖包并没有卸载干净。你可能需要重新一个一个判断你是否需要剩下的包,然后再递归删除。

幸运的是,我们就可以用 pip-autoremove 工具来做这件事。我们重新安装Flask,再用这个工具删除试试:

$ pip install flask
$ pip install pip-autoremove
$ pip-autoremove flask -y
$ pipdeptree
certifi==2020.6.20
pip-autoremove==0.9.1
pipdeptree==2.0.0
  - pip [required: >=6.0.0, installed: 19.3.1]
setuptools==44.0.0.post20200106
wheel==0.36.2

这下干净了

标签:依赖,log,python,required,扩展,installed,test,pip,pipdeptree
From: https://www.cnblogs.com/amgulen/p/16981328.html

相关文章

  • python能干什么?
    学完Python之后,可以从事以下工作岗位:1、web开发:Python拥有非常完善的与web服务器进行交互的库,以及大量免费前端网页模板,有非常优秀而且成熟的diangoWEB框架,功能齐全。2、Lin......
  • Python爬虫采集搞笑段子示例
    对于爬虫的用处不同的人有不同的看法,对于我而言,他是一门技能也是一门艺术,只有掌握其中的原理,才能让你体会到真正的快乐。下文就是我用python爬虫爬取搞笑段子的实例可以一起......
  • python怎么样?
    想学的话,当然是可以学习的。python是一门语法优美的编程语言,不仅可以作为小工具使用提升我们日常工作效率,也可以单独作为一项高新就业技能!python可以做的事情:软件开发:用pyth......
  • python的特点
    Python是一个高层次的结合解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可读性,和其他语言经常使用英文关键词,要比其他语言更加具有特色语法结构。Py......
  • Python中json.dump()和json.dumps()的区别
    一、图解json.dumps(dict,indent):将Python对象转换成json字符串 json.dump(dict,file_pointer):将Python对象写入json文件  二、json.dumps()用法1、用法json.d......
  • 用 python 的snap7库 连接西门子 200 smart
    先推荐一篇知乎上的文章,讲的非常详细.  使用Snap7读写西门子S7系列PLC但,可能存在版本不同的问题,很多地方不能正常运行.下面贴出的是测试代码:环境python3.8.4(sn......
  • 云函数添加外部依赖
    以华为云函数为例,使用python添加依赖需要先知道项目的层级结构Python项目结构:|---Project|---index.py比如该项目需要用到requests依赖,但云函数默认环境......
  • Python学习笔记:行列转换小例子
    一、需求需将“宽数据”转换为“长数据”。二、实践1.构建测试集importpandasaspdimportnumpyasnp#创建测试集df=pd.DataFrame({'Year':[2017,2018......
  • Python编程写的圣诞树|一共六款|快拿去送给心爱的人吧
    先上图:上代码:定义背景t=turtle.Turtle()#定义速度#t.speed("fastest")#定义背景颜色screensize(bg='black')t.left(90)t.forward(3*n)#定义最上端星星......
  • python安装与配置
    1、官网下载:https://www.python.org/downloads/windows/  下载的exe包直接双击安装即可安装完毕后命令行直接可以运行python  2、python包安装python有大量的......