前两天写了一个anaconda的教程,评论里有人问小可爱:“python依赖管理哪家强?”
三言两语说不清,所以特地在这里写文,带大家寻找python依赖管理中的山东蓝翔。
我会先用故事给大家理一理依赖管理的起源,
对此比较清晰的盆友,可以直接去文末看技术优劣分析~
先讲一个故事:
话说这盘古开天辟地之时,还没有依赖管理一说。
盘古说,要啥子依赖关系,我需要啥依赖我就装啥呗。
有天盘古写了一个爬’你们懂的网站’的爬虫,
赶紧献给他女神A去邀宠,
女神A一听这个爬虫如此神奇,喜上眉梢,赶紧让盘古把爬虫给她玩玩
当盘古把爬虫copy到女神A的电脑上后,
哦阔,一堆的“no module”,
盘古赶紧给女神A一个一个的装module…
当盘古终于给女神A装完了所有module,
等待他的,是给女神B,C…装module,
就在盘古装的老腰临近崩溃指示,他灵光一闪,
为啥不弄一个requirements.txt,来保存项目需要的modules?
然后只要再写一个脚本照着txt自动安装module!
于是,requirements.txt的项目便诞生了!
让盘古在女神们面前装了好大一个逼,
直到盘古又写了一个‘你们都假装不懂的网站’的爬虫,
在用同样的套路帮女神们安装时,
有一个依赖特别不好装!十个安装里九个都会报bug!需要手动debug!
眼看盘古又要老腰不保之时,他又灵光一闪:
为啥不弄一个装好所有配置的虚拟环境?
每次只要把这个虚拟环境给装稳了,依赖就都稳了!
于是,虚拟环境的项目便诞生了!
深入技术:
现在大家已经知道了,为什么要有依赖管理,以及怎样能做依赖管理了。
下面我严肃的给大家介绍一下,依赖管理的技术:
- 使用requirements.txt管理依赖,迁移时轻量但精准性不足
三种生成requirements.txt方式的综合教程(pip freeze,pipreqs,pip-compile)
requirements.txt的使用教程 - 使用虚拟环境管理依赖,迁移时笨重但准确
virtualenv、virtualenvwrapper 综合教程
virtualenv补充教程(含虚拟环境的打包)
anaconda的教程 - requirements.txt和虚拟环境的结合,增强requirements.txt的准确性,保证迁移的轻量
3.1 手动将 pip freeze + virtualenv 结合
3.2 使用工具 pipenv 替代手动结合
3.3 讨论:pipenv是否比requirements.txt+virtualenv更好?