ModuleNotFoundError: No module named ‘PIL’

这个报错出现在用 LiteLLM Proxy 转发 Ollama 视觉模型(VLM)图片请求时,底层缺少 Pillow 导致图片转换失败。优先检查运行 LiteLLM 的容器/虚拟环境中是否已安装 Pillow,尤其是官方 Docker 镜像的运行时依赖未包含它。

快速结论:这个报错出现在用 LiteLLM Proxy 转发 Ollama 视觉模型(VLM)图片请求时,底层缺少 Pillow 导致图片转换失败。优先检查运行 LiteLLM 的容器/虚拟环境中是否已安装 Pillow,尤其是官方 Docker 镜像的运行时依赖未包含它。

适用环境:LiteLLM Proxy v1.83.14-stable;官方容器镜像 docker.litellm.ai/berriai/litellm-database;容器内 Python 3.13(路径 /app/.venv);报错发生在调用 Ollama 原生 provider 的视觉路径。

最快修复方案:在容器终端里手动为 LiteLLM 的虚拟环境安装 Pillow:依次执行 /app/.venv/bin/python -m ensurepip --upgrade/app/.venv/bin/python -m pip install --upgrade pip/app/.venv/bin/python -m pip install Pillow。该步骤由 Issue 评论者实测有效,发帖人也确认手动装 Pillow 可解决。

注意事项:Issue 中提到正式修复尚未随版本发布,手动安装在容器重建/重启后会失效,属于临时绕过。Issue 评论里的根因分析指向 Pillow 未被放入 Docker 构建的运行时 extra,但该结论来自社区分析,官方是否按此修复未在讨论中确认;另一条评论建议改用 Ollama 的 OpenAI 兼容端点绕过原生转换路径,也仅作为替代方案。

问题场景

用户通过 LiteLLM Proxy 调用代理后的 Ollama 模型(示例为 gemma4:31b-it-q8_0),请求中携带图片,走的是 Ollama 的视觉多模态路径。此时 LiteLLM 需要对图片做转换,但环境中缺少 Pillow,导致请求直接失败并返回 500。

报错原文

Request Failed
Error Code: 500
Message: litellm.APIConnectionError: ollama image conversion failed please run `pip install Pillow`
Traceback (most recent call last):
  File "/app/.venv/lib/python3.13/site-packages/litellm/llms/ollama/common_utils.py", line 28, in _convert_image
    from PIL import Image
ModuleNotFoundError: No module named 'PIL'

During handling of the above exception, another exception occurred:
...
  File "/app/.venv/lib/python3.13/site-packages/litellm/llms/ollama/common_utils.py", line 30, in _convert_image
    raise Exception(
        "ollama image conversion failed please run `pip install Pillow`"
    )
Exception: ollama image conversion failed please run `pip install Pillow`

Received Model Group=gemma4:31b-it-q8_0
Available Model Group Fallbacks=None
LiteLLM Retried: 3 times, LiteLLM Max Retries: 3

原因分析

LiteLLM 的 Ollama 视觉路径在运行时会执行 from PIL import Image 来做图片转换,而运行环境里没有安装 Pillow,因此抛出 ModuleNotFoundError。Issue 中的社区排查(通过 git blame 定位到 PR #25007,Poetry 迁移到 uv 时对依赖分组的调整)认为,Pillow 最终只留在 CI 依赖组,没有进入 Docker 构建使用的运行时 extra(proxy、proxy-runtime、extra_proxy 等),所以官方镜像中自然没有 Pillow。该依赖分组结论属于社区分析,Issue 中未见官方确认;可以确定的是,当前容器镜像确实缺少 Pillow 且 Ollama 视觉路径会无条件导入它。

环境排查

  • LiteLLM 版本与部署方式:确认是否使用 v1.83.14-stable 或同类官方 Docker 镜像,镜像 tag 及构建时间会影响依赖内容。
  • 容器内 Python 环境:确认 LiteLLM 实际使用的解释器路径是否为 /app/.venv/bin/python(报错栈显示依赖安装在 /app/.venv/lib/python3.13/site-packages)。
  • Pillow 安装状态:在容器内检查 LiteLLM 虚拟环境中是否可以导入 PIL,而不是只检查系统 Python。
  • 调用路径:确认请求是通过 LiteLLM 的原生 ollama provider(含图片转换逻辑),还是走 Ollama 的 OpenAI 兼容端点。
  • 模型与请求内容:确认是否为带图片的 VLM 请求,纯文本请求不会触发该图片转换分支。

解决步骤

  1. 进入运行 LiteLLM 的容器终端(Docker 部署下即进入对应容器)。
  2. 在容器内执行 /app/.venv/bin/python -m ensurepip --upgrade,确保 LiteLLM 使用的虚拟环境自带可用的 pip。
  3. 执行 /app/.venv/bin/python -m pip install --upgrade pip 升级 pip。
  4. 执行 /app/.venv/bin/python -m pip install Pillow 安装 Pillow。
  5. 重新发起一次带图片的 Ollama VLM 请求验证。若仍失败,确认安装是否落在 LiteLLM 实际使用的同一虚拟环境中。

验证方法

再次通过 LiteLLM Proxy 向同一个 Ollama 视觉模型发送带图片的 chat 请求,确认不再返回 500,也不再出现 ollama image conversion failed please run pip install PillowModuleNotFoundError: No module named 'PIL'。也可在容器内用 LiteLLM 的虚拟环境执行导入检查,确认能够 from PIL import Image

参考来源

BerriAI/litellm #27183

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25112

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注