Python依赖管理那点事

系统 1505 0

文章目录

      • pip
      • virtualenv
        • 缺点
      • Pipenv
      • 总结

学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使用入门


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论