当前位置:首页>python>创建一个python 13的playwright的docker镜像

创建一个python 13的playwright的docker镜像

  • 2026-08-28 13:42:41
创建一个python 13的playwright的docker镜像

由于playwright是微软的,为了保证最大的兼容性,用微软使用的操作系统为基础镜像。所以选择使用ubuntu 24.04 LTS, 但是ubuntu 24.04 LTS上是不带python 3.13的,它内置的是python 3.12, 需要自己编译,那太麻烦,于是找一个现成的docker镜像,叫做noble-python这个镜像的3.13版本。

然后常规操作:

更改ubuntu的源为国内的,比如阿里云,注意现在使用source文件,不使用list文件

创建一个虚拟环境

在虚拟环境中安装requirements.txt其中包含playwright。

然后安装playwright需要的浏览器内核

可以通过PLAYWRIGHT_BROWSERS_PATH环境变量指定内核的安装位置,不然会安装到~/.cache下

可以使用代理加速下载,不然会很慢。

可以使用--with-deps和--dry-run看看,它真的会安装一些什么东西。

(venv) root@playwright:/data# https_proxy=http://172.16.8.86:10808 playwright install --with-deps  --dry-run

sh -c "apt-get update&& apt-get install -y --no-install-recommends libasound2t64 libatk-bridge2.0-0t64 libatk1.0-0t64 libatspi2.0-0t64 libcairo2 libcups2t64 libdbus-1-3 libdrm2 libgbm1 libglib2.0-0t64 libnspr4 libnss3 libpango-1.0-0 libx11-6 libxcb1 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxkbcommon0 libxrandr2 libcairo-gobject2 libfontconfig1 libfreetype6 libgdk-pixbuf-2.0-0 libgtk-3-0t64 libpangocairo-1.0-0 libx11-xcb1 libxcb-shm0 libxcursor1 libxi6 libxrender1 gstreamer1.0-libav gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good libicu74 libatomic1 libenchant-2-2 libepoxy0 libevent-2.1-7t64 libflite1 libgles2 libgstreamer-gl1.0-0 libgstreamer-plugins-bad1.0-0 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 libgtk-4-1 libharfbuzz-icu0 libharfbuzz0b libhyphen0 libjpeg-turbo8 liblcms2-2 libmanette-0.2-0 libopus0 libpng16-16t64 libsecret-1-0 libvpx9 libwayland-client0 libwayland-egl1 libwayland-server0 libwebp7 libwebpdemux2 libwoff1 libxml2 libxslt1.1 libx264-164 libavif16 xvfb fonts-noto-color-emoji fonts-unifont xfonts-cyrillic xfonts-scalable fonts-liberation fonts-ipafont-gothic fonts-wqy-zenhei fonts-tlwg-loma-otf fonts-freefont-ttf"

Chrome for Testing 145.0.7632.6 (playwright chromium v1208)

Install location:    /data/playwright_browsers/chromium-1208

Download url:        https://cdn.playwright.dev/chrome-for-testing-public/145.0.7632.6/linux64/chrome-linux64.zip

Chrome Headless Shell 145.0.7632.6 (playwright chromium-headless-shell v1208)

Install location:    /data/playwright_browsers/chromium_headless_shell-1208

Download url:        https://cdn.playwright.dev/chrome-for-testing-public/145.0.7632.6/linux64/chrome-headless-shell-linux64.zip

Firefox 146.0.1 (playwright firefox v1509)

Install location:    /data/playwright_browsers/firefox-1509

Download url:        https://cdn.playwright.dev/dbazure/download/playwright/builds/firefox/1509/firefox-ubuntu-24.04.zipDownload fallback 1: https://playwright.download.prss.microsoft.com/dbazure/download/playwright/builds/firefox/1509/firefox-ubuntu-24.04.zipDownload fallback 2: https://cdn.playwright.dev/builds/firefox/1509/firefox-ubuntu-24.04.zip

WebKit 26.0 (playwright webkit v2248)

Install location:    /data/playwright_browsers/webkit-2248

Download url:        https://cdn.playwright.dev/dbazure/download/playwright/builds/webkit/2248/webkit-ubuntu-24.04.zipDownload fallback 1: https://playwright.download.prss.microsoft.com/dbazure/download/playwright/builds/webkit/2248/webkit-ubuntu-24.04.zipDownload fallback 2: https://cdn.playwright.dev/builds/webkit/2248/webkit-ubuntu-24.04.zip

FFmpeg (playwright ffmpeg v1011)

Install location:    /data/playwright_browsers/ffmpeg-1011

