Pillow 使用源代碼構(gòu)建

2021-07-06 17:39 更新

從PyPI下載并提取源代碼壓縮文件。

外部資源庫

您無需安裝所有支持的外部資源庫即可使用 Pillow 的基本功能。默認(rèn)情況下需要Zlib和libjpeg。

我們的Docker 鏡像存儲(chǔ)庫中有 Dockerfiles用于安裝某些操作系統(tǒng)的依賴項(xiàng)。

Pillow 的許多功能都需要外部庫:

  • ?libjpeg ?提供jpeg功能。
    • Pillow 已經(jīng)通過libjpeg版本 6b , ?8 ?, 9-9d 和libjpeg-turbo版本 8 的測(cè)試。
    • 從 Pillow 3.0.0開始,默認(rèn)情況下需要libjpeg,但可以使用? --disable-jpeg?參數(shù)禁用 。
  • ?zlib ?提供對(duì)壓縮PNG的訪問
    • 從 Pillow 3.0.0開始,默認(rèn)情況下需要zlib,但可以使用 ?--disable-zlib ?參數(shù)禁用。
  • ?libtiff ?提供壓縮的TIFF功能
    • Pillow 已經(jīng)過libtiff版本 3.x 和 4.0-4.1的測(cè)試。
  • ?libfreetype ?提供與類型相關(guān)的服務(wù)
  • ?littlecms? 提供顏色管理
    • Pillow版本2.2.1及以下使用liblcms1,Pillow2.3.0及以上使用liblcms2。 使用1.19 和 2.7-2.11 進(jìn)行測(cè)試。
  • ?libwebp ?提供WebP格式。
    • Pillow 已經(jīng)過 0.1.3版本的測(cè)試, 它不能讀取透明的WebP文件。0.3.0 及以上版本支持透明度。
  • ?tcl/tk ?提供對(duì)tkinter位圖和照片圖像的支持。
  • ?openjpeg ?提供jpeg 2000功能。
    • Pillow 已經(jīng)用 openjpeg 2.0.02.1.0、2.3.12.4.0進(jìn)行了測(cè)試。
    • Pillow 不能支持較早的 1.5 與Debian Jessie一起發(fā)行的系列。
  • ?libimagequant ?提供改進(jìn)的顏色量化
    • Pillow 已通過libimagequant 2.6-2.15.1測(cè)試
    • Libimagequant 獲得 GPLv3 許可,比 Pillow 許可更嚴(yán)格,因此我們不會(huì)分發(fā)啟用了 libimagequant 支持的二進(jìn)制文件。
  • ?libraqm ?提供復(fù)雜的文本布局支持。
    • libraqm 提供雙向文本支持(使用 FriBiDi)、整形(使用 HarfBuzz)和適當(dāng)?shù)哪_本項(xiàng)。因此,Raqm 可以支持 Unicode 涵蓋的大多數(shù)書寫系統(tǒng)。
    • libraqm依賴于以下庫:freetype、harfbuzz、fribidi,如果您的系統(tǒng)中沒有可用的軟件包,請(qǐng)確保在安裝libraqm之前安裝它們。
    • 沒有l(wèi)ibraqm,不支持設(shè)置文本方向或字體功能。
    • libraqm動(dòng)態(tài)加載在bendle 5.0.0及更高版本中,因此如果安裝了所有庫,則支持可用。Windows支持:Raqm不包括在預(yù)構(gòu)建的輪子中
  • ?libxcb ?提供Grab Screenx11支持。

安裝先決條件后,運(yùn)行:

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

如果先決條件安裝在您機(jī)器的標(biāo)準(zhǔn)庫位置(例如/usr/usr/local),則不需要額外的配置。如果它們安裝在非標(biāo)準(zhǔn)位置,您可能需要通過編輯setup.py或 setup.cfg或通過在命令行上添加環(huán)境變量來配置 ?setuptools ?以使用這些位置:

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

如果 Pillow 之前在沒有所需的先決條件的情況下構(gòu)建,則可能需要手動(dòng)清除 pip 緩存或使用--no-cache-dir選項(xiàng)強(qiáng)制構(gòu)建沒有緩存的構(gòu)建,以使用新安裝的外部庫強(qiáng)制構(gòu)建。

