Python安装PIL库:为什么现在应该装Pillow
解答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。
为了让无数依赖 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 还有以下核心的技术考量:
- 解决编译与二进制分发问题:原始 PIL 仅提供源码或老旧的 Windows 安装包,安装时需要在本地编译 C 扩展,极易因为缺失
libjpeg或zlib开发头文件而编译失败。Pillow 为 Windows、macOS 和主流 Linux 平台提供了官方预编译的 Wheel 二进制包,开箱即用。 - 修复已知的严重安全漏洞:图像解析属于高危操作,老旧的 PIL 中存在大量因内存溢出、越界读取引起的远程代码执行或拒绝服务漏洞。Pillow 持续修复 CVE 漏洞并引入自动化模糊测试(Fuzzing)。
- 现代多媒体格式支持:移动互联网与前端开发广泛采用 WebP 等新一代压缩格式,这些在老旧 PIL 中均不受支持,只有 Pillow 提供原生编解码封装。
三、完整安装步骤与环境验证
安装 Pillow 的全过程分为安装依赖、验证安装和编写第一个脚本三个标准环节。
步骤 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 设置,确认是否指向了同一个虚拟环境。
五、核心结论总结
总结来说,“安装 Pillow,导入 PIL” 是 Python 图像处理领域长期以来的通用准则。理解包名分发层与代码命名空间层的解耦设计,能够帮助开发者在遇到相关环境配置或教程指引时,迅速做出准确的判断与操作。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









