Python安装PIL库:为什么现在应该装Pillow

Finn
Finn
发布时间:2026-11-15| 2人浏览过
原创

解答Python安装PIL库时的常见疑惑,详细说明PIL与Pillow的历史沿革、兼容关系、安装步骤、验证方法及常见报错排查。

如果你在运行 Python 脚本或跟着教程学习图像处理时遇到了 ModuleNotFoundError: No module named 'PIL' 报错,或者试图执行 pip install PIL 却提示找不到匹配版本,答案其实非常直接:在当今的 Python 环境中,你不应该也不可能直接安装名为 PIL 的包,正确的安装命令是 pip install Pillow,而在代码导入时依然写作 from PIL import Image。

一、PIL 与 Pillow 的渊源与本质差异

许多刚接触 Python 图像处理的开发者常对“明明代码里写的是 import PIL,安装时却叫 Pillow”感到困惑。这需要从两者的演变历史说起。

PIL(Python Imaging Library)是 Python 生态中最早也是最著名的图像处理标准库。然而,PIL 的官方维护在 2009 年发布的 1.1.7 版本后基本停止,且它从未官方支持过 Python 3。随着 Python 社区全面转向 Python 3,社区开发者基于 PIL 分叉(Fork)出了一个高度兼容的分支项目,并将其命名为 Pillow。

Python安装PIL库:为什么现在应该装Pillow
图1:PIL 与 Pillow 的演变关系、运行支持与生态更迭

为了让无数依赖 PIL 的历史代码无需修改就能继续跑在现代 Python 环境中,Pillow 在设计时做出了一个非常务实的技术决策:在安装包名称上使用 pillow,但在 Python 模块内部保留 PIL 作为顶级命名空间。

对比维度 原始 PIL (Python Imaging Library) 现代 Pillow
维护状态 2009 年停更,属于废弃项目 核心团队活跃维护,遵循安全响应与版本规划
Python 3 支持 不支持,无法在 Python 3 中编译或运行 完整支持各主流 Python 3 版本
安装包名称 PIL(在 PyPI 上已不可用) Pillow
代码导入方式 from PIL import Image from PIL import Image(完全兼容)
图像格式支持 仅支持传统格式(JPEG, PNG, GIF 等旧规范) 支持 WebP, AVIF, HEIF, modern TIFF 等现代格式及高位深

二、为什么现在必须装 Pillow 而不是 PIL

除了“PIL 已经停更”这个表面原因之外,在实际工程中选择 Pillow 还有以下核心的技术考量:

  1. 解决编译与二进制分发问题:原始 PIL 仅提供源码或老旧的 Windows 安装包,安装时需要在本地编译 C 扩展,极易因为缺失 libjpeg 或 zlib 开发头文件而编译失败。Pillow 为 Windows、macOS 和主流 Linux 平台提供了官方预编译的 Wheel 二进制包,开箱即用。
  2. 修复已知的严重安全漏洞:图像解析属于高危操作,老旧的 PIL 中存在大量因内存溢出、越界读取引起的远程代码执行或拒绝服务漏洞。Pillow 持续修复 CVE 漏洞并引入自动化模糊测试(Fuzzing)。
  3. 现代多媒体格式支持:移动互联网与前端开发广泛采用 WebP 等新一代压缩格式,这些在老旧 PIL 中均不受支持,只有 Pillow 提供原生编解码封装。
Python安装PIL库:为什么现在应该装Pillow
图2:外部包分发名称(Pillow)与内部顶级模块(PIL)之间的解耦映射关系

三、完整安装步骤与环境验证

安装 Pillow 的全过程分为安装依赖、验证安装和编写第一个脚本三个标准环节。

Python安装PIL库:为什么现在应该装Pillow
图3:从安装到业务调用的端到端标准操作步骤

步骤 1:执行安装命令

打开系统的终端(macOS/Linux 的 Terminal,Windows 的 PowerShell 或 CMD),在对应的 Python 环境中运行:

pip install pillow

如果由于网络原因下载较慢,可以使用国内镜像源进行加速:

pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple

步骤 2:验证安装状态

安装完成后,无需创建脚本文件,可以直接在终端执行以下单行命令验证模块是否可用:

python -c "import PIL; print('PIL module location:', PIL.__file__); import PIL.Image; print('Pillow Version:', PIL.__version__)"

终端返回示例如下(实际版本号和路径依系统环境而异):

PIL module location: /usr/local/lib/python3.10/site-packages/PIL/__init__.py
Pillow Version: 10.4.0

步骤 3:编写最小可运行示例

在项目中创建一个 demo.py 文件,通过 Pillow 动态生成一张测试图片并保存:

from PIL import Image, ImageDraw

# 创建一张 400x200 像素、工程蓝背景的图像
img = Image.new("RGB", (400, 200), color="#345E82")

# 在图像上简单绘制几何图形
draw = ImageDraw.Draw(img)
draw.rectangle([(20, 20), (380, 180)], outline="#AD8060", width=3)

# 保存到本地文件
img.save("output_test.png")
print("测试图片已成功生成:output_test.png")

运行 python demo.py,若当前目录下生成了名为 output_test.png 的文件,说明图像处理库已完全配置就绪。

四、常见安装故障排查

在实际操作过程中,初学者通常会遭遇两类典型问题:

1. 误装了废弃的 PIL 包导致冲突

部分老旧环境可能通过源码残留了旧版文件。如果环境中曾尝试编译安装旧版,可能导致符号冲突或 AttributeError。正确的清理与重装流程如下:

pip uninstall PIL Pillow
pip install pillow

2. 多 Python 环境(虚拟环境)路径不一致

很多开发者在终端执行 pip install pillow 成功,但启动 VS Code 或 PyCharm 运行代码时依然报 ModuleNotFoundError: No module named 'PIL'。这是因为终端中的 pip 所在环境与编辑器配置的 Python 解释器不一致。

排查建议:在终端中使用 python -m pip install pillow,确保安装行为绑定在当前所调用的 python 可执行文件上;在集成开发环境(IDE)中检查当前项目的 Python Interpreter 设置,确认是否指向了同一个虚拟环境。

五、核心结论总结

Python安装PIL库:为什么现在应该装Pillow
图4:核心要点快速备忘参考

总结来说,“安装 Pillow,导入 PIL” 是 Python 图像处理领域长期以来的通用准则。理解包名分发层与代码命名空间层的解耦设计,能够帮助开发者在遇到相关环境配置或教程指引时,迅速做出准确的判断与操作。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。