Azure DevOps Pipeline部署Python函数应用时Playwright安装失败求助
部署含Playwright的Python Azure Function App V2至Azure DevOps Pipeline的解决方案
问题描述
尝试通过Azure DevOps Pipeline部署Python Azure Function App V2,VS Code部署正常且已添加所需的2个应用设置,但Pipeline部署时始终无法正确安装Playwright,报错:
Looks like Playwright was just installed or updated. Please run the following command to download new browsers: playwright install <3 Playwright Team.
尝试添加POST_BUILD_COMMAND应用设置仅在VS Code部署时生效,Pipeline中无效。当前使用的YAML配置如下:
pool: vmImage: ubuntu-latest steps: - task: UsePythonVersion@0 displayName: "Set Python version to 3.10" inputs: versionSpec: '3.10' architecture: 'x64' - bash: | if [ -f extensions.csproj ] then dotnet build extensions.csproj --output ./bin fi pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt - bash: | sudo mkdir -p /home/site/wwwroot PLAYWRIGHT_BROWSERS_PATH=/home/site/wwwroot python -m pip install playwright PLAYWRIGHT_BROWSERS_PATH=/home/site/wwwroot /opt/hostedtoolcache/Python/3.10.13/x64/bin/python3.10 -m playwright install chromium displayName: 'Install Playwright' - task: ArchiveFiles@2 displayName: "Archive files" inputs: rootFolderOrFile: "$(System.DefaultWorkingDirectory)" includeRootFolder: false archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip" - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip' artifactName: 'drop'
解决方案
1. 调整Pipeline YAML配置
核心问题是浏览器二进制文件未被正确打包进部署包,且环境变量未全局生效。修改后的YAML如下:
pool: vmImage: ubuntu-latest steps: - task: UsePythonVersion@0 displayName: "Set Python version to 3.10" inputs: versionSpec: '3.10' architecture: 'x64' - bash: | # 全局设置Playwright浏览器安装路径到依赖目录,确保能被打包 export PLAYWRIGHT_BROWSERS_PATH="$(System.DefaultWorkingDirectory)/.python_packages/lib/site-packages/playwright/browsers" # 构建扩展项目(如果存在) if [ -f extensions.csproj ]; then dotnet build extensions.csproj --output ./bin fi # 安装所有依赖(包括requirements.txt中的playwright) pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt # 安装Chromium浏览器 python -m playwright install chromium displayName: 'Install dependencies and Playwright browsers' - task: ArchiveFiles@2 displayName: "Archive files" inputs: rootFolderOrFile: "$(System.DefaultWorkingDirectory)" includeRootFolder: false archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip" # 确保浏览器文件被包含,排除不必要的目录 includeFilePatterns: | **/* !.git/**/* !__pycache__/**/* - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip' artifactName: 'drop'
关键改动说明:
- 把
PLAYWRIGHT_BROWSERS_PATH设置到依赖包目录下,确保浏览器文件能被一起归档 - 将Playwright安装合并到依赖安装步骤,避免版本不一致和路径混乱
- 明确归档时包含所有必要文件,排除冗余目录
2. 配置Function App应用设置
部署完成后,在Azure Portal的Function App应用设置中添加/确认以下配置:
PLAYWRIGHT_BROWSERS_PATH: 对应运行环境路径,Linux环境填/home/site/wwwroot/.python_packages/lib/site-packages/playwright/browsers,Windows环境填D:\home\site\wwwroot\.python_packages\lib\site-packages\playwright\browsersWEBSITE_RUN_FROM_PACKAGE: 设置为1,确保应用从部署包运行,避免文件权限问题
内容的提问来源于stack exchange,提问作者Dinerz
相关产品推荐
相关产品推荐