Download url:        https://cdn.playwright.dev/dbazure/download/playwright/builds/ffmpeg/1011/ffmpeg-linux.zipDownload fallback 1: https://playwright.download.prss.microsoft.com/dbazure/download/playwright/builds/ffmpeg/1011/ffmpeg-linux.zipDownload fallback 2: https://cdn.playwright.dev/builds/ffmpeg/1011/ffmpeg-linux.zip

然后去掉--dry-run进行真实安装,安装完成后,可以再跑一次安装以确认安装确实成功了。因为已经安装过,它会自动检查并跳过。

真正符合工程实践的 pip / venv 依赖管理 Best Practice v2(已修正 lock 概念 + pip-tools 崩溃问题)。


🧱 1️⃣ 虚拟环境(基础但决定稳定性)

python3 -m venv venv

source venv/bin/activate

pip install -U pip setuptools wheel

Bash

原则

原因

永远使用 venv

防止系统包污染

先升级 pip / setuptools / wheel

避免旧构建系统导致编译失败


⚠️ 2️⃣ pip 与 pip-tools 版本兼容性(新坑)

你遇到的错误本质:

AttributeError: 'PackageFinder' object has no attribute 'allow_all_prereleases'

Plain Text

组件

问题

pip ≥ 25.3

重构内部 API

pip-tools 旧版本

依赖 pip 私有 API → 崩溃

✅ 生产可用修复

pip install "pip<25.3"

pip install -U pip-tools

Bash

👉 pip-tools 不是独立工具,它强依赖 pip 内部结构

👉 这是 Python 依赖生态的“隐藏地雷”


📦 3️⃣ 正确的依赖分层(非常重要)

你关注的顶层依赖:

FastAPI

Uvicorn[standard]

Playwright

Plain Text

我们要分成 两类文件:

文件

作用

是否手写

requirements.in

顶层依赖声明

✅

requirements.lock

完整可复现锁文件

❌ 自动生成


✍️ 4️⃣ 正确流程(标准工业做法)

Step 1 — 写顶层依赖

echo -e "fastapi\nuvicorn[standard]\nplaywright" > requirements.in

Bash


Step 2 — 编译锁文件(真正的 lock)

pip-compile --generate-hashes -o requirements.lock requirements.in

Bash

生成内容特点:

特性

说明

固定所有子依赖版本

不再漂移

带 SHA256 哈希

防供应链攻击

100% 可复现

CI / Docker 稳定


🚫 为什么 pip freeze ≠ lock 文件

pip freeze

pip-compile

记录“当前环境状态”

计算“依赖闭包”

可能带入临时调试包

只保留依赖树

不安全(无哈希)

安全(哈希校验)

不适合团队协作

生产标准

✔ 所以你说得对:

pip freeze 应该输出 requirements.txt,而不是 lock 文件


🚀 5️⃣ 安装依赖(部署 / 服务器)

pip install --require-hashes -r requirements.lock

Bash

这会:

  • 校验文件是否被篡改
  • 禁止安装未锁定版本

🔍 6️⃣ 冲突检测(CI 必做)

pip check

pip install pipdeptree

pipdeptree --warn fail

Bash


⛔ 7️⃣ 升级策略(避免你刚才的 starlette 冲突)

错误做法

正确做法

pip install -U starlette

❌

修改 requirements.in 后重新 compile

✅

升级流程:

vim requirements.in   # 改顶层版本

pip-compile --upgrade

Bash


🧨 8️⃣ 环境炸了最快恢复法

rm -rf venv

python3 -m venv venv

source venv/bin/activate

pip install -r requirements.lock

Bash

比排查冲突快得多。


🧠 9️⃣ Playwright 特别提示(你的栈里有它)

Playwright 不是纯 Python 依赖,还依赖浏览器系统库:

playwright install --with-deps

Bash

建议写进 Dockerfile,而不是运行时执行。


🧭 🔥 最终黄金规则(工程级)

规则

重要度

只手写 requirements.in

⭐⭐⭐⭐⭐

永远用 pip-compile 生成 lock

⭐⭐⭐⭐⭐

禁止 pip freeze 作为 lock

⭐⭐⭐⭐

升级只改顶层依赖

⭐⭐⭐⭐⭐

CI 必跑 pip check

⭐⭐⭐⭐

固定 pip 版本以兼容 pip-tools

⭐⭐⭐⭐


🎯 一句话总结

pip 是安装工具,pip-tools 才是依赖管理工具

稳定性的核心:

顶层声明 + 锁文件 + 哈希校验 + 可重建


最新文章

随机文章