You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows镜像GitHub Actions中通过Chocolatey安装ImageMagick后无法使用问题

问题根因

这个问题是GitHub Actions Windows运行器的三个常见机制导致的:

  1. Windows默认自带的PowerShell 5.1版本中,Out-File命令写UTF8文件时默认会携带BOM头,而GITHUB_PATH文件要求使用无BOM的UTF8编码,带BOM的内容会导致GitHub解析路径失败,表面看起来PATH已经包含对应目录,实际解析后是无效路径。
  2. 部分Chocolatey包(比如你用的imagemagick.app)不会自动生成全局可调用的shim到Chocolatey的公共bin目录(该目录默认已经在系统PATH中),也不会主动把安装目录写入系统PATH。
  3. 写入GITHUB_PATH的路径只会在后续的Job步骤中加载到环境变量,当前步骤的会话无法读取,因此如果把验证命令和安装路径写入操作放在同一个步骤,就算路径配置正确也会找不到命令。

可行修复方案

方案1:换用带自动shim的Chocolatey包,无需手动修改PATH

不用手动处理路径添加,直接安装官方维护的imagemagick包,安装完成后就能直接调用magick命令:

- name: Install ImageMagick on Windows
  if: runner.os == 'Windows'
  run: choco install -y imagemagick --no-progress --installargs "ADD_APPLICATION_DIRECTORY_TO_PATH=1"

- name: Test ImageMagick on Windows
  if: runner.os == 'Windows'
  run: magick -version

这个方案同样适用于GraphicsMagick,直接安装graphicsmagick包即可。

方案2:修复手动添加PATH的编码问题

如果你坚持使用imagemagick.app包,修改写入GITHUB_PATH的编码为无BOM的UTF8,同时补全32位安装目录的扫描即可:

- name: Install ImageMagick on Windows
  if: runner.os == 'Windows'
  run: |
    choco install -y imagemagick.app --no-progress
    $magickPath = Get-ChildItem -Path "${env:ProgramFiles}", "${env:ProgramFiles(x86)}" | % { $_.FullName } | Select-String -Pattern "[\/\\]ImageMagick[^\/\\]*$" | Select-Object -First 1 -ExpandProperty Line
    # 使用无BOM的UTF8写入,兼容GitHub PATH解析规则
    $magickPath | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8NoBOM

- name: Test ImageMagick on Windows
  if: runner.os == 'Windows'
  run: magick -version

方案3:直接使用完整路径调用

如果不想处理PATH相关逻辑,直接把找到的可执行文件路径存为输出变量,后续步骤直接调用即可:

- name: Install ImageMagick on Windows
  if: runner.os == 'Windows'
  id: install-im
  run: |
    choco install -y imagemagick.app --no-progress
    $magickExe = Get-ChildItem -Path "${env:ProgramFiles}", "${env:ProgramFiles(x86)}" -Filter "magick.exe" -Recurse | Select-Object -First 1 -ExpandProperty FullName
    echo "magick-path=$magickExe" >> $env:GITHUB_OUTPUT

- name: Test ImageMagick on Windows
  if: runner.os == 'Windows'
  run: & "${{ steps.install-im.outputs.magick-path }}" -version

其他Windows包管理器选项

如果你不想用Chocolatey,也可以换用Windows官方的包管理器winget,GitHub Actions的Windows最新镜像已经默认预装了winget,安装命令如下:

run: winget install --id ImageMagick.ImageMagick --silent --accept-package-agreements --accept-source-agreements

内容的提问来源于stack exchange,提问作者Alexander Iurovetski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 19:36:04