详细解释pip及其使用方法(对比apt)

1. pip 是什么?和 apt 有啥不一样?

  • apt :管理的是系统层面的软件包(Ubuntu/Debian 的 .deb 包),安装在系统路径里(通常 /usr/bin/usr/lib 等),受操作系统包管理器管理。
  • pip :管理的是 Python 生态里的第三方包(从 Python 官方仓库 PyPI 下载),只针对 Python 环境,不管系统软件。

可以先建立一个映射关系:

你想做的事 用 apt 用 pip
安装一个包 apt install pip install
升级一个包 apt upgrade pip install -U / --upgrade
卸载一个包 apt remove pip uninstall
查看已安装的包 apt list --installed pip list
查包信息 apt show pip show
按关键字搜索 apt search pip search(已废弃,推荐用网页)

注意:pip search 已经在新版本中禁用,后面会解释怎么替代。


2. 先说最重要的:用对 pip 的"来源"

一般不要直接用 pip 这个命令,而是:

  • 对 Python 3:python3 -m pip ...
  • 对具体虚拟环境:<venv>/bin/python -m pip ...

原因:

  1. 不同 Python 版本自带不同的 pip(python3.8、python3.10 各自有一个 pip)。
  2. 不同虚拟环境之间要隔离依赖,直接敲 pip 有时候会跑到系统 Python 上。

常用写法建议:

bash 复制代码
# 系统的 Python 3
python3 -m pip install requests

# 当前虚拟环境
python -m pip install requests

只要记住一句话:尽量用 python -m pip 而不是裸的 pip


3. 安装包:pip install

3.1 基本用法

bash 复制代码
python3 -m pip install 包名

例子:

bash 复制代码
python3 -m pip install requests
python3 -m pip install numpy pandas

类比 apt:

bash 复制代码
apt install curl
apt install curl git

3.2 指定版本 / 版本范围

常用写法:

bash 复制代码
# 指定精确版本
pip install requests==2.31.0

# 安装大于等于某版本
pip install requests>=2.31.0

# 安装版本区间
pip install "requests>=2.25,<3.0"

注意:>=,< 一般要加引号,防止被 shell 解释。

3.3 从 requirements.txt 安装

类似于 "apt 一次装一堆",pip 也常用清单文件:

requirements.txt 内容例如:

txt 复制代码
requests==2.31.0
numpy>=1.23,<2.0
pandas

安装:

bash 复制代码
python3 -m pip install -r requirements.txt
  • -r:from requirements file。

3.4 常用安装参数

  • -U / --upgrade:升级到最新版本

    bash 复制代码
    pip install -U requests
  • --force-reinstall:强制重装

  • --no-deps:只装这个包,不装依赖(一般调试时才用)

  • --user:安装到当前用户目录(~/.local/lib/...),不动系统目录

    bash 复制代码
    pip install --user requests

3.5 换国内镜像源(加速)

一次性临时使用(推荐先这样用):

bash 复制代码
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

常见镜像:

  • 清华:https://pypi.tuna.tsinghua.edu.cn/simple
  • 阿里:https://mirrors.aliyun.com/pypi/simple/
  • 豆瓣:https://pypi.doubanio.com/simple/

全局配置(以 Linux 为例):

bash 复制代码
mkdir -p ~/.config/pip
cat > ~/.config/pip/pip.conf << 'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
EOF

4. 升级、卸载:pip install -U / pip uninstall

4.1 升级单个包

bash 复制代码
pip install -U requests

4.2 升级 pip 自己

bash 复制代码
python3 -m pip install -U pip

有些系统不建议用 root 升级系统自带 pip,安全起见最好在虚拟环境里升级。

4.3 卸载包

bash 复制代码
pip uninstall 包名
pip uninstall requests

会提示确认,支持一次卸载多个:

bash 复制代码
pip uninstall requests urllib3

5. 查看已安装的包、包信息:pip list / pip show

5.1 pip list:类似 apt list --installed

bash 复制代码
pip list

常搭配参数:

  • --outdated:只看有新版本的包

    bash 复制代码
    pip list --outdated
  • --format=columns(默认)或 --format=json:输出格式。

