首页/云/Docker 容器速查/Python 镜像中的 pip 安装
镜像与构建107 条

Python 镜像中的 pip 安装

Python 依赖安装的常规写法:先复制 requirements 再安装,默认用 --no-cache-dir 避免 wheel 缓存写进镜像。

Docker 容器速查云更新于 2026-10-13

镜像里的 pip 安装

Python 项目在镜像里装依赖的常规写法是:先复制依赖清单再安装,默认加 --no-cache-dir 避免 wheel 缓存写进镜像。若改用缓存挂载加速,就不要加这个参数,两者同时出现会互相抵消。

基本信息

顺序先复制依赖清单再安装,最后复制源码
常规命令pip install --no-cache-dir -r requirements.txt
加速写法配合 RUN --mount=type=cache 时不要加 --no-cache-dir
可复现生产环境使用锁定版本的依赖清单或约束文件
解释器系统 Python 与虚拟环境不要混用

典型使用场景

  • 常规服务镜像:只装生产依赖,不带测试与调试包
  • 多阶段构建:构建阶段编译 wheel,运行阶段直接安装编译结果
  • 内网环境:指定镜像源与可信主机,让安装走内部制品库
  • 需要编译的依赖(带 C 扩展)先装构建工具,最终镜像不带工具链
  • 排查线上依赖版本与本地不一致:核对镜像里的依赖清单与锁定方式
  • 给命令行工具做镜像时用精简的依赖清单,控制镜像体积

示例

示例
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

# 用缓存挂载加速时不要再加 --no-cache-dir
RUN --mount=type=cache,target=/root/.cache/pip \
    pip install -r requirements.txt

# 内网源(按实际环境填写地址)
RUN pip install --no-cache-dir --index-url https://mirrors.example.com/pypi/simple -r requirements.txt

安装方式对照

写法效果适用场景
--no-cache-dir -r不保留 wheel 缓存常规生产镜像
缓存挂载 + -r复用下载缓存且不写进镜像构建频繁、依赖较多的项目
锁定版本的清单安装结果可复现生产环境必备
--user 安装装到用户目录无 root 权限的运行环境
不锁版本时同一份 Dockerfile 在不同时间可能装到不同依赖,问题难以复现,生产镜像应当基于锁定后的依赖清单构建。
系统 Python 与虚拟环境混用会让依赖位置混乱,镜像里保持单一安装方式,别一边用系统解释器一边又建虚拟环境。
需要编译的包会把构建工具链带进来,放进多阶段构建的构建阶段,运行阶段只带走编译好的产物与运行依赖。

易错点

  • 依赖未锁版本,同一 Dockerfile 在不同时间构建出不同结果,线上问题无法复现
  • 同时使用 --no-cache-dir 与缓存挂载,缓存永远不会被复用,加速完全失效
  • 既不加 --no-cache-dir 也不用缓存挂载,wheel 缓存直接留在镜像层里,体积明显变大
  • 用 root 装依赖后再切非 root 运行,模块路径与权限不匹配,应用启动即导入失败

数据来源与参考

  • Docker 官方文档:Python guide(docs.docker.com/language/python)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