playwright 程序在虚拟环境运行正常,如何打包到其他电脑运行【解决chromium打包后找不到路径问题】

前置操作

在虚拟环境中,Chromium 的默认路径可能不适合打包。需要在 VSCode 中调整路径并为打包做准备。指定 Chromium路径设置环境变量:在 VSCode 的终端中,设置 PLAYWRIGHT_BROWSERS_PATH:

set PLAYWRIGHT_BROWSERS_PATH=0  # Windows
export PLAYWRIGHT_BROWSERS_PATH=0  # macOS/Linux

然后重新安装 Chromium:

playwright install chromium

进入正题

1. 理解打包后的结构

假设你使用 PyInstaller 打包生成了一个独立的 app.exe,运行时的文件结构可能是这样的(临时解压后的结构):

dist/
├── app.exe                    # 打包后的可执行文件(根目录)
├── site-packages/             # Python 依赖文件夹
│   ├── playwright/
│   │   ├── driver/
│   │   │   ├── package/
│   │   │   │   ├── .local-browsers/
│   │   │   │   │   ├── chromium-1140/
│   │   │   │   │   │   ├── chrome-win/
│   │   │   │   │   │   │   └── chrome.exe
│   │   └── ... (其他 Playwright 文件)
├── ... (其他依赖)
  • app.exe: 你的应用程序,位于根目录。
  • site-packages: 与 app.exe 同级,包含 Playwright 的依赖和 Chromium。
  • Chromium 路径: 相对于根目录为 site-packages\playwright\driver\package\.local-browsers\chromium-1140\chrome-win\chrome.exe。

当用户运行 app.exe 时,PyInstaller 会将所有文件解压到临时目录(例如 C:\Users\\AppData\Local\Temp\_MEIxxx),代码需要基于这个临时根目录找到 Chromium。


2. 修改代码以适配打包后的相对路径

我们需要:

  • 获取 app.exe 的运行时根目录(而不是开发时的脚本目录)。
  • 动态构造 Chromium 的路径。

以下是修改后的代码:

from playwright.sync_api import sync_playwright
import os
import sys
import platform

def get_chromium_path():
    # 如果是打包后的 exe,获取临时根目录;否则使用脚本所在目录
    if getattr(sys, 'frozen', False):  # 检查是否为 PyInstaller 打包环境
        base_path 

你可能感兴趣的:(自动化,python,chrome)