Python依赖管理那点事

学Python有段时间了,学的时候会想着拿它和Java对比。

  • 在对比的时候,发现 Java 有很成熟的项目构建工具,有使用 xml 的 Maven,也有使用 groovy 的 Gradle,这样的构建工具能够自动处理项目的依赖,很是方便。

  • 对于Python,在依赖管理方面,从一个初学者的角度看,嗯,只能说,贵圈真乱!(本文纯属个人观点,不喜勿喷) 好吧,让我们捋一捋。

    • 在包管理方面,听说现在在役的包管理工具有 distutils、 setuptools、 distribute、 distlib、 pip,真让人眼花缭乱。幸运的是,现在貌似有setuptools和pip就已经足够了。

    • 在项目依赖隔离方面,Python主要使用虚拟环境,而关于虚拟环境的模块,pyenv、 venv、 virtualenv、 virtualenvwrapper,也是叫人看到头皮发麻!

    • 此外,很多 Python库使用了 C/C++语言,即使 Python 只是一个小版本的更新,对应的库也需要完全重新编译一次,也就是说不同小版本的 Python 的依赖也不一定能兼容。

    • 还有就是版本问题(一直认为是个大坑!),很多时候,我们都希望能用一个工具来在两个版本间灵活地切换,并分别管理它们的依赖。

  • 虽然存在众多不足,但可以看到的是,Python依然在往好的方向发展,比如目前的终极解决方案pipenv,其出现让Python的依赖管理逐渐优雅和简单。下面来总结一下我觉得比较有用的依赖管理工具,希望可以让和我一样的初学者在依赖管理方面少走一些弯路。

pip

之前我曾写过关于pip使用的,pip的基本使用。但如果在做项目时,只会使用pip intall来管理包,用久了会发现各个项目的模块杂揉到一起,很是混乱,还可能会导致各种奇怪的错误,因为pip安装好的模块全都在一个全局的模块库中,无法实现项目间的依赖隔离。显然,pip在包管理方面很好用,但在要隔离项目间的依赖,还需要使用别的工具,比如virtualenv

virtualenv

在使用virtualenv处理项目依赖时,我们通常会使用virtualenv创建一个虚拟环境,再创建一个依赖包列表requirements.txt,然后他们可以使用 pip进行安装。这种方法一般都会工作正常,但有时它会表现出一些怪异行为。下面是其使用时的一些缺陷。

缺点

  • 你可能得手动安装或删除某些特定版本的包,并记得定期更新requirements.txt文件,以保持项目环境的一致。特别是当你想要在你的虚拟环境中安装Python包,但它不一定与项目本身相关联的时候。

  • 此外,一些项目有时会保留requirements.txt文件的两个版本——一个用于开发环境,一个用于生产环境,这可能会导致更多的复杂性。

Pipenv

不得不说,在项目包管理方面,Python确实存在不少的坑。直到Pipenv的出现,Python的依赖管理才逐渐变得优雅起来。Pipenv是官方推荐的的python包管理工具,它旨在将所有包管理工具(如bundler, composer, npm, cargo, yarn等)的优点集中应用于python领域。

下面是其主要优势:

  1. 集成了pip,virtualenv两者的功能,且完善了两者的一些缺陷。

  2. 支持Python2 和 Python3,在各个平台的命令都是一样的。

  3. 过去用virtualenv管理requirements.txt文件可能会有问题,Pipenv使用Pipfile和Pipfile.lock,后者存放将包的依赖关系,查看依赖关系是十分方便。

  4. 各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。

  5. 通过加载.env文件简化开发工作流程。

总结

  • 如果需要将库安装到全局系统,我们还是需要使用pip;

  • 管理项目依赖方面,pipenv是目前的终极解决方案;

  • 如果需要维护使用virtualenv的项目,也可以使用pipenv,因为兼容virtualenv,并且virtualenv项目可以方便地迁移到pipenv。

最后, 个人建议,保持简单,拥抱pipenv吧! 关于Pipenv的使用,可以看一下我的另一篇文章, Pipenv使用入门

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 分别是两个情绪 一个是难过 另一个也是难过 分别是两个人 一个是男人 另一个是女人 分别还是两根神经 一个是发神经...
    大魔魔阅读 148评论 2 8
  • “我的爱人,你可听见,家乡的歌声飞得多远;日夜相思苦,风霜不觉寒,总感到你,就在我身边”… 这是国家大剧院历时四年...
    红鸾星说阅读 6,122评论 0 2
  • 当我们的境界还没那么高时,很容易被境转,能专注在一件事情上才会看到明显的效果。所以,我现在的重点是深度放松自己,让...
    许元香阅读 920评论 0 0
  • 跟随诗人谭宁君去到扬雄故里(和@谭宁君老师) 文/培善 中国农家乐的源头 迈过了第几代红门 杨雄故里 掀起你的盖头...
    培善阅读 776评论 8 24