Python-Pillow项目源码编译安装指南
Pillow Python Imaging Library (Fork) 项目地址: https://gitcode.com/gh_mirrors/pi/Pillow
前言
Python-Pillow(简称Pillow)是Python生态中最重要的图像处理库之一,它是PIL(Python Imaging Library)的一个友好分支。虽然大多数用户可以直接通过pip安装预编译的二进制包,但在某些特殊场景下(如自定义功能、特定平台支持或开发调试),从源码编译安装Pillow是必要的选择。本文将详细介绍如何在不同操作系统下完成Pillow的源码编译安装过程。
外部依赖库概述
Pillow的功能模块化设计意味着它依赖多个外部图像处理库来实现不同格式的支持。值得注意的是:
-
基础依赖(默认必需):
- zlib:用于PNG压缩支持
- libjpeg:用于JPEG格式支持
-
可选依赖(按需安装):
- libtiff:TIFF格式支持
- libfreetype:字体渲染支持
- littlecms:色彩管理
- libwebp:WebP格式支持
- openjpeg:JPEG 2000支持
- libimagequant:改进的颜色量化
- libraqm:复杂文本布局(需要HarfBuzz和FriBiDi)
- libxcb:X11屏幕截图
- libavif:AVIF格式支持(需要额外编解码器如rav1e/dav1d)
各平台安装指南
Linux系统
开发环境准备
首先需要安装Python开发头文件:
# Debian/Ubuntu
sudo apt-get install python3-dev python3-setuptools
# Fedora
sudo dnf install python3-devel redhat-rpm-config
# Alpine
sudo apk add python3-dev py3-setuptools
完整依赖安装
# Ubuntu/Debian
sudo apt-get install libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev \
libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python3-tk \
libharfbuzz-dev libfribidi-dev libxcb1-dev
# RedHat/CentOS/Fedora
sudo dnf install libtiff-devel libjpeg-devel openjpeg2-devel zlib-devel \
freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel \
harfbuzz-devel fribidi-devel libraqm-devel libimagequant-devel libxcb-devel
# Alpine
sudo apk add tiff-dev jpeg-dev openjpeg-dev zlib-dev freetype-dev lcms2-dev \
libwebp-dev tcl-dev tk-dev harfbuzz-dev fribidi-dev libimagequant-dev \
libxcb-dev libpng-dev
macOS系统
- 安装Xcode命令行工具:
xcode-select --install
sudo xcodebuild -license
- 通过Homebrew安装依赖:
brew install libavif libjpeg libraqm libtiff little-cms2 openjpeg webp
# 如需完整AVIF支持
brew install aom dav1d rav1e svt-av1
Windows系统
推荐两种编译方式:
-
Visual Studio方式:
- 需要VS2017+和NASM
- 使用项目中的
winbuild
目录下的构建脚本
-
MSYS2/MinGW方式:
# 64位环境
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-python \
mingw-w64-x86_64-python-pip mingw-w64-x86_64-python-setuptools
# 安装依赖库
pacman -S mingw-w64-x86_64-libjpeg-turbo mingw-w64-x86_64-zlib \
mingw-w64-x86_64-libtiff mingw-w64-x86_64-freetype \
mingw-w64-x86_64-lcms2 mingw-w64-x86_64-libwebp \
mingw-w64-x86_64-openjpeg2 mingw-w64-x86_64-libimagequant \
mingw-w64-x86_64-libraqm mingw-w64-x86_64-libavif
其他系统
FreeBSD
sudo pkg install python3 jpeg-turbo tiff webp lcms2 freetype2 \
openjpeg harfbuzz fribidi libxcb libavif
Android (Termux环境)
pkg install -y python ndk-sysroot clang make libjpeg-turbo
编译安装步骤
- 从PyPI安装最新源码:
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow --no-binary :all:
- 如果依赖库安装在非标准路径:
CFLAGS="-I/自定义路径/include" python3 -m pip install --upgrade Pillow --no-binary :all:
- 从本地源码安装:
git clone <Pillow仓库>
cd Pillow
python3 -m pip install --upgrade pip
python3 -m pip install .
高级构建选项
Pillow提供多种构建配置选项:
- 并行编译:
python3 -m pip install Pillow -C parallel=4 # 使用4个CPU核心
- 功能控制:
# 强制启用/禁用特定功能
python3 -m pip install Pillow -C jpeg=enable -C webp=disable
- 特殊模式:
# 使用修改版libraqm
python3 -m pip install Pillow -C raqm=vendor -C fribidi=vendor
# 调试模式
python3 -m pip install Pillow -C debug=true
常见问题处理
-
缓存问题:如果之前构建失败,建议清除pip缓存或使用
--no-cache-dir
-
版本兼容性:
- libjpeg:推荐6b/8/9系列
- openjpeg:需要2.x系列,不支持1.5
- libavif:需要≥1.0.0
-
许可证注意:libimagequant使用GPLv3许可,预编译二进制包不包含此功能
结语
通过源码编译安装Pillow虽然步骤稍多,但能获得最灵活的功能配置和最佳的性能优化。建议开发者根据实际需求选择必要的功能模块进行编译,以平衡功能完整性和安装复杂度。对于生产环境,若无特殊需求,使用官方预编译的二进制包仍是推荐的首选方案。
Pillow Python Imaging Library (Fork) 项目地址: https://gitcode.com/gh_mirrors/pi/Pillow
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考