Pillow 使用源代码构建

2021-07-06 17:39 更新

从PyPI下载并提取源代码压缩文件

外部资源库

您无需安装所有支持的外部资源库即可使用 Pillow 的基本功能。默认情况下需要Zlib和libjpeg。

我们的Docker 镜像存储库中有 Dockerfiles用于安装某些操作系统的依赖项。

Pillow 的许多功能都需要外部库:

  • libjpeg ​提供jpeg功能。
    • Pillow 已经通过libjpeg版本 6b , ​8 ​, 9-9d 和libjpeg-turbo版本 8 的测试
    • 从 Pillow 3.0.0开始,默认情况下需要libjpeg,但可以使用​ --disable-jpeg​参数禁用 。
  • zlib ​提供对压缩PNG的访问
    • 从 Pillow 3.0.0开始,默认情况下需要zlib,但可以使用 ​--disable-zlib ​参数禁用。
  • libtiff ​提供压缩的TIFF功能
    • Pillow 已经过libtiff版本 3.x 和 4.0-4.1的测试。
  • libfreetype ​提供与类型相关的服务
  • littlecms​ 提供颜色管理
    • Pillow版本2.2.1及以下使用liblcms1,Pillow2.3.0及以上使用liblcms2。 使用1.19 和 2.7-2.11 进行测试。
  • libwebp ​提供WebP格式。
    • Pillow 已经过 0.1.3版本的测试, 它不能读取透明的WebP文件。0.3.0 及以上版本支持透明度。
  • tcl/tk ​提供对tkinter位图和照片图像的支持。
  • openjpeg ​提供jpeg 2000功能。
    • Pillow 已经用 openjpeg 2.0.02.1.02.3.12.4.0进行了测试。
    • Pillow 不能支持较早的 1.5 与Debian Jessie一起发行的系列。
  • libimagequant ​提供改进的颜色量化
    • Pillow 已通过libimagequant 2.6-2.15.1测试
    • Libimagequant 获得 GPLv3 许可,比 Pillow 许可更严格,因此我们不会分发启用了 libimagequant 支持的二进制文件。
  • libraqm ​提供复杂的文本布局支持。
    • libraqm 提供双向文本支持(使用 FriBiDi)、整形(使用 HarfBuzz)和适当的脚本项。因此,Raqm 可以支持 Unicode 涵盖的大多数书写系统。
    • libraqm依赖于以下库:freetype、harfbuzz、fribidi,如果您的系统中没有可用的软件包,请确保在安装libraqm之前安装它们。
    • 没有libraqm,不支持设置文本方向或字体功能。
    • libraqm动态加载在bendle 5.0.0及更高版本中,因此如果安装了所有库,则支持可用。Windows支持:Raqm不包括在预构建的轮子中
  • libxcb ​提供Grab Screenx11支持。

安装先决条件后,运行:

python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow

如果先决条件安装在您机器的标准库位置(例如/usr/usr/local),则不需要额外的配置。如果它们安装在非标准位置,您可能需要通过编辑setup.py或 setup.cfg或通过在命令行上添加环境变量来配置 ​setuptools ​以使用这些位置:

CFLAGS="-I/usr/pkg/include" python3 -m pip install --upgrade Pillow

如果 Pillow 之前在没有所需的先决条件的情况下构建,则可能需要手动清除 pip 缓存或使用--no-cache-dir选项强制构建没有缓存的构建,以使用新安装的外部库强制构建。

