当前位置: 首页 > news >正文

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

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

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

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

你想做的事用 apt用 pip
安装一个包apt installpip install
升级一个包apt upgradepip install -U / --upgrade
卸载一个包apt removepip uninstall
查看已安装的包apt list --installedpip list
查包信息apt showpip show
按关键字搜索apt searchpip 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 上。

常用写法建议:

# 系统的 Python 3python3 -m pipinstallrequests# 当前虚拟环境python -m pipinstallrequests

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


3. 安装包:pip install

3.1 基本用法

python3 -m pipinstall包名

例子:

python3 -m pipinstallrequests python3 -m pipinstallnumpy pandas

类比 apt:

aptinstallcurlaptinstallcurlgit

3.2 指定版本 / 版本范围

常用写法:

# 指定精确版本pipinstallrequests==2.31.0# 安装大于等于某版本pipinstallrequests>=2.31.0# 安装版本区间pipinstall"requests>=2.25,<3.0"

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

3.3 从 requirements.txt 安装

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

requirements.txt内容例如:

requests==2.31.0 numpy>=1.23,<2.0 pandas

安装:

python3 -m pipinstall-r requirements.txt
  • -r:from requirements file。

3.4 常用安装参数

  • -U/--upgrade:升级到最新版本
    pipinstall-U requests
  • --force-reinstall:强制重装
  • --no-deps:只装这个包,不装依赖(一般调试时才用)
  • --user:安装到当前用户目录(~/.local/lib/...),不动系统目录
    pipinstall--user requests

3.5 换国内镜像源(加速)

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

pipinstall-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 为例):

mkdir-p ~/.config/pipcat>~/.config/pip/pip.conf<<'EOF' [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple EOF

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

4.1 升级单个包

pipinstall-U requests

4.2 升级 pip 自己

python3 -m pipinstall-U pip

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

4.3 卸载包

pip uninstall 包名 pip uninstall requests

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

pip uninstall requests urllib3

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

5.1pip list:类似apt list --installed

pip list

常搭配参数:

  • --outdated:只看有新版本的包
    pip list --outdated
  • --format=columns(默认)或--format=json:输出格式。

5.2pip show:类似apt show

pip show requests

输出信息包括:

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

6. “搜索”包:pip search 不能用怎么办?

6.1 为何pip search失效?

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

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

如果你现在执行:

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模块。

# 进入你的项目目录cdmyproject# 创建虚拟环境 .venv 目录python3 -m venv .venv

激活虚拟环境:

  • Linux / macOS:

    source.venv/bin/activate
  • Windows(PowerShell):

    .\.venv\Scripts\Activate.ps1

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

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

此时你就可以直接用:

pipinstallrequests

或更安全一点:

python -m pipinstallrequests

退出虚拟环境:

deactivate

7.3 常见使用流程示例

mkdirmyprojectcdmyproject# 建 venvpython3 -m venv .venv# 激活source.venv/bin/activate# Windows 按上面那个指令# 安装依赖pipinstallrequests flask# 生成 requirements.txt(记录当前依赖)pip freeze>requirements.txt# 将项目和 requirements.txt 一起提交/备份

以后在另一台机器上:

gitclone...cdmyproject python3 -m venv .venvsource.venv/bin/activate pipinstall-r requirements.txt

就能复现同样的环境。


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

8.1 生成当前环境依赖清单

pip freeze>requirements.txt

pip freeze输出类似:

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 安装相关

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

9.2 管理与查询

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

10. 常见问题与坑

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

例如:

aptinstallpython3-requests pipinstallrequests

这可能导致:

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

建议:

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

10.2pip指向的是哪个 Python?

可以用:

whichpip pip --version

输出类似:

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

10.3 权限 / sudo 问题

不建议频繁:

sudopipinstall...

更好的方式:

  • 普通用户 +--user
    pipinstall--user 包名
  • 或使用虚拟环境(推荐)。

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

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

场景apt 命令pip 命令
安装一个包apt install foopip install foo
安装多个包apt install foo barpip install foo bar
升级一个包apt install --only-upgrade foopip install -U foo
升级包管理器自身apt install apt(一般跟随系统更新)python3 -m pip install -U pip
卸载包apt remove foopip uninstall foo
列出已安装的包apt list --installedpip list
查包信息apt show foopip show foo
只输出可机读依赖(apt 没直接对应)pip freeze
根据清单安装(类似xargs apt installpip install -r requirements.txt
换源/etc/apt/sources.listpip install -i 镜像URL 包名/ 配置pip.conf
搜索包apt search foo用浏览器打开 https://pypi.org 搜索(pip search废弃)
http://www.cnnetsun.cn/news/53490.html

相关文章:

  • conda使用详细指南
  • 豆包与DeepSeek底层大模型的深度解析:技术架构、设计理念与生态分野
  • Linux系统中的socket激活:先创建监听端口,后启动程序
  • 从零解决pyproject.toml构建失败的实战指南
  • Redis Lua脚本入门:从零写出你的第一个原子操作
  • 旧机转手不再慌!电子产品信息清除新国标落地,核心技术逻辑全解析
  • 安全体验馆好用供应商
  • 第二章——数据分析场景之Python数据可视化:用Matplotlib与Seaborn绘制洞察之图
  • 【Java毕设全套源码+文档】基于springboot的高校毕业生离校管理系统小程序设计与实现(丰富项目+远程调试+讲解+定制)
  • 如何用AI工具jstat优化Java应用性能分析
  • 【Java毕设全套源码+文档】基于springboot的高校毕业生信息管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • Day 38 GPU训练及类的call方法
  • 【Python实战】火爆全网的“隔空手势画板”是如何实现的?教你用OpenCV+MediaPipe复刻钢铁侠黑科技!
  • 【学习笔记】如果打造可复现、可评测、可迭代的AI技术体系
  • 【论文自动阅读】See Once, Then Act: Vision-Language-Action Model with Task Learning from One-Shot Video Demo
  • 利用齐次坐标系证明各种几何定理【射影几何】
  • 小程序基于springboot的乡镇普法知识科普宣传系统 律师预约系统设计与实现_qf4cwws6(java毕业设计项目源码)
  • 面向对象编程三大特性:封装、继承、多态的核心要义
  • leetcode 2147. 分隔长廊的方案数 困难
  • 学生党必备!这款桌面课表工具太省心了
  • 深度学习实验14代码
  • 优化及性能-–-behaviac
  • 练题100天——DAY26:汇总区间+丢失的数字+数组交集
  • 当AI芯片不再性感:博通的高增长,为何成了催命符?
  • Vibe Coding:AI驱动的编程新范式
  • AI 数字孪生工厂:西门子与中信特钢的实践,如何降本 11%?
  • Spring IoC的实现机制是什么?
  • 耐用折叠屏手机推荐:三星Galaxy Z TriFold如何破解“折痕与耐用”难题?
  • 前端技术风险防控:以防为主,防控结合
  • 给女神发“在吗”,她回了个表情包是几个意思?—— 硬核探讨TCP 三次握手