Python PIL已停更?为什么现在都推荐安装Pillow

宋时安
宋时安
发布时间:2026-11-01| 5人浏览过
原创

深入解析Python图像处理库PIL停止更新的历史背景,阐述为什么现代Python项目统一推荐使用Pillow,并提供从安装、验证到基本操作的实用指南。

答案是确定的:原版 PIL(Python Imaging Library)确实早已停止更新。官方团队在 2009 年发布了最终版本 1.1.7 后便不再维护,且原版 PIL 从未正式支持过 Python 3。现在社区与工业界所推荐、依赖的“PIL”,实际上全部是由开源社区维护的友好分支(Fork)——Pillow。Pillow 不仅在底层提供了对 Python 3 系列版本的长期支持与及时的漏洞修补,还在代码层面 100% 保持了旧版 PIL 的导入接口。理解两者的渊源与正确的安装方式,是每位 Python 开发者避开环境报错的第一步。

Python PIL已停更?为什么现在都推荐安装Pillow
图 1:PIL 与 Pillow 的渊源与发展关系对比图

一、PIL 的停更背景与 Pillow 的诞生

PIL 全称为 Python Imaging Library,最初由 Fredrik Lundh 及其团队(Secret Labs AB)开发。在 Python 2 普及的年代,PIL 凭借精简的接口和对常见图片格式的支持,几乎垄断了 Python 领域的图像处理需求。

然而,从 2009 年发布 1.1.7 版本后,官方团队逐渐停止了对 PIL 的实质性维护与版本迭代。与此同时,Python 社区正面临向 Python 3 大步迈进的关键转折期。原版 PIL 的底层代码深度绑定了 Python 2 的 C-API 和字符串/字节处理方式,在没有官方迁移计划的情况下,开发者在 Python 3 中完全无法使用 PIL。

为了拯救庞大的图像处理生态,开发者 Alex Clark 与社区贡献者在 2010 年创建了 Pillow 项目。Pillow 作为一个“友好分支”(Friendly Fork),明确了三大目标:

  • 彻底解决跨版本兼容:全面重构 C 扩展,让库能够无缝运行在现代 Python 3 环境中;
  • 保持现有代码零修改迁移:完全继承 PIL 顶级模块命名,已有代码无需重构;
  • 建立规范的发布与安全维护周期:定期合并外部安全漏洞补丁,适配不同操作系统的二进制打包格式(Wheel)。

二、为什么代码写“import PIL”,安装却要“pip install Pillow”?

很多刚接触图像处理的开发者会遇到一个令人困惑的现象:各类教程中的示例代码普遍写作 from PIL import Image,但如果直接在命令行执行 pip install PIL,终端却会直接报错失败。

关键原因:PyPI(Python官方包索引)上的包名称是 Pillow,而安装后在 Python 代码中注入的顶级模块命名空间仍然是 PIL。这是 Pillow 团队为了让成千上万的历史项目无需修改源码而做出的兼容性设计。

当执行 pip install PIL 时,通常会出现以下两种情况:

  1. 找不到匹配分发包:PyPI 上的旧版 PIL 分发文件早在数年前就被归档,现代 pip 工具会直接返回 ERROR: Could not find a version that satisfies the requirement PIL;
  2. 编译失败报错:即使通过某些镜像拉取到历史遗留源码包,由于缺少适配 Python 3 的头文件,C 编译器会抛出海量语法错误而中断。

因此,正确的操作始终是:终端安装 Pillow,代码中导入 PIL。

Python PIL已停更?为什么现在都推荐安装Pillow
图 2:Pillow 安装、代码导入与环境验证全流程

三、Pillow 基础图像操作实战

安装完成后,我们可以通过一个精简脚本验证 Pillow 的功能。以下示例展示了图像读取、尺寸调整、灰度处理以及保存为 WebP 格式的完整过程:

from PIL import Image

