参考:
https://zhuanlan.zhihu.com/p/637791135
https://www.kancloud.cn/madxzb/python-guide/2248088
pipx 是一个帮助你安装和运行 Python 终端应用的工具,它的主要优点是能将这些应用安装在独立隔离的环境中,避免与系统或其他项目的 Python 包产生冲突。
pipx 的核心优势:
- 隔离性: 每个通过
pipx安装的应用都有自己独立虚拟环境,这意味着它们的依赖项不会影响到你的全局 Python 环境或其他项目。 - 便利性: 可以轻松地运行 Python 应用,而无需手动创建和管理虚拟环境。
- 安全性: 减少了全局安装 Python 包可能带来的风险。
- 简洁性: 专注于应用本身,而不是其复杂的依赖关系。
教程大纲:
- 安装
pipx pipx的基本使用- 安装 Python 应用
- 运行应用
- 列出已安装的应用
- 升级应用
- 卸载应用
- 运行一次性的应用 (使用
pipx run)
pipx的进阶使用- 管理
pipx环境 - 自定义
pipx安装位置 - 注入额外的包到应用环境中
- 管理
- 常用命令总结
1. 安装 pipx
pipx 本身也是一个 Python 包,你可以使用 pip 来安装它。
如果你使用的是 Python 3.6 或更高版本 (推荐):
python3 -m pip install --user pipx python3 -m pipx ensurepath--user参数会将pipx安装在你的用户目录下,而不是系统全局目录。pipx ensurepath命令会确保pipx安装的可执行文件路径被添加到你的系统PATH环境变量中。执行完此命令后,你可能需要重启你的终端或者重新加载你的 shell 配置文件 (例如.bashrc,.zshrc) 才能让PATH的改动生效。使用包管理器 (例如 Homebrew on macOS, apt on Debian/Ubuntu):
macOS (使用 Homebrew):
brew install pipx pipx ensurepathDebian/Ubuntu (可能需要较新版本):
sudo apt update sudo apt install pipx pipx ensurepath(注意:通过系统包管理器安装的版本可能不是最新的。)
验证安装:
打开一个新的终端窗口,然后输入:
pipx --version如果安装成功,你会看到
pipx的版本号。
2. pipx 的基本使用
2.1 安装 Python 应用
使用 pipx install <package_name> 命令来安装一个 Python 应用。pipx 会自动为这个应用创建一个新的隔离环境,并将应用的可执行文件链接到 ~/.local/bin (默认情况下)。
示例: 安装 cowsay (一个经典的终端程序)
pipx install cowsay
示例: 安装 youtube-dl 或其现代替代品 yt-dlp (一个视频下载工具)
pipx install yt-dlp
示例: 安装 black (一个 Python 代码格式化工具)
pipx install black
安装完成后,如果 ~/.local/bin 在你的 PATH 中,你就可以直接在终端运行这些应用了。
2.2 运行应用
一旦通过 pipx 安装了应用,你就可以像运行其他任何终端命令一样运行它。
示例:
cowsay "Hello from pipx!"
yt-dlp --version
black --version
2.3 列出已安装的应用
要查看所有通过 pipx 安装的应用及其环境信息,使用:
pipx list
输出会显示每个应用的版本、Python 版本、可执行文件路径等。
2.4 升级应用
升级单个应用:
pipx upgrade <package_name>例如,升级
yt-dlp:pipx upgrade yt-dlp升级所有已安装的应用:
pipx upgrade-all
2.5 卸载应用
要移除一个通过 pipx 安装的应用及其隔离环境,使用:
pipx uninstall <package_name>
例如,卸载 cowsay:
pipx uninstall cowsay
2.6 运行一次性的应用 (使用 pipx run)
如果你只是想临时运行一个 Python 应用,而不想永久安装它,可以使用 pipx run 命令。pipx 会在一个临时的虚拟环境中下载并运行该应用,运行结束后会自动清理环境。
这对于那些你不经常使用,或者只是想尝试一下的工具非常有用。
示例:
运行
cowsay并传递参数,而无需先pipx install cowsay:pipx run cowsay "Temporary moo"运行一个简单的 HTTP 服务器 (Python 内置的
http.server模块):pipx run http.server -- --directory /path/to/your/files 8000注意:当应用本身也需要接收参数时,你可能需要在应用参数前加上
--,以告诉pipx后面的参数是给应用而不是给pipx run命令的。运行特定版本的应用:
pipx run black==22.3.0 --check .
3. pipx 的进阶使用
3.1 管理 pipx 环境
重新安装所有包: 如果
pipx的内部结构或 Python 版本发生变化,你可能需要重新安装所有应用。pipx reinstall-all查看某个应用的详细信息:
pipx list --include-injected <package_name>这会显示应用的安装路径、Python 版本以及任何通过
pipx inject注入的额外包。
3.2 自定义 pipx 安装位置
默认情况下,pipx 将环境安装在 ~/.local/pipx/venvs,可执行文件链接到 ~/.local/bin。你可以通过环境变量来修改这些路径:
PIPX_HOME: 定义pipx安装环境和元数据的根目录 (默认为~/.local/pipx)。PIPX_BIN_DIR: 定义pipx链接应用可执行文件的目录 (默认为~/.local/bin)。
如果你修改了这些变量,记得也要更新你的 PATH 环境变量,并可能需要运行 pipx ensurepath 来帮助你设置。
示例 (在你的 .bashrc 或 .zshrc 中设置):
export PIPX_HOME=/opt/pipx_venvs
export PIPX_BIN_DIR=/opt/pipx_bin
export PATH="$PIPX_BIN_DIR:$PATH" # 确保新的 bin 目录在 PATH 中
修改后请重新加载 shell 配置或重启终端。
3.3 注入额外的包到应用环境中 (pipx inject)
有时,一个通过 pipx 安装的应用可能需要一些可选的依赖或插件才能启用特定功能。你可以使用 pipx inject 命令将额外的包安装到该应用已存在的隔离环境中。
示例:
假设你安装了 black,并且想为它安装 jupyter 插件(注意:这只是一个假设的例子,black 本身可能不需要这样操作,具体看应用文档)。
pipx install black
pipx inject black some-black-plugin another-plugin
查看注入的包:
pipx list --include-injected black谨慎使用
inject:inject的主要目的是为了应用的插件或可选依赖。过度使用inject来构建复杂的环境可能会违背pipx保持应用隔离和简洁的初衷。如果一个应用需要很多额外的包才能运行,可能它更适合通过pip在一个专门的虚拟环境中进行管理 (例如使用venv或conda)。
4. 常用命令总结
| 命令 | 描述 |
|---|---|
pipx install <pkg> | 安装一个 Python 应用到隔离环境。 |
pipx run <pkg> [args...] | 在临时环境中运行一个 Python 应用。 |
pipx uninstall <pkg> | 卸载一个应用及其环境。 |
pipx uninstall-all | 卸载所有通过 pipx 安装的应用。 |
pipx list | 列出所有已安装的应用。 |
pipx upgrade <pkg> | 升级一个已安装的应用。 |
pipx upgrade-all | 升级所有已安装的应用。 |
pipx reinstall <pkg> | 重新安装一个应用 (使用与之前相同的 Python 版本)。 |
pipx reinstall-all | 重新安装所有应用。 |
pipx inject <pkg> [deps...] | 将额外的包注入到已安装应用的环境中。 |
pipx ensurepath | 确保 pipx 的可执行文件路径 (通常是 ~/.local/bin) 在你的 PATH 中。 |
pipx completions | 为你的 shell 生成自动补全脚本。 |
pipx --version | 显示 pipx 的版本。 |
pipx <command> --help | 显示特定命令的帮助信息。 |
何时使用 pipx vs pip?
使用
pipx:- 当你想要安装和运行一个主要作为命令行工具/应用的 Python 包时 (例如
httpie,black,poetry,ansible,awscli等)。 - 你希望这些工具全局可用,但又不想它们污染你的系统 Python 或其他项目的环境。
- 当你想要安装和运行一个主要作为命令行工具/应用的 Python 包时 (例如
使用
pip(通常在虚拟环境中,如venv):- 当你为一个特定的 Python 项目安装库依赖时 (例如
requests,numpy,django等)。这些是你会在 Python 代码中import的库。 - 这些库是项目的一部分,而不是独立的命令行应用。
- 当你为一个特定的 Python 项目安装库依赖时 (例如
希望这个教程能帮助你开始使用 pipx!它是一个非常实用的工具,可以让你的 Python 应用管理更加清爽和高效。
