|
|
51CTO旗下网站
|
|
移动端

1.8.1 为什么要隔离

《Python高级编程(第2版)》第1章Python现状,本章将会向读者介绍一下Python 3的当前现状,同时介绍Python的现代开发方法。本节为大家介绍为什么要隔离。

作者:张亮/阿信 译来源:人民邮电出版社|2018-01-29 17:54

1.8.1 为什么要隔离

pip可用于安装系统级的Python包。在基于Unix的系统和Linux系统上,这么做需要超级用户权限,所以实际的调用如下所示:

  1. sudo pip install <package-name> 

注意,在Windows上并不需要这样做,因为没有默认安装Python解释器,Windows上的Python通常由用户手动安装,无需超级用户权限。

无论如何,不推荐直接从PyPI安装系统级的Python包,也应尽量避免这一做法。前面说PyPA推荐使用pip,这似乎与前面的说法相矛盾,但其中是有很重要的原因。如前所述,通过操作系统软件包仓库,Python往往是许多软件包的重要组成部分,也可以提供许多重要服务。系统发行版的维护者投入大量精力选择合适的软件包版本,以匹配各种包依赖。通常来说,系统软件包仓库中的Python包都包含自定义补丁,或者使用较旧的版本,只是为了保证与其他系统组件的兼容。利用pip将这些Python包强制更新至某一版本,打破了向后兼容,也可能会破坏某些关键的系统服务。

即使在本地计算机上,为了方便开发而做这些事情也不是一个好的理由。那样胡乱使用pip几乎总会引起麻烦,最终导致难以调试的问题。并不是说要严格禁止从PyPI全局安装Python包,但这么做时一定要清楚地认识到相关风险。

幸运的是,这个问题有一个简单的解决方案,就是环境隔离。在不同的系统抽象层中对Python运行环境进行隔离的工具有很多种。其主要作用是,将项目依赖与其他项目和/或系统服务需要的包进行隔离。这种方法的好处在于以下几个方面。

解决了这样的难题:“X项目依赖于1.x版,但Y项目却需要4.x版”。开发人员可以同时开发多个项目,这些项目的依赖不同,甚至可能相互冲突,但项目之间却不会相互影响。

项目不再受限于系统发行版仓库中包的版本。

不会破坏依赖特定包版本的其他系统服务,因为新版软件包只存在于隔离环境内部。

项目依赖的包列表可以轻松“锁定(frozen)”,复制起来也很容易。

隔离最简单也最轻便的方法就是使用应用层的虚拟环境。它们仅隔离Python解释器和其中可用的Python包。其设置非常简单,通常也足以保证小项目和小软件包开发过程中的隔离。

不幸的是,在某些情况下,这种做法可能不足以保证充分的一致性和可重复性。对于这种情况,系统级隔离是对工作流程很好的补充,本章后面也会介绍一些可用的方案。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

精通Spring 2.0

本书是关于Spring 2.0的权威教程,是Java/Java EE开发者必备的参考书。本书详尽系统地介绍了Java EE的基础知识、Spring 2.0的各种功能,以...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