分享

Python包管理工具

 wenxuefeng360 2022-07-02 发布于四川

图片

图片

1、概述

在学习Python的过程中,安装第三方类库是非常常见的操作,这也是Python得以盛行的重要原因之一。在这个过程中,也许大家会遇到过类似 distutils、setuptools、distribute、pip等词汇,也困惑eggs、wheel究竟是什么?

今天就让我们一起来捋一捋它们的关系。

2、Python包安装过程

当我们执行 pip install requests 命令时,究竟经历了哪些交互呢?

  1. 检查待安装模块是否已经安装,如果没有则进入步骤2。
  2. 查看本地缓存文件是否已经下载Python模块安装文件,如果没有,则尝试连接PyPI并下载最新版本模块(如果没有指定版本号,指定版本号则下载相应版本模块),否则跳过下载过程。
  3. 安装本模块之前,查看该模块的依赖模块,如果依赖关系不为空,则递归进入步骤1。
  4. 直到依赖模块全部安装成功后,进入本模块的升级流程。
  5. 模块升级过程中,主要把原代码解压到 site-packages 目录下。

部分模块在安装过程中有其他操作暂不在本节讨论。

PyPI(Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI。

3、包管理工具路线图

在Python包安装过程中,我们得以通过一个pip命令就完成如此复杂的操作,得益于包管理工具。

包管理工具是为了管理,安装和发布Python包而开发的,这些包管理工具的作用就是安装,管理和发布Python包,以及Python的一些项目。

那么Python包管理工具在Python发展的历程中,都经历了哪些呢?

图片

3.1 distutils

distutils 于2000年发布,当时作为Python标准库的一部分,进行Python模块的安装与发布。

3.2 setuptools

setuptools 于2004年发布,为增强 distutils (主要体现在对依赖的处理)而开发的集合或项目,包含了 easy_install 工具。

通过 setuptools 可以自动下载、构建、安装和管理Python模块。

3.3 distribute

distribute 是 setuptools 的一个分支版本。分支的原因可能是有一部分开发者认为 setuptools 开发太慢了。但现在,distribute 又合并回了 setuptools 中。

3.4 distutils2

distutils2 被设计为 distutils 的替代品。从2009年开发到2012年。它包含更多的功能,并希望以packaging 作为名称进入 python 3.3 成为标准库的一部分。但这个计划 后来停滞了 。

3.5 distlib

distlib 是 distutils2 的部分,它为 distutils2/packaging 提供的低级功能增加高级 API,使其便于使用。

3.6 eggs

eggs格式是setuptools引入的Python软件安装包的一种,使用egg扩展名(本质是一个zip包)。setuptools(easy_install)可以解析eggs并进行安装。

Eggs are to Pythons as Jars are to Java.

3.7 pip

pip是目前python包管理的标准,于2008年发布。它被用作 easy_install 的替代品。pip希望不再支持eggs(但仍在支持),而更希望采用“源码发行版”。

3.8 wheel

wheel是Python软件安装包格式的一种,使用whl扩展名(本质是一个zip包),也是目前Python官方推荐的Python项目发布格式。相比eggs,wheel有以下优势:

  1. 不包含pyc文件(预编译的pyc会经常出现奇怪的问题)
  2. 官方支持,pip命令可以直接安装wheel
  3. 单文件安装,无需本地再次编译文件,直接安装
  4. 依赖处理,自动安装依赖的类库。
  5. 二进制发布格式(可以把so/dll/dylib等一并打包)

4、小结

充分了解了包管理工具,才能让我们有的放矢,把工具用得更好。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多