pip & pipx

主要用途

pip

pip 是 Python 的标准包管理器,主要用于安装和管理 Python 库或模块。软件包也可以在 https://pypi.org 中找到,这些库通常被其他 Python 代码导入和使用。例如:

pip install requestsbash
pip install numpy
pip install diango

当你正在开发一个 Python 项目,并需要 requests 库发送 HTTP 请求时,你会用 pip install requests将其安装到你的项目环境中。

pipx

brew install pipx
pipx ensurepath
sudo pipx ensurepath --global # optional to allow pipx actions with --global argument

pipx专门用于安装和运行 Python 命令行应用程序。它确保这些应用在隔离的环境中运行,避免依赖冲突,并允许全局访问这些应用的命令。例如:

pipx install black
pipx install poetry
pipx install httpie

当你想在命令行中使用 black 格式化代码,或使用 poetry 管理项目依赖时,你希望这些工具像系统命令一样可以,而不会干扰你其他项目的依赖。

安装环境

pip

  • 默认将包安装到当前激活的 Python 环境中(如全局环境、虚拟环境venvconda环境)

  • 如果你在全局环境中使用 pip,所有包都会安装到系统的 Python site-packages 目录下,容易导致不同项目间的依赖版本冲突。

pipx

  • 核心优势是自动创建隔离环境,当你使用pipx install <package>时,pipx会为这个应用程序自动创建一个独立的虚拟环境。

  • 这个应用程序的所有依赖都安装在这个隔离的环境中,不会影响全局 Python 环境或其他用 pipx 安装的应用。

  • 同时,pipx 会将应用程序的可执行命令(如 blackpoetry)链接到一个 PATH 环境变量包含的目录(通常是~/.local/bin),让你可以在任何地方直接运行这些命令。

依赖管理

  • pip 安装的包及其依赖会直接添加到当前环境中。如果多个项目需要不同版本的同一个库,很容易产生冲突。

  • pipx 每个用 pipx 安装的应用程序都有自己的“沙盒”(虚拟环境),其依赖完全独立。例如,你用 pipx 安装的 black 可能依赖 click 版本 7,而另一个用 pipx 安装的工具可能依赖 click 版本 8,它们互不影响。

全局可用性

  • pip: 在全局环境中安装的包,其命令行工具可能可以全局访问,但强烈不推荐在全局使用 pip,因为会污染全局环境。

  • pipx: 设计上就是为了让你安全地全局安装和使用命令行工具。它在不污染全局环境的前提下,提供了全局命令访问。

pip 和 pipx 的区别

特性
pip
pipx

用途

用于安装 Python 库或命令行应用程序,可以安装带 entry points 的库

专门用于安装和管理 Python 命令行工具,每个工具都在隔离的虚拟环境中运行

虚拟环境

不自动创建虚拟环境,需手动使用 venvvirtualenv 创建

自动为每个安装的工具创建隔离的虚拟环境,避免依赖冲突

全局命令

安装的包通常是库,需要在 Python 代码证导入使用

安装的命令行工具可以全局使用,无需激活虚拟环境。

依赖管理

依赖可能会影响全局 Python 环境或其他项目

以来管理在隔离环境中,不会影响到全局项目或其他项目

安装命令

使用 pip install package_name 安装包。

使用 pipx install package_name 安装命令行工具

升级和卸载

需手动管理包的升级和卸载

pipx 提供简单的命令来升级所有工具或者卸载特定工具

与 PyPI 集成

直接从 PyPI 安装包

也从 PyPI 安装包,但专注于命令行工具

用户权限

可能需要管理员权限安装全局包

通常不需要管理员权限,可以作为普通用户操作。

临时执行

不支持临时执行环境

支持通过 pipx run 在临时环境中运行应用程序,无需安装。

多版本管理

需要手动管理不同版本的包

自动处理不同版本的工具和它们的依赖,无需手动干预

跨平台支持

支持多个平台,但可能需要不同的包管理器

跨平台支持,包括 Linux、Mac OS 和 Windows

pipx 是一个专门为命令行工具设计的包管理器,它通常在隔离环境中安装每个工具来避免潜在的版本冲突和环境污染。而 pip 是一个更通用的包管理器,适用于安装库和命令行应用程序,但不会自动创建隔离环境。

最后更新于