Python包和环境管理
发展历史
Python 包管理工具是 Python 生态系统中的一个重要组成部分,它们为 Python 开发者提供了方便、快捷的包管理方式。以下是 Python 包管理工具的发展历史概述:
- 1991 年:Python 语言首次发布,Python 包管理工具还未出现。
- 1998 年:Python Distutils 工具发布,它是 Python 的第一个包管理工具,可以用于打包、安装和分发 Python 包。
- 2004 年:easy_install 工具发布,它是一种用于安装、升级和卸载 Python 包的工具,可以自动解析依赖关系并安装所需的其他包。
- 2007 年:pip 工具发布,它是 easy_install 的一个替代品,提供了更好的依赖项解析、升级和卸载功能,以及更好的用户体验。
- 2012 年:Python 软件基金会宣布,pip 将成为 Python 包管理生态系统中的标准工具,取代 easy_install。
- 2013 年:Wheel 格式发布,它是一种用于打包和分发 Python 包的格式,可以包含 C 扩展模块,并且支持多平台安装。
- 2018 年:PEP 517 和 518 发布,它们提供了一种新的 Python 包构建和分发标准,可以使包构建和分发变得更加简单和可靠。
- 2018 年:flit 工具发布,它是一种简单的 Python 包构建和分发工具,可以通过 pyproject.toml 文件来配置包的元数据和依赖项。
- 2019 年:poetry 工具发布,它是一种专注于依赖管理和项目构建的 Python 包管理工具,可以自动解析依赖关系、构建项目、生成 lock 文件等。
- 2020 年:PEP 621 发布,它是一种新的 Python 包元数据标准,可以用于定义 Python 包的元数据信息,如名称、版本、作者、许可证等。
- 2020 年:PEP 636 发布,它是一种新的 CPython 扩展模块元数据标准,可以用于定义 CPython 扩展模块的元数据信息,如名称、版本、作者、许可证等。
- 2021 年:flit 3 发布,它增加了对 PEP 621 和 PEP 636 的支持,可以使用 pyproject.toml 文件来定义 Python 包和 CPython 扩展模块的元数据信息。
PyPA 是 Python Packaging Authority 的缩写,即 Python 包管理权威组织。PyPA 的目标是为 Python 社区提供一个标准的、易于使用的包管理工具和相关工具的生态系统,并提供相关的文档和规范。
PyPA 组织成立于 2013 年,由一些 Python 包管理工具的核心开发者组成。目前,PyPA 组织维护了一些 Python 包管理工具和相关工具的项目,包括:
pip
: Python 包管理工具,用于安装和管理 Python 包。setuptools
: Python 包构建和分发工具,用于打包和分发 Python 包。wheel
: Python 包二进制分发格式,用于加快 Python 包的安装速度。twine
: Python 包上传工具,用于将 Python 包上传到 PyPI 或其他包仓库。virtualenv
: Python 虚拟环境工具,用于创建和管理 Python 虚拟环境。
此外,PyPA 还制定了一些包管理的标准和规范,如:
PEP 517
和PEP 518
: 定义了 Python 包的构建规范和构建工具的接口规范。PEP 440
: 定义了 Python 包版本号的语义化规范。PEP 503
: 定义了 Python 包仓库的 URL 命名规范。PEP 621
: 定义了 Python 包元数据的标准格式。
PyPA 的工作对 Python 社区的包管理生态系统产生了重要的影响,使得 Python 包的构建、分发、安装和管理更加统一和规范。在使用 Python 包时,可以参考 PyPA 的相关工具和规范,以便更好地管理和使用 Python 包。
Distutils 发展历史
Distutils 是 Python 生态系统中的第一个包管理工具,它为 Python 开发者提供了一种方便、快捷的包管理方式。以下是 Distutils 的发展历史概述:
- 1998 年:Python 1.5.2 版本发布,它成为第一个具备模块打包功能的 Python 版本,但打包功能还比较简单。
- 1999 年:Distutils 工具发布,它是 Python 1.6 版本中的一个标准库,可以用于打包、安装和分发 Python 包。
- 2000 年:Distutils 0.9.1 版本发布,它增加了对 Windows 平台的支持,以及对 Python 2.0 版本的支持。
- 2002 年:Distutils 1.0 版本发布,它增加了对 Python 2.2 版本的支持,以及一些新特性和改进,如支持 C 扩展模块、支持自定义命令、支持打包多个模块等。
- 2007 年:setuptools 工具发布,它是 Distutils 的一个扩展,提供了更好的依赖项解析、升级和卸载功能,以及更好的插件机制和扩展性。
- 2013 年:Distutils 项目停止维护,它的代码被合并到 Python 标准库中,成为 Python 打包和分发的标准工具。
总的来说,Distutils 是 Python 生态系统中第一个包管理工具,它为 Python 包的构建、打包、安装和分发提供了很多方便和支持。在其发展历史中,Distutils 不断更新迭代,增加了许多新特性和功能,以适应 Python 生态系统的变化和需求。尽管现在 Distutils 不再主动维护,但它的代码被集成到 Python 标准库中,仍然为 Python 包管理提供基础支持。
easy_install 发展历史
easy_install 是 Python 包管理工具之一,它的发展历史可以追溯到 2004 年,以下是 easy_install 的发展历史概述:
- 2004 年:easy_install 首次发布,它是一种用于安装、升级和卸载 Python 包的工具,可以自动解析依赖关系并安装所需的其他包。
- 2005 年:easy_install 被纳入到 setuptools 中,成为 setuptools 的一部分。此时,easy_install 已经成为 Python 包管理生态系统中的一个核心工具。
- 2007 年:easy_install 0.6b1 发布,它引入了一些新的功能和改进,如对源码分发的支持、对 egg 格式的支持等。
- 2008 年:pip 工具发布,它是 easy_install 的一个替代品,提供了更好的依赖项解析、升级和卸载功能,以及更好的用户体验。
- 2012 年:Python 软件基金会宣布,pip 将成为 Python 包管理生态系统中的标准工具,取代 easy_install。
总的来说,easy_install 是 Python 包管理生态系统中的一个重要工具,它为 Python 开发者提供了一种简单、方便的包管理方式。尽管 easy_install 的功能和性能在某些方面已经被 pip 和其他工具取代,但它仍然是 Python 包管理历史上的一个重要里程碑,对 Python 包管理工具的发展产生了积极的影响。
Setuptools 发展历史
setuptools 是由 Phillip J. Eby 开发的,它是 Python 的一个包管理工具,用于构建、分发和安装 Python 包。
Phillip J. Eby 是一位知名的 Python 社区成员和开源软件贡献者,他也是 Python Packaging Authority 的成员之一。在 2004 年,他开始开发 setuptools,这个项目的目标是为 Python 开发者提供一个更好、更方便的包管理工具,以替代原有的 distutils 工具。
setuptools 和 distutils 的主要区别在于 setuptools 提供了一些额外的功能,如自动发现依赖关系、支持命令扩展、支持 egg 包等。这些功能使得 Python 包的构建、分发和安装变得更加灵活和高效。
setuptools 从一开始就受到了 Python 社区的欢迎和支持,它的代码托管在 GitHub 上,并逐渐发展成为 Python 生态系统中使用最广泛的包管理工具之一。setuptools 也是许多其他 Python 工具和框架的基础,如 Flask、Django、numpy 等。
以下是 Setuptools 的发展历史概述:
- 1994 年:Python 1.0 版本中没有
setup.py
,安装 Python 包需要手动复制文件。随着 Python 的发展,用户需要更方便的方法来安装和管理包,因此开始出现了一些简单的自动化安装工具。 - 2000 年:Distutils 是 Python1.6 官方的包管理工具,它提供了一组用于打包、构建和分发 Python 包的工具和命令。其中,
setup.py
是 Distutils 的核心组件,用于定义和配置包的元数据、依赖项和入口点等信息。 - 2004 年:Setuptools 首次发布,它是 Distutils 的一个扩展,提供了一些额外的功能和扩展,如对 egg 格式的支持、对依赖项的管理、对命令扩展的支持等。
- 2008 年:Setuptools 0.6 发布,它引入了一些新的功能和改进,如对 Python 2.6 和 3.0 的支持、对 namespace packages 的支持等。
- 2010 年:Distribute 发布,它是 Setuptools 的一个分支,旨在提供更好的兼容性和易用性。Distribute 移除了一些过时的功能和选项,并添加了一些新的功能和扩展。
- 2013 年:Setuptools 0.7 发布,它借鉴了 Distribute 的一些设计和功能,并移除了一些过时的功能和选项。Setuptools 0.7 的语法与 Distribute 的语法相同。
- 2018 年:Setuptools 40.0 发布,它引入了一些新的功能和改进,并移除了一些过时的功能和选项。Setuptools 40.0 的语法与 Setuptools 0.7 相同。
- 2020 年:Setuptools 49.0 发布,它增加了对 Python 3.9 的支持,并引入了一些新的功能和改进,如对 GitLab 的支持、对环境变量的支持等。
setup.cfg 发展历史
setup.cfg
文件是 Python 项目的元数据和构建选项的配置文件,它可以替代 setup.py
脚本来定义 Python 项目的元数据和构建选项。以下是 setup.cfg
的主要发展历史:
- Python 2.5:
setuptools
扩展模块发布,引入了setup.cfg
文件来定义项目的元数据和构建选项。 - Python 3.1:
distutils2
项目发布,旨在改进distutils
模块的设计和实现,引入了setup.cfg
文件作为定义项目元数据和构建选项的首选方式。 - Python 3.4:
setuptools
扩展模块被添加到 Python 标准库中,成为distutils
的一部分,setup.cfg
文件成为标准的配置文件格式。
随着 Python 的发展,setup.cfg
文件逐渐成为 Python 项目的标准配置文件格式。它提供了比 setup.py
脚本更简洁、更易于阅读和维护的配置方式,同时也更容易与其他工具集成。需要注意的是,setup.cfg
文件并不是必需的,如果没有指定该文件,则 setuptools
将默认使用 setup.py
脚本来定义项目的元数据和构建选项
pyproject.toml 发展历史
pyproject.toml
是一个 TOML 格式的文件,用于定义 Python 项目的元数据和构建选项。它是 Python 中的一个新的标准文件,用于替代 setup.py
脚本和 setup.cfg
文件来定义和构建 Python 项目。以下是 pyproject.toml
的主要发展历史:
- PEP 517:该 PEP 提出了一个新的构建系统接口,用于替代
setup.py
和setup.cfg
,并引入了pyproject.toml
文件作为定义 Python 项目的元数据和构建选项的标准文件格式。 - PEP 518:该 PEP 提出了一种新的方式来定义项目的依赖关系,并引入了
pyproject.toml
文件作为标准的项目元数据文件格式。
随着 PEP 517 和 PEP 518 的发布,pyproject.toml
文件逐渐成为 Python 项目的标准元数据文件格式。它提供了比 setup.py
脚本和 setup.cfg
文件更灵活、更易于配置和扩展的方式,同时也更容易与构建工具和依赖管理器集成。需要注意的是,pyproject.toml
文件只在使用 PEP 517 和 PEP 518 规范的构建工具中才会被识别和使用。
总之,pyproject.toml
文件是 Python 项目的标准元数据和构建选项的配置文件,它提供了比 setup.py
脚本和 setup.cfg
文件更灵活、更易于配置和扩展的方式,成为了 Python 项目的标准元数据文件格式。
Pip 发展历史
在 Python 中,pip 和 setuptools 是两个常用的包管理工具,它们在安装和管理 Python 包方面发挥着重要作用。
pip 是由 Ian Bicking 和其他 Python 社区成员开发的,它是 Python 的包管理器之一,用于在 Python 程序中安装和管理软件包。
Ian Bicking 是一位 Python 程序员和开源软件贡献者,他还是 Pylons 和 Paste 等框架的创始人之一。在 2008 年,他开始开发 pip,这个项目的目标是为 Python 社区提供一个更好、更易用的包管理器,以替代原有的 easy_install 工具。
pip 从一开始就受到了 Python 社区的欢迎和支持,它的代码托管在 GitHub 上,并逐渐发展成为 Python 生态系统中使用最广泛的包管理器之一。pip 支持从 PyPI(Python Package Index)等源中下载和安装 Python 包,并自动处理包之间的依赖关系,使得 Python 包的管理变得更加简单和高效。
目前,pip 已经成为了 Python 官方推荐的包管理器,并且已经集成到 Python 2.7.9 和 Python 3.4 以及更高版本中,可以直接使用,无需额外安装。
pip 与 setuptools 有密切的关系,因为它使用 setuptools 来构建和安装 Python 包。
setuptools 是一个 Python 包的构建和分发工具,它提供了一组 API 来定义、构建和打包 Python 包。setuptools 可以自动生成 setup.py 文件,这个文件描述了 Python 包的元数据和依赖关系,以便 pip 和其他工具可以使用它来安装和管理包。
在安装和管理 Python 包时,pip 会使用 setuptools 来解决依赖关系、构建和安装包。pip 会在下载包之前检查包的依赖关系,并使用 setuptools 来安装这些依赖项。如果包需要进行构建,pip 也会使用 setuptools 来构建它们
以下是 pip 的发展历史概述:
- 2008 年:pip 首次发布,它是 easy_install 的一个替代品,提供了更好的依赖项解析、升级和卸载功能,以及更好的用户体验。
- 2011 年:pip 正式成为 Python 包管理的标准工具之一,并被纳入到 Python 2.7 和 Python 3.2 中。
- 2013 年:pip 1.4 发布,它引入了一些新的功能和改进,如对 wheel 格式的支持、对安装源的优化等。
- 2016 年:pip 8.0 发布,它引入了一些新的功能和改进,如对 hash 校验的支持、对源索引的优化等。
- 2018 年:pip 18.0 发布,它引入了一些新的功能和改进,如对 Python 3.7 的支持、对源索引的改进等。
- 2020 年:pip 20.0 发布,它引入了一些新的功能和改进,如对 Python 3.8 的支持、对源索引的优化等。
Wheel 发展历史
Wheel 是 Python 包分发的一种格式,它的发展历史可以追溯到 2012 年,以下是 Wheel 的发展历史概述:
2012 年:Wheel 首次提出,它的目标是提供一种更快、更可靠、更简单的 Python 包分发格式,以取代旧的 egg 格式。
2013 年:Wheel 1.0 发布,它引入了一些新的功能和改进,如对 namespace packages 的支持、对多平台支持的改进等。
2014 年:Wheel 0.24 发布,它引入了一些新的功能和改进,如对 Python 3.4 的支持、对源码分发的改进等。
2016 年:Wheel 0.29 发布,它引入了一些新的功能和改进,如对 Python 3.6 的支持、对源码分发的改进等。
2018 年:Wheel 0.31 发布,它引入了一些新的功能和改进,如对 Python 3.7 的支持、对源码分发的改进等。
2020 年:Wheel 0.35 发布,它引入了一些新的功能和改进,如对 Python 3.9 的支持、对源码分发的改进等。
Egg 是 Python 包分发格式之一,它的全称是 Easy Install Package,是由 setuptools 提供的一种打包和安装 Python 包的格式。Egg 格式早期是作为 Python 包管理工具 easy_install 的默认格式而出现的,但现在已逐渐被 Wheel 格式取代。
Egg 格式的文件扩展名为 .egg,它是一个压缩文件,可以包含 Python 模块、资源文件、文档等。与其他 Python 包分发格式相比,Egg 格式具有以下特点:
- Egg 格式的文件可以被 easy_install 直接安装,无需解包。
- Egg 格式支持 Python 2.x 和 Python 3.x 的跨版本安装。
- Egg 格式支持多版本安装,可以在同一台机器上同时安装多个版本的同一 Python 包。
虽然 Egg 格式曾经是 Python 包分发生态系统中的一个重要组成部分,但是随着 setuptools 的发展和 Wheel 格式的出现,Egg 格式已经逐渐被取代。现在大部分 Python 包都已经使用 Wheel 格式进行分发,因为它比 Egg 格式更快、更可靠、更灵活,并且能够支持更多的 Python 版本和平台。
Wheel 是 Python 包分发格式之一,它的全称是 Python Wheel Package,是由 Python 社区提供的一种打包和安装 Python 包的格式。与其他 Python 包分发格式相比,Wheel 格式具有以下特点:
- Wheel 格式的文件扩展名为 .whl,它是一个压缩文件,可以包含 Python 模块、资源文件、文档等。
- Wheel 格式支持 Python 2.x 和 Python 3.x 的跨版本安装。
- Wheel 格式可以包含 C 扩展模块,因此可以在安装时直接编译和安装 C 扩展模块,而不需要使用其他工具。
- Wheel 格式支持多平台安装,即可以在 Windows、Linux、macOS 等不同的操作系统上安装同一个 Wheel 包。
- Wheel 格式的安装速度比 Egg 格式快,因为它使用了更简单、更快速的算法。
- Wheel 格式可以通过 pip 工具直接安装,无需使用其他 Python 包管理工具。
Twine 发展历史
Twine 是 Python 生态系统中的一个包管理工具,它主要用于将打包好的 Python 包上传到 PyPI(Python Package Index)等包仓库中。以下是 Twine 的发展历史概述:
- 2015 年:Twine 工具发布,它是一个用于上传 Python 包到 PyPI 的命令行工具,支持 GPG 签名和 HTTPS 传输。
- 2016 年:Twine 1.4 版本发布,它增加了对 Wheel 包格式的支持,以及一些新特性和改进,如支持多个 PyPI 仓库、支持检查包重复上传等。
- 2017 年:Twine 1.8 版本发布,它增加了对 PEP 517 和 PEP 518 的支持,以及一些新特性和改进,如支持源码安装、支持上传多个包文件等。
- 2018 年:Twine 1.12 版本发布,它增加了对 Python 3.7 和 PyPI 的新特性的支持,以及一些新特性和改进,如支持使用环境变量配置 PyPI 仓库、支持使用 .pypirc 文件配置认证信息等。
- 2020 年:Twine 3.2 版本发布,它移除了 Python 2 的支持,增加了对 Python 3.9 的支持,以及一些新特性和改进,如支持使用 twine check 命令检查包是否符合 PyPI 标准、支持使用 twine register 命令在 PyPI 中注册项目等。
virtualenv 发展历史
Virtualenv 是 Python 生态系统中的一个重要工具,它提供了一种在单个系统中运行多个独立 Python 环境的方式。
Virtualenv 是由 Ian Bicking 开发的,它是一个 Python 虚拟环境管理工具。Ian Bicking 是一位 Python 程序员和开源软件贡献者,他还是 Pylons 和 Paste 等框架的创始人之一。
Virtualenv 的第一个版本于 2007 年发布,它的主要目的是为了解决 Python 包依赖性的问题。在 Python 中,不同的项目可能需要不同的 Python 版本和依赖包,而这些依赖包可能会相互冲突。Virtualenv 可以创建一个隔离的 Python 环境,使得每个项目都可以独立地安装和使用其所需的 Python 版本和依赖包,从而避免了冲突问题。
在 Virtualenv 发布之后,它很快成为了 Python 开发社区中的一个重要工具,受到了广泛的关注和使用。Virtualenv 后来也被集成到了 Python 官方的文档中,并且有许多其他的虚拟环境管理工具,如 Pyenv 和 Conda,也是基于 Virtualenv 的思想和实现方式开发的。
以下是 Virtualenv 的发展历史概述:
- 2007 年:Virtualenv 工具发布,它是一个用于创建独立 Python 环境的工具,可以避免不同项目之间的依赖冲突。
- 2009 年:Virtualenvwrapper 工具发布,它是 Virtualenv 的一个扩展,提供了更好的虚拟环境管理方式,如创建、切换、删除虚拟环境等。
- 2010 年:Virtualenv 1.5 版本发布,它增加了对 Python 3 的支持,以及一些新特性和改进,如支持使用 requirements.txt 文件安装依赖、支持使用 pip 安装包等。
- 2011 年:Virtualenv 1.6 版本发布,它增加了对 Python 3.2 的支持,以及一些新特性和改进,如支持使用 -p 选项指定 Python 解释器、支持使用 –system-site-packages 选项共享系统 Python 包等。
- 2013 年:Virtualenv 1.10 版本发布,它增加了对 Python 3.3 的支持,以及一些新特性和改进,如支持使用 –always-copy 选项复制依赖包、支持使用 –clear 选项清空虚拟环境等。
- 2017 年:Virtualenv 16.0 版本发布,它增加了对 Python 3.6 和 pip 10 的支持,以及一些新特性和改进,如支持使用 –upgrade 选项更新包、支持使用 –prompt 选项设置虚拟环境提示符等。
- 2018 年:Virtualenv 16.1 版本发布,它增加了对 Python 3.7 的支持,以及一些新特性和改进,如支持使用 –creator 选项指定创建虚拟环境的方式、支持使用 –verbose 选项显示详细信息等。
- 2019 年:Virtualenv 16.7.0 版本发布,它增加了对 Python 3.8 的支持,以及一些新特性和改进,如支持使用 –system-site-packages 选项共享系统 Python 包、支持使用 –copies 选项复制依赖包等。
- 2020 年:Virtualenv 20.0.0 版本发布,它增加了对 Python 3.9 和 pip 20 的支持,以及一些新特性和改进,如支持使用 –prompt-cmd 选项设置虚拟环境提示符、支持使用 –no-pip 选项创建不包含 pip 的虚拟环境等。
- 2021 年:Virtualenv 20.8.1 版本发布,它增加了对 Python 3.10 的支持,以及一些新特性和改进,如支持使用 –download 选项从指定 URL 下载 Python 解释器、支持使用 –clear 选项清空虚拟环境等。
总的来说,Virtualenv 是 Python 生态系统中一个非常重要的工具,它提供了一种方便、快捷的虚拟环境管理方式,为 Python 开发者提供了很多便利。在其发展历史中,Virtualenv 不断更新迭代,增加了许多新特性和功能,以适应 Python 生态系统的变化和需求。虽然现在 Virtualenv 已经不再主动维护,但它的代码被集成到其他工具中,如 venv 和 pipenv,仍然为 Python 开发者提供基础支持。
venv 发展历史
venv 是由 Python 官方开发团队开发的,它是 Python 3.3 版本引入的标准库模块,用于创建 Python 虚拟环境。
Python 的官方文档中对 venv 的介绍如下:
“venv 模块提供了 Python 3 中的虚拟环境支持。虚拟环境是 Python 环境的隔离副本,包括 Python 解释器和一个独立的库副本。虚拟环境通常用于为不同的项目创建独立的环境,以避免项目之间的依赖冲突。”
与 Virtualenv 和其他虚拟环境管理工具不同,venv 是 Python 官方提供的标准库模块,因此它的功能和用法都与 Python 解释器密切相关,并且在 Python 安装时已经预装了 venv 模块,因此不需要额外安装。
在使用 venv 创建虚拟环境时,可以选择使用系统中已经安装的 Python 解释器,也可以使用 venv 模块自动安装一个新的 Python 解释器。创建的虚拟环境和它所依赖的 Python 包都是独立的,不会与系统中的 Python 环境和其他虚拟环境产生冲突。
以下是 venv 的发展历史概述:
2012 年:Python 3.3 版本发布,它引入了 venv 标准库,用于创建独立的 Python 环境,取代了 Python 2 中的 virtualenv 工具。
2013 年:venv 1.1 版本发布,它增加了对 Python 3.4 的支持,以及一些新特性和改进,如支持使用 –system-site-packages 选项共享系统 Python 包、支持使用 –copies 选项复制依赖包等。
2014 年:venv 1.2 版本发布,它增加了对 Python 3.5 的支持,以及一些新特性和改进,如支持使用 –clear 选项清空虚拟环境、支持使用 –upgrade 选项更新包等。
2015 年:venv 1.3 版本发布,它增加了对 Python 3.6 的支持,以及一些新特性和改进,如支持使用 –prompt 选项设置虚拟环境提示符、支持使用 –without-pip 选项创建不包含 pip 的虚拟环境等。
2017 年:venv 3.6.0 版本发布,它增加了对 Python 3.6 的支持,以及一些新特性和改进,如支持使用 activate.csh 和 activate.fish 脚本、支持使用 bin/python3 命令启动 Python 解释器等。
2018 年:venv 3.7.0 版本发布,它增加了对 Python 3.7 的支持,以及一些新特性和改进,如支持使用 venv 模块创建虚拟环境、支持使用 ensurepip 模块安装 pip 等。
2019 年:venv 3.8.0 版本发布,它增加了对 Python 3.8 的支持,以及一些新特性和改进,如支持使用 –symlinks 选项创建符号链接而非复制文件、支持使用 –upgrade-deps 选项更新依赖包等。
2020 年:venv 3.9.0 版本发布,它增加了对 Python 3.9 的支持,以及一些新特性和改进,如支持使用 –list 选项列出虚拟环境中已安装的包、支持使用 –upgrade 选项更新 pip 等。
2021 年:venv 3.10.0 版本发布,它增加了对 Python 3.10 的支持,以及一些新特性和改进,如支持使用 –symlink-to 选项指定符号链接目录、支持使用 –prompt-cmd 选项设置虚拟环境提示符等。
Pyenv 发展历史
Pyenv 是一个 Python 版本管理工具,可以用于在同一系统中管理多个 Python 版本。以下是 Pyenv 的发展历史概述:
- 2011 年:Pyenv 0.1.0 版本发布,最初由 Yasuhiro Matsumoto 开发。这个版本只支持在 Bash shell 中使用。
- 2012 年:Pyenv 0.2.0 版本发布,支持在其他 shell 中使用,如 Zsh 和 Fish。
- 2013 年:Pyenv 0.4.0 版本发布,增加了对 Python 3 的支持。
- 2014 年:Pyenv 0.4.1 版本发布,增加了对 Jython 和 Stackless Python 的支持。
- 2015 年:Pyenv 1.0.0 版本发布,它增加了对 Python 的解释器和标准库的支持,以及一些新特性和改进,如增加了 pyenv virtualenv 命令来管理虚拟环境、增加了 pyenv whence 命令来查找可执行文件的位置等。
- 2018 年:Pyenv 1.2.0 版本发布,增加了对 PyPy3 的支持,并修复了一些 bug。
- 2020 年:Pyenv 1.2.21 版本发布,增加了对 Python 3.9.0 的支持,并修复了一些 bug。
Pyenv 的发展历史显示出它的长期稳定性和不断改进的趋势,以适应不断变化的 Python 生态系统和开发者需求。Pyenv 的主要特点是可以在同一系统中管理多个 Python 版本,可以很方便地切换版本,也支持使用虚拟环境来隔离不同项目的依赖。Pyenv 在 Python 开发者社区中广受欢迎,是一个不可或缺的工具之一。
Pipenv 发展历史
Pipenv 是在 2017 年由 Kenneth Reitz 开发的 Python 项目依赖管理工具。以下是 Pipenv 的发展历史概述:
- 2017 年:Pipenv 1.0.0 版本发布,它是第一个稳定版本。Pipenv 结合了 pip 和 virtualenv 的功能,提供了一个更简单的方式来管理 Python 项目依赖。它自动为每个项目创建虚拟环境,并使用 Pipfile 和 Pipfile.lock 文件来管理项目依赖。
- 2018 年:Pipenv 2018.5.18 版本发布,它增加了许多新特性和改进,如支持使用 –skip-lock 选项跳过生成 Pipfile.lock 文件、支持使用 –deploy 选项安装 Pipfile.lock 文件中的依赖、支持使用 –update 选项更新依赖等。
- 2019 年:Pipenv 2019.6.3 版本发布,它增加了对 Python 3.8 的支持,以及一些新特性和改进,如支持使用 –use-feature 选项安装依赖、支持使用 –outdated 选项显示过期的依赖等。
- 2020 年:Pipenv 2020.6.2 版本发布,它增加了支持使用 –python 选项指定 Python 解释器版本、支持使用 –pre 选项安装预览版依赖、支持使用 –keep-outdated 选项保留过期的依赖等。
- 2021 年:Pipenv 2021.5.29 版本发布,它增加了对 Python 3.10 的支持,以及一些新特性和改进,如支持使用 –platform 选项指定安装依赖的平台、支持使用 –bundle 选项生成依赖包压缩文件等。
Poetry 发展历史
Poetry 是一个较新的 Python 项目依赖管理工具,在 2018 年由 Sébastien Eustace 开发。以下是 Poetry 的发展历史概述:
- 2018 年:Poetry 0.1.0 版本发布,它是第一个公开发布的版本。Poetry 通过 pyproject.toml 文件来管理项目依赖,并使用虚拟环境来隔离项目依赖。
- 2019 年:Poetry 0.12.0 版本发布,它增加了对 Python 3.8 的支持,以及一些新特性和改进,如支持使用 –lock 选项生成锁文件、支持使用 –develop 选项安装开发依赖等。
- 2020 年:Poetry 1.0.0 版本发布,它增加了对 Python 3.9 的支持,以及一些新特性和改进,如支持使用 –experimental 选项启用实验性功能、支持使用 –remove-untracked 选项删除未跟踪的依赖等。
- 2021 年:Poetry 1.2.0 版本发布,它增加了对 Python 3.10 的支持,以及一些新特性和改进,如支持使用 –workspace 选项管理多个相关项目、支持使用 –source 选项指定依赖源等。
Poetry 的发展历史显示出它的快速发展和不断改进的趋势,以适应不断变化的 Python 生态系统和开发者需求。Poetry 相较于 pipenv 和 virtualenv 等工具,它有着更加简洁的配置文件和更加易于使用的命令行接口,因此在 Python 开发者中越来越受欢迎。
Pdm 发展历史
PDM 是一个比较新的 Python 项目依赖管理工具,由李辉开发,它于 2020 年首次发布。以下是 PDM 的发展历史概述:
- 2020 年:PDM 0.1.0 版本发布,它是第一个公开发布的版本。PDM 使用 pyproject.toml 文件来管理项目依赖,并使用虚拟环境来隔离项目依赖。与其他依赖管理工具不同,PDM 可以使用多个依赖源,以便从不同的源安装依赖。
- 2021 年:PDM 1.0.0 版本发布,它增加了对 Python 3.10 的支持,以及一些新特性和改进,如支持使用 –edit 选项编辑依赖文件、支持使用 –update-prereleases 选项更新预览版依赖等。
- 2022 年:PDM 2.0.0 版本发布,它增加了对 Python 3.11 的支持,以及一些新特性和改进,如支持使用 –lockfile 选项指定锁定文件、支持使用 –find-links 选项指定依赖的本地路径或 URL 等。
PDM 的发展历史显示出它的快速发展和不断改进的趋势,以适应不断变化的 Python 生态系统和开发者需求。PDM 具有类似 Poetry 的简洁配置文件和易于使用的命令行接口,但 PDM 的多源支持和依赖快照功能则是它的独特特点,这些功能使得 PDM 在一些特定场景下更加适用。
Pyflow 发展历史
Pyflow 是另一个 Python 项目依赖管理工具,于 2016 年首次发布。以下是 Pyflow 的发展历史概述:
- 2016 年:Pyflow 0.1.0 版本发布,它是第一个公开发布的版本。Pyflow 使用 requirements.txt 文件来管理项目依赖,并使用虚拟环境来隔离项目依赖。与其他依赖管理工具不同,Pyflow 支持自动化的依赖解决方案,以便更轻松地安装和更新依赖。
- 2017 年:Pyflow 0.3.0 版本发布,它增加了许多新特性和改进,如支持使用 –editable 选项安装可编辑依赖、支持使用 –pre 选项安装预览版依赖等。
- 2018 年:Pyflow 2.0.0 版本发布,它增加了对 Python 3 的支持,以及一些新特性和改进,如支持使用 Pipfile.lock 文件管理依赖、支持在 Pipfile 中使用多个依赖源等。
尽管 Pyflow 的开发已经停止,但是它的一些思想和特性被其他依赖管理工具所采纳,例如 Pipenv 和 Poetry。Pyflow 在其时代内曾经是一个有影响力的依赖管理工具,它的自动化依赖解决方案、虚拟环境功能和多个依赖源等特性为后来的依赖管理工具提供了启示。
Conda 发展历史
Conda 是一个开源的包管理系统和环境管理系统,用于管理 Python 包和其他科学计算相关的软件包。以下是 Conda 的发展历史:
2012 年,Continuum Analytics 公司发布了第一个版本的 Conda,用于管理 Python 环境和软件包。
2015 年,Conda 发布了 4.0 版本,引入了虚拟环境和交叉平台支持,支持 Python、R 和其他语言的包管理。
2016 年,Conda 发布了 4.2 版本,引入了 Conda Forge,一个社区驱动的软件包仓库,提供了更丰富的软件包和更快的更新周期。
2018 年,Conda 发布了 4.5 版本,引入了命令行界面的改进和新功能,如环境快速复制和包依赖关系的可视化。
2019 年,Conda 发布了 4.6 版本,引入了环境锁定和自动环境激活功能,提高了环境管理的效率和可靠性。
2020 年,Anaconda Inc. 收购了 Quansight 公司,并将其旗下的 Mamba 包管理器与 Conda 进行整合,提高了包管理的速度和稳定性。
2021 年,Conda 发布了 4.10 版本,引入了 Conda 市场,一个用户界面友好的软件包搜索和安装工具,提供了更好的用户体验和社区支持。
总结
项目依赖管理工具(虚拟环境):
- 官方的:
- venv
- 三方的:
- virtualenv
- pyenv
- pipenv
- pyflow
- poetry
- pdm
- Conda
包管理工具:
- setuptools:包构建
- twine:包上传和发布
- pip:包安装工具
- pypa/build:包构建,用于替代 setuptools
下面是 pdm、poetry、pipenv、venv、virtualenv、conda 的简要对比:
1、pdm:
优点:
- 支持 Pipfile.lock 管理依赖项,可以保证依赖项的版本和环境的一致性。
- 自动创建和管理虚拟环境,可以避免环境冲突和版本问题。
- 自动安装缺失的系统依赖项,可以避免出现缺少系统库导致的问题。
- 自动审查安全漏洞,可以避免使用有安全漏洞的依赖项。
缺点:
- 还比较新,生态不够完善。
- 没有像 poetry 和 pipenv 那样支持发布包到 PyPI。
2、poetry:
优点:
- 支持 pyproject.toml 管理依赖项,可以保证依赖项的版本和环境的一致性。
- 自动创建和管理虚拟环境,可以避免环境冲突和版本问题。
- 自动安装缺失的系统依赖项,可以避免出现缺少系统库导致的问题。
- 自动审查安全漏洞,可以避免使用有安全漏洞的依赖项。
- 支持发布包到 PyPI。
缺点:
- 有些人觉得配置比较复杂,学习曲线比较陡峭。
3、pipenv:
优点:
- 支持 Pipfile 和 Pipfile.lock 管理依赖项,可以保证依赖项的版本和环境的一致性。
- 自动创建和管理虚拟环境,可以避免环境冲突和版本问题。
- 自动安装缺失的系统依赖项,可以避免出现缺少系统库导致的问题。
- 自动审查安全漏洞,可以避免使用有安全漏洞的依赖项。
- 支持发布包到 PyPI。
缺点:
- 有些人觉得速度比较慢。
- 有些人觉得配置比较复杂,学习曲线比较陡峭。
4、venv:
优点:
- 自带 Python,无需安装额外的依赖。
- 简单易用,命令行操作方便。
- Python 3.3+ 后自带,不需要安装额外的库。
缺点:
- 只支持 Python 3.3+。
- 需要手动安装依赖项。
5、virtualenv:
优点:
- 支持 Python 2 和 Python 3。
- 可以在同一台机器上创建多个虚拟环境,可以避免环境冲突和版本问题。
- 可以在不同的 Python 版本之间切换。
缺点:
- 需要手动安装依赖项。
6、conda:
优点:
- 支持多个操作系统和多个 Python 版本。
- 可以管理 Python 环境和非 Python 环境。
- 可以管理依赖项和安装包。
- 可以创建和管理虚拟环境。
- 支持发布包到 Anaconda Cloud。
缺点:
- 安装包可能比较大。
- 有些人觉得配置比较复杂,学习曲线比较陡峭。
总的来说,这些工具都有各自的优缺点,可以根据自己的需求和使用习惯选择最适合自己的工具。