5.2 pip show:类似 apt show

bash 复制代码
pip show requests

输出信息包括:

  • Name、Version
  • Location(安装路径)
  • Requires(依赖了哪些包)
  • Required-by(被哪些包依赖)

新版本 pip 中 pip search 已被禁用,因为:

  • 对 PyPI 服务器压力太大
  • 功能弱,社区几乎都改用 web 搜索

如果你现在执行:

bash 复制代码
pip search xxx

一般会看到:

ERROR: XMLRPC is deprecated or disabled

6.2 推荐的替代方案

  1. 直接上网页
    • https://pypi.org
      搜索栏里输入关键字即可,信息比 pip search 全得多。
  2. 配合浏览器 / 搜索引擎
    • 搜 "python xxx library" 或 "pypi xxx"
  3. 一些三方工具(如 pip_search 等),但都不是 pip 自带的,稳定性各不相同,一般不强推。

实际开发中,大多数人已经不再用 pip search,而是习惯用 PyPI 网页 / 搜索引擎来找包名。


7. pip 和虚拟环境 venv / virtualenv

这部分是使用 pip 时最容易"踩坑"的地方。

7.1 为什么需要虚拟环境?

如果你全部在系统 Python 下用 pip:

  • 项目 A 需要 Django==2.2
  • 项目 B 需要 Django==4.0

这时候你就会陷入"版本地狱":同一台机器上不同项目依赖冲突。

虚拟环境就是为每个项目准备一套独立的 "Python + pip + 包目录",互不干扰。

7.2 用 venv 创建虚拟环境

Python 3 自带 venv 模块。

bash 复制代码
# 进入你的项目目录
cd myproject

# 创建虚拟环境 .venv 目录
python3 -m venv .venv

激活虚拟环境:

  • Linux / macOS:

    bash 复制代码
    source .venv/bin/activate
  • Windows(PowerShell):

    powershell 复制代码
    .\.venv\Scripts\Activate.ps1

激活后,命令行前面会出现类似 (venv) 的前缀,这时:

  • python 指向虚拟环境中的 Python
  • pip 指向虚拟环境中的 pip

此时你就可以直接用:

bash 复制代码
pip install requests

或更安全一点:

bash 复制代码
python -m pip install requests

退出虚拟环境:

bash 复制代码
deactivate

7.3 常见使用流程示例

bash 复制代码
mkdir myproject
cd myproject

# 建 venv
python3 -m venv .venv

# 激活
source .venv/bin/activate  # Windows 按上面那个指令

# 安装依赖
pip install requests flask

# 生成 requirements.txt(记录当前依赖)
pip freeze > requirements.txt

# 将项目和 requirements.txt 一起提交/备份

以后在另一台机器上:

bash 复制代码
git clone ...
cd myproject

python3 -m venv .venv
source .venv/bin/activate

pip install -r requirements.txt

就能复现同样的环境。


8. requirements.txt 与依赖管理:pip freeze

8.1 生成当前环境依赖清单

bash 复制代码
pip freeze > requirements.txt

pip freeze 输出类似:

txt 复制代码
click==8.1.7
Flask==2.3.2
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.3
Werkzeug==2.3.6

这和 pip list 不同:

  • pip list 是面向人看的:表格形式、只列顶层依赖。
  • pip freeze 是面向机器的:固定版本、包括所有直接 + 间接依赖,适合写入文件再用 pip install -r 还原。

8.2 常见工作流

开发时:

  1. 手动 pip install flask requests 等。
  2. 阶段性 pip freeze > requirements.txt 更新依赖锁定。
  3. 部署到服务器 / CI 时:pip install -r requirements.txt

9. 常用参数汇总(类比 apt 使用感)

下面整理一些常用参数,选几个最实用的:

9.1 安装相关

bash 复制代码
pip install 包名                   # 安装最新版本
pip install 包名==1.2.3           # 安装指定版本
pip install "包名>=1.0,<2.0"      # 安装版本区间
pip install -U 包名               # 升级包
pip install -r requirements.txt   # 从清单安装
pip install --user 包名           # 装到当前用户目录
pip install -i 镜像URL 包名       # 指定镜像源

