python依赖管理,从轮子到飞机

前两天写了一个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!

眼看盘古又要老腰不保之时,他又灵光一闪:
为啥不弄一个装好所有配置的虚拟环境
每次只要把这个虚拟环境给装稳了,依赖就都稳了!

于是,虚拟环境的项目便诞生了!

深入技术:

现在大家已经知道了,为什么要有依赖管理,以及怎样能做依赖管理了。
下面我严肃的给大家介绍一下,依赖管理的技术:

  1. 使用requirements.txt管理依赖,迁移时轻量但精准性不足
    三种生成requirements.txt方式的综合教程(pip freeze,pipreqs,pip-compile)
    requirements.txt的使用教程
  2. 使用虚拟环境管理依赖,迁移时笨重但准确
    virtualenv、virtualenvwrapper 综合教程
    virtualenv补充教程(含虚拟环境的打包)
    anaconda的教程
  3. requirements.txt和虚拟环境的结合,增强requirements.txt的准确性,保证迁移的轻量
    3.1 手动将 pip freeze + virtualenv 结合
    3.2 使用工具 pipenv 替代手动结合
    3.3 讨论:pipenv是否比requirements.txt+virtualenv更好?
    原文作者:花潇
    原文地址: https://zhuanlan.zhihu.com/p/34393467
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