Python图像处理库Pillow从源码编译安装指南

Python图像处理库Pillow从源码编译安装指南

Pillow Pillow 项目地址: https://gitcode.com/gh_mirrors/pil/Pillow

Pillow是Python生态中功能强大的图像处理库,作为PIL(Python Imaging Library)的分支项目,它提供了丰富的图像处理功能。本文将详细介绍如何从源码编译安装Pillow,帮助开发者根据自身需求定制安装。

一、编译前的准备工作

1.1 必须的外部依赖库

Pillow的核心功能依赖于多个外部库,其中zliblibjpeg是默认必须安装的:

  • libjpeg:提供JPEG图像格式支持

    • 支持版本:6b、8、9-9d以及libjpeg-turbo 8
    • 从Pillow 3.0.0开始成为默认必需,可通过-C jpeg=disable禁用
  • zlib:提供PNG压缩支持

    • 从Pillow 3.0.0开始成为默认必需,可通过-C zlib=disable禁用

1.2 可选的外部依赖库

根据项目需求,可选择性安装以下库以扩展Pillow功能:

| 库名称 | 功能描述 | 测试版本 | 特殊说明 | |----------------|----------------------------|-----------------------|----------------------------| | libtiff | TIFF压缩功能 | 3.x, 4.0-4.6.0 | | | libfreetype | 字体相关服务 | | | | littlecms | 色彩管理 | 1.19(lcms1), 2.7-2.16 | 2.3.0+使用lcms2 | | libwebp | WebP格式支持 | 0.3.0+支持透明 | 0.1.3不支持透明 | | openjpeg | JPEG 2000功能 | 2.0.0-2.5.2 | 不支持1.5系列 | | libimagequant | 改进的色彩量化 | 2.6-4.3 | GPLv3许可,不包含在二进制中 | | libraqm | 复杂文本布局支持 | | 依赖FreeType/HarfBuzz/FriBiDi | | libxcb | X11屏幕截图支持 | | |

二、各平台编译环境配置

2.1 Linux系统

基础开发环境安装

# 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 16.04-22.04完整依赖

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

Red Hat/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

2.2 macOS系统

  1. 安装Xcode命令行工具:
xcode-select --install
sudo xcodebuild -license
  1. 使用Homebrew安装依赖:
brew install libjpeg libtiff little-cms2 openjpeg webp
  1. libraqm依赖安装:
brew install freetype harfbuzz fribidi

2.3 Windows系统

推荐直接使用预编译的wheel包。如需手动编译:

  1. 需要Visual Studio 2017+和NASM
  2. 使用项目中的winbuild目录下的构建脚本

2.4 MSYS2/MinGW环境

64位环境配置

pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-python3 \
    mingw-w64-x86_64-python3-pip mingw-w64-x86_64-python3-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

重要提示

export SETUPTOOLS_USE_DISTUTILS=stdlib

三、安装Pillow

3.1 标准安装方式

python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow --no-binary :all:

3.2 自定义路径安装

若依赖库安装在非标准路径:

CFLAGS="-I/自定义路径/include" python3 -m pip install --upgrade Pillow --no-binary :all:

3.3 本地源码安装

  1. 下载并解压源码包
  2. 进入源码目录执行:
python3 -m pip install --upgrade pip
python3 -m pip install .

四、高级构建选项

Pillow提供多种构建配置选项:

  1. 并行编译控制

    MAX_CONCURRENCY=4 python3 -m pip install Pillow
    
  2. 功能启用/禁用

    python3 -m pip install Pillow -C jpeg=enable -C webp=disable
    
  3. 特殊构建模式

    # 动态加载fribidi
    python3 -m pip install Pillow -C raqm=vendor -C fribidi=vendor
    
    # 禁用平台猜测
    python3 -m pip install Pillow -C platform-guessing=disable
    
    # 调试模式
    python3 -m pip install Pillow -C debug=true
    

五、常见问题处理

  1. 清理构建缓存: 当更改依赖库后,建议使用--no-cache-dir选项强制重新构建。

  2. 版本兼容性

    • libraqm在Pillow 8.2.0+版本中采用动态加载方式
    • liblcms1仅支持Pillow 2.2.1及以下版本
  3. 许可问题: libimagequant采用GPLv3许可,官方二进制包不包含此功能支持

通过本文的详细指导,开发者可以根据实际需求灵活地编译安装Pillow,充分利用其强大的图像处理能力。建议根据项目需求选择必要的功能模块,避免不必要的依赖。

Pillow Pillow 项目地址: https://gitcode.com/gh_mirrors/pil/Pillow

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祖然言Ariana

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值