9.2 管理与查询

bash 复制代码
pip uninstall 包名                # 卸载
pip list                          # 列出已安装包
pip list --outdated               # 列出有新版本的包
pip show 包名                     # 查看包详情
pip freeze                        # 以可复现格式输出依赖
pip freeze > requirements.txt     # 生成依赖锁定文件

10. 常见问题与坑

10.1 pip 和 apt 混用安装 Python 包会怎样?

例如:

bash 复制代码
apt install python3-requests
pip install requests

这可能导致:

  1. 系统包(apt)和 pip 包混在同一个目录里;
  2. 某次 pip install -U 把 apt 安装的版本覆盖,apt 自己却不知道;
  3. 系统工具依赖的 Python 包被你不小心升级 / 卸载,造成系统脚本报错。

建议:

  • 系统级工具(比如 certbotansible)用 apt install 即可。
  • 自己的应用和项目,用 venv + pip,不要用 apt install python3-xxx

10.2 pip 指向的是哪个 Python?

可以用:

bash 复制代码
which pip
pip --version

输出类似:

txt 复制代码
pip 23.x from /home/user/.local/lib/python3.10/site-packages/pip (python 3.10)
  • 看路径就知道是在系统 Python 还是虚拟环境。
  • 不确定时,用 python3 -m pip 最保险。

10.3 权限 / sudo 问题

不建议频繁:

bash 复制代码
sudo pip install ...

更好的方式:

  • 普通用户 + --user

    bash 复制代码
    pip install --user 包名
  • 或使用虚拟环境(推荐)。


11. 如果你会 apt,如何快速把"肌肉记忆"迁移到 pip?

给你一个对照表,方便记忆:

场景 apt 命令 pip 命令
安装一个包 apt install foo pip install foo
安装多个包 apt install foo bar pip install foo bar
升级一个包 apt install --only-upgrade foo pip install -U foo
升级包管理器自身 apt install apt(一般跟随系统更新) python3 -m pip install -U pip
卸载包 apt remove foo pip uninstall foo
列出已安装的包 apt list --installed pip list
查包信息 apt show foo pip show foo
只输出可机读依赖 (apt 没直接对应) pip freeze
根据清单安装 (类似 xargs apt install pip install -r requirements.txt
换源 /etc/apt/sources.list pip install -i 镜像URL 包名 / 配置 pip.conf
搜索包 apt search foo 用浏览器打开 https://pypi.org 搜索(pip search 废弃)
相关推荐
第二只羽毛2 小时前
外卖订餐管理系统
java·大数据·开发语言·算法
longxibo2 小时前
Ubuntu datasophon1.2.1 二开之二:解决三大监控组件安装后,启动失败:报缺失common.sh
大数据·linux·运维·ubuntu
第二只羽毛2 小时前
图书管理系统项目PPT文稿
java·大数据·开发语言·ide
_OP_CHEN3 小时前
【Git原理与使用】(六)Git 企业级开发模型实战:从分支规范到 DevOps 全流程落地
大数据·linux·git·gitee·项目管理·devops·企业级组件
知识分享小能手3 小时前
CentOS Stream 9入门学习教程,从入门到精通,CentOS Stream 9 中大数据 —语法详解与实战案例(15)
大数据·学习·centos
Jackyzhe3 小时前
Flink源码阅读:如何生成JobGraph
大数据·flink
笨蛋少年派3 小时前
大数据体系认知
大数据
艾莉丝努力练剑4 小时前
【Python基础:语法第六课】Python文件操作安全指南:告别资源泄露与编码乱码
大数据·linux·运维·人工智能·python·安全·pycharm
老蒋新思维12 小时前
创客匠人峰会深度解析:知识变现的 “信任 - 效率” 双闭环 —— 从 “单次交易” 到 “终身复购” 的增长密码
大数据·网络·人工智能·tcp/ip·重构·数据挖掘·创客匠人