def process_demo_image(input_path, output_path):
    # 1. 打开图片文件
    with Image.open(input_path) as img:
        print(f"原图格式: {img.format}, 尺寸: {img.size}, 模式: {img.mode}")
        
        # 2. 等比例缩小到最大宽度 800 像素
        target_width = 800
        if img.width > target_width:
            target_height = int(img.height * (target_width / img.width))
            resized_img = img.resize((target_width, target_height), Image.Resampling.LANCZOS)
        else:
            resized_img = img.copy()
            
        # 3. 转换为灰度图像
        gray_img = resized_img.convert("L")
        
        # 4. 保存为高效的 WebP 格式
        gray_img.save(output_path, "WEBP", quality=85)
        print(f"图片处理完成并已保存至: {output_path}")

# 执行调用示例
if __name__ == "__main__":
    process_demo_image("example.jpg", "example_output.webp")

在上面的代码中,Image.Resampling.LANCZOS 是 Pillow 9.x 及以后版本推荐使用的高质量插值枚举,旧版 PIL 时代的 Image.ANTIALIAS 已在 Pillow 10.0.0 中正式移除。这也是使用新库时需要注意的一处 API 更新细节。

四、PIL 与 Pillow 的核心维度对照

为了让大家对两者的技术规格与生态支持有更清晰的量化认知,我们将核心差异归纳在以下对比图及表格中:

Python PIL已停更?为什么现在都推荐安装Pillow
图 3:PIL 与 Pillow 核心属性横向对比一览

从上面的对比可以清楚地看出:

  • 稳定性与兼容性:Pillow 拥有完善的持续集成与自动化测试矩阵,覆盖 Windows、macOS 以及主流 Linux 发行版,支持从 x86_64 到 ARM64(如 Apple Silicon)的各种硬件平台。
  • 安全防御:图像解码是系统安全的高发区(如畸形文件触发的缓冲区溢出)。传统 PIL 停更后积累了数十个已公开的 CVE 漏洞;而 Pillow 团队始终与 Python 安全工作组协同,保持对畸形文件解析漏洞的极速修复。

五、常见问题排查与避坑指南

1. 报错 AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'

这是升级 Pillow 10.0.0 之后最常见的问题。历史代码中常用的 Image.ANTIALIAS 已被完全移除。解决方法是将其替换为新的枚举成员:

# 旧写法 (Pillow < 10.0.0)
img.resize((200, 200), Image.ANTIALIAS)

# 现代写法 (推荐,向前兼容且语义明确)
img.resize((200, 200), Image.Resampling.LANCZOS)

2. 为什么在 Linux 生产环境中处理特定格式会报错?

虽然通过 pip 安装的官方 Wheel 包已经内置了常用的 libjpeg 和 zlib 动态库,但如果在极简 Docker 镜像(如 python:3.11-alpine 或精简版 debian)中以 --no-binary 方式强行从源码编译安装 Pillow,系统缺少底层的 C 依赖库会导致安装失败。在 Debian/Ubuntu 下可提前补齐基础库:

sudo apt-get update
sudo apt-get install -y libjpeg-dev zlib1g-dev libpng-dev

3. 项目依赖清单(requirements.txt)的正确写法

在团队协作或部署部署脚本中,务必将依赖包名称写为 Pillow 而不是 PIL,同时建议锁定稳定版本范围:

# 规范书写
Pillow>=10.0.0,<11.0.0

# 错误写法 (会导致部署环境 pip install 失败)
# PIL==1.1.7
Python PIL已停更?为什么现在都推荐安装Pillow
图 4:Python 图像开发核心要点与排错决策总结

总结

“Python PIL 已停更”是事实,但这并不意味着 Python 失去了处理图像的能力。相反,Pillow 作为继承原版 PIL 遗产的现代开源项目,不仅让历史代码得以无缝过渡到 Python 3,更通过持续十余年的活跃迭代,在性能优化、格式兼容和系统安全上为 Python 开发者构筑了坚固的基石。在日后的项目开发中,只需牢记“终端安装 Pillow,代码导入 PIL”,就能轻松享受到这一成熟库带来的全部能力。

相关标签:

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

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 算法库。