構(gòu)建選項(xiàng)

  • 環(huán)境變量:MAX_CONCURRENCY=n. Pillow 可以使用多處理來構(gòu)建擴(kuò)展。設(shè)置MAX_CONCURRENCY 來設(shè)置要使用的 CPU 數(shù)量,或者可以通過使用設(shè)置 1 來禁用并行構(gòu)建。默認(rèn)情況下,它使用 4 個(gè) CPU,或者如果 4 個(gè)不可用,則盡可能多地使用。

  • 構(gòu)建參數(shù):--disable-zlib--disable-jpeg--disable-tiff--disable-freetype--disable-lcms--disable-webp--disable-webpmux--disable-jpeg2000--disable-imagequant--disable-xcb. 即使構(gòu)建機(jī)器上存在開發(fā)庫,也禁用構(gòu)建相應(yīng)的功能。

  • 構(gòu)建參數(shù):--enable-zlib--enable-jpeg--enable-tiff--enable-freetype--enable-lcms--enable-webp--enable-webpmux--enable-jpeg2000--enable-imagequant--enable-xcb. 要求構(gòu)建相應(yīng)的功能。如果未找到庫,構(gòu)建將引發(fā)異常。Webpmux(WebP 元數(shù)據(jù))依賴于 WebP 支持。Tcl 和 Tk 也必須一起使用。

  • 構(gòu)建參數(shù): ?--vendor-raqm --vendor-fribidi?這些參數(shù)用于編譯 libraqm 的修改版本和在運(yùn)行時(shí)動(dòng)態(tài)加載 libfribidi 的 shim。這些用于編譯標(biāo)準(zhǔn)的Pillow wheels。編譯 libraqm 需要符合 C99 的編譯器。

  • 構(gòu)建參數(shù):--disable-platform-guessing. 對(duì)于在環(huán)境變量(例如 Buildroot)中配置正確路徑的自動(dòng)構(gòu)建系統(tǒng),跳過所有依賴于平臺(tái)的猜測(cè)包括和庫目錄。

  • 構(gòu)建參數(shù):--debug. 向包含和庫搜索過程添加調(diào)試標(biāo)志,以將所有搜索和找到的路徑轉(zhuǎn)儲(chǔ)到標(biāo)準(zhǔn)輸出。

示例用法:

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 上構(gòu)建

編譯 Pillow 部分需要 Xcode 命令行工具。這些工具是通過命令行運(yùn)行?xcode-select --install?來安裝的。即使您安裝了完整的 Xcode 包,也需要命令行工具。在使用這些工具之前,可能需要運(yùn)行sudo xcodebuild -license以接受許可證。

安裝外部庫的最簡(jiǎn)單方法是通過Homebrew。安裝 Homebrew 后,運(yùn)行:

brew install libtiff libjpeg webp little-cms2Copy to clipboard

要在 macOS 上安裝 libraqm,請(qǐng)使用 Homebrew 安裝其依賴項(xiàng):

brew install freetype harfbuzz fribidi

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

現(xiàn)在安裝 Pillow:

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

或從未壓縮的源目錄中:

python3 setup.py install

在 Windows 上構(gòu)建

 我們建議您使用 PyPI 中的預(yù)制wheels。如果您想手動(dòng)編譯 Pillow,您可以使用winbuildCI 測(cè)試和開發(fā)目錄中的構(gòu)建腳本 。這些腳本需要 Visual Studio 2017 或更新版本和 NASM。

使用 MSYS2/MinGW 在 Windows 上構(gòu)建

要使用 MSYS2 構(gòu)建 Pillow,請(qǐng)確保您運(yùn)行MSYS2 MinGW 32 位或 MSYS2 MinGW 64 位控制臺(tái),而不是 直接運(yùn)行MSYS2。

下面的說明針對(duì)的64位版本,對(duì)于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

現(xiàn)在安裝 Pillow:

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

在 FreeBSD 上構(gòu)建

僅測(cè)試了 FreeBSD 10 和 11

確保安裝了 Python 的開發(fā)庫:

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 上構(gòu)建

如果您沒有從源代碼構(gòu)建 Python,請(qǐng)確保安裝了 Python 的開發(fā)庫。

在 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、CentOSFedora安裝之前需要先安裝的包有:

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

請(qǐng)注意,包管理器可能是 yum 或 DNF,具體取決于確切的發(fā)行版。

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 上構(gòu)建

已為 Termux 環(huán)境中的編譯添加了基本的 Android 支持。可以通過以下方式安裝依賴項(xiàng):

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

這已在 x86 上 ChromeOS 上的 Termux 應(yīng)用程序中進(jìn)行了測(cè)試。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)