pip vs pipx - 区别详解
核心区别一句话
- pip:安装 Python 库(library)
- pipx:安装 Python 应用程序(CLI tools)
详细对比
pip(Python 自带)
用途:安装 Python 库和依赖包
# 安装库到当前环境
pip install requests
pip install numpy pandas
# 然后在代码中导入使用
import requests
import numpy as np
安装位置:
- 全局安装:系统 Python 的 site-packages
- 虚拟环境:当前虚拟环境的 site-packages
问题:
❌ 多个工具的依赖可能冲突
❌ 污染全局 Python 环境
❌ 不同工具可能需要同一个库的不同版本
示例问题:
pip install black==22.0 # 代码格式化工具
pip install flake8==6.0 # 代码检查工具
# 假设 black 需要 click==8.0
# 但 flake8 需要 click==7.0
# 冲突!💥
pipx(需要单独安装)
用途:安装带命令行的 Python 应用程序
# 安装 CLI 工具
pipx install poetry
pipx install black
pipx install httpie
# 可以直接在命令行使用
poetry --version
black --help
http GET https://api.github.com
安装位置:
- 每个应用有独立的虚拟环境
- 命令链接到
~/.local/bin(自动添加到 PATH)
优点:
✅ 每个工具独立隔离,没有依赖冲突
✅ 不污染全局环境
✅ 自动管理虚拟环境
✅ 可以同时安装多个版本
✅ 卸载干净,不留残留
形象比喻
pip = 安装零件
你的 Python 环境(工具箱)
├── requests(螺丝刀)
├── numpy(扳手)
├── pandas(锤子)
└── flask(钳子)
# 所有工具混在一个工具箱里
pipx = 安装独立工具
~/.local/pipx/venvs/
├── poetry/(独立工具箱 A)
│ ├── poetry 本身
│ └── poetry 的所有依赖
├── black/(独立工具箱 B)
│ ├── black 本身
│ └── black 的所有依赖
└── httpie/(独立工具箱 C)
├── httpie 本身
└── httpie 的所有依赖
# 每个工具都有自己独立的工具箱
使用场景对比
什么时候用 pip?
库/框架(要在代码中 import 的):
pip install requests # HTTP 库
pip install numpy # 数 值计算库
pip install django # Web 框架
pip install tensorflow # 机器学习框架
pip install pandas # 数据分析库
特点:需要在 Python 代码中 import 使用
什么时候用 pipx?
命令行工具(直接在终端运行的):
pipx install poetry # 包管理工具
pipx install black # 代码格式化
pipx install flake8 # 代码检查
pipx install pytest # 测试框架
pipx install httpie # HTTP 客户端
pipx install youtube-dl # 视频下载
pipx install cookiecutter # 项目模板
pipx install jupyter # Jupyter Notebook
pipx install pylint # 代码分析
pipx install twine # PyPI 上传工具
特点:安装后直接在命令行使用,不需要 import
实际例子
场景 1:开发 Web 应用
# 项目依赖 - 用 pip
cd my-web-project
python -m venv venv
source venv/bin/activate
pip install django requests
# 开发工具 - 用 pipx
pipx install black # 格式化代码
pipx install pytest # 运行测试
场景 2:数据科学
# 数据科学库 - 用 pip
pip install numpy pandas matplotlib scikit-learn
# 开发工具 - 用 pipx
pipx install jupyter # Jupyter Notebook
pipx install ipython # 增强的 Python shell