构建选项

  • 环境变量:MAX_CONCURRENCY=n. Pillow 可以使用多处理来构建扩展。设置MAX_CONCURRENCY 来设置要使用的 CPU 数量,或者可以通过使用设置 1 来禁用并行构建。默认情况下,它使用 4 个 CPU,或者如果 4 个不可用,则尽可能多地使用。

  • 构建参数:--disable-zlib--disable-jpeg--disable-tiff--disable-freetype--disable-lcms--disable-webp--disable-webpmux--disable-jpeg2000--disable-imagequant--disable-xcb. 即使构建机器上存在开发库,也禁用构建相应的功能。

  • 构建参数:--enable-zlib--enable-jpeg--enable-tiff--enable-freetype--enable-lcms--enable-webp--enable-webpmux--enable-jpeg2000--enable-imagequant--enable-xcb. 要求构建相应的功能。如果未找到库,构建将引发异常。Webpmux(WebP 元数据)依赖于 WebP 支持。Tcl 和 Tk 也必须一起使用。

  • 构建参数: ​--vendor-raqm --vendor-fribidi​这些参数用于编译 libraqm 的修改版本和在运行时动态加载 libfribidi 的 shim。这些用于编译标准的Pillow wheels。编译 libraqm 需要符合 C99 的编译器。

  • 构建参数:--disable-platform-guessing. 对于在环境变量(例如 Buildroot)中配置正确路径的自动构建系统,跳过所有依赖于平台的猜测包括和库目录。

  • 构建参数:--debug. 向包含和库搜索过程添加调试标志,以将所有搜索和找到的路径转储到标准输出。

示例用法:

MAX_CONCURRENCY=1 python3 setup.py build_ext --enable-[feature] install

或使用 pip:

python3 -m pip install --upgrade Pillow --global-option="build_ext" --global-option="--enable-[feature]"

在 macOS 上构建

编译 Pillow 部分需要 Xcode 命令行工具。这些工具是通过命令行运行​xcode-select --install​来安装的。即使您安装了完整的 Xcode 包,也需要命令行工具。在使用这些工具之前,可能需要运行sudo xcodebuild -license以接受许可证。

安装外部库的最简单方法是通过Homebrew。安装 Homebrew 后,运行:

brew install libtiff libjpeg webp little-cms2Copy to clipboard

要在 macOS 上安装 libraqm,请使用 Homebrew 安装其依赖项:

brew install freetype harfbuzz fribidi

然后看depends/install_raqm_cmake.sh安装libraqm。

现在安装 Pillow:

python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow

或从未压缩的源目录中:

python3 setup.py install

在 Windows 上构建

 我们建议您使用 PyPI 中的预制wheels。如果您想手动编译 Pillow,您可以使用winbuildCI 测试和开发目录中的构建脚本 。这些脚本需要 Visual Studio 2017 或更新版本和 NASM。

使用 MSYS2/MinGW 在 Windows 上构建

要使用 MSYS2 构建 Pillow,请确保您运行MSYS2 MinGW 32 位或 MSYS2 MinGW 64 位控制台,而不是 直接运行MSYS2

下面的说明针对的64位版本,对于32位的替换的所有匹配mingw-w64-x86_64-mingw-w64-i686-

确保你安装了 Python 和 GCC:

pacman -S \
    mingw-w64-x86_64-gcc \
    mingw-w64-x86_64-python3 \
    mingw-w64-x86_64-python3-pip \
    mingw-w64-x86_64-python3-setuptools

先决条件安装在MSYS2 MinGW 64 位上:

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

现在安装 Pillow:

python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow

在 FreeBSD 上构建

仅测试了 FreeBSD 10 和 11

确保安装了 Python 的开发库:

sudo pkg install python3

FreeBSD 10 或 11上安装必备安装包:

sudo pkg install jpeg-turbo tiff webp lcms2 freetype2 openjpeg harfbuzz fribidi libxcb

然后看depends/install_raqm_cmake.sh安装libraqm。

在 Linux 上构建

如果您没有从源代码构建 Python,请确保安装了 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

redhat-rpm-config​ 在Fedora 23 上是必须的,但更早的版本不需要。

Ubuntu 16.04 LTS - 20.04 LTS 安装之前需要先安装的包有:

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

然后看depends/install_raqm.sh安装libraqm。

在最近的Red HatCentOSFedora安装之前需要先安装的包有:

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

请注意,包管理器可能是 yum 或 DNF,具体取决于确切的发行版。

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

在 Android 上构建

已为 Termux 环境中的编译添加了基本的 Android 支持。可以通过以下方式安装依赖项:

pkg install -y python ndk-sysroot clang make \
    libjpeg-turbo

这已在 x86 上 ChromeOS 上的 Termux 应用程序中进行了测试。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号