Pillow 使用源代码构建
从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.0、2.1.0、2.3.1和2.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-cms2
要在 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,您可以使用
winbuild
CI 测试和开发目录中的构建脚本 。这些脚本需要 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 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
请注意,包管理器可能是 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 应用程序中进行了测试。
更多建议: