ソースからのビルド

外部ライブラリ

注意

Pillowの基本機能を使用するために、**すべてのサポートされている外部ライブラリをインストールする必要はありません**。**Zlib**と**libjpeg**はデフォルトで必要です。

注意

いくつかのオペレーティングシステムの依存関係をインストールするためのDockerfileは、当社のDockerイメージリポジトリにあります。

Pillowの多くの機能は外部ライブラリを必要とします

  • **libjpeg**はJPEG機能を提供します。

    • Pillowはlibjpegバージョン**6b**、**8**、**9-9d**、およびlibjpeg-turboバージョン**8**でテストされています。

    • Pillow 3.0.0以降、libjpegはデフォルトで必要です。-C jpeg=disableフラグを使用して無効にすることができます。

  • **zlib**は圧縮PNGへのアクセスを提供します

    • Pillow 3.0.0以降、zlibはデフォルトで必要です。-C zlib=disableフラグを使用して無効にすることができます。

  • **libtiff**は圧縮TIFF機能を提供します

    • Pillowはlibtiffバージョン**3.x**と**4.0-4.6.0**でテストされています

  • **libfreetype**はフォント関連のサービスを提供します

  • **littlecms**はカラーマネジメントを提供します

    • Pillowバージョン2.2.1以前はliblcms1を使用し、Pillow 2.3.0以降はliblcms2を使用します。**1.19**と**2.7-2.16**でテスト済みです。

  • **libwebp**はWebP形式を提供します。

  • **openjpeg**はJPEG 2000機能を提供します。

    • Pillowはopenjpeg **2.0.0**、**2.1.0**、**2.3.1**、**2.4.0**、**2.5.0**、および**2.5.2**でテストされています。

    • Pillowは、Debian Jessieに付属する以前の**1.5**シリーズを**サポートしていません**。

  • **libimagequant**は、改良されたカラー量子化を提供します

    • Pillowはlibimagequant **2.6-4.3.3**でテストされています

    • LibimagequantはGPLv3ライセンスであり、Pillowライセンスよりも制限的であるため、libimagequantサポートが有効になっているバイナリは配布しません。

  • **libraqm**は複雑なテキストレイアウトサポートを提供します。

    • libraqmは、双方向テキストサポート(FriBiDiを使用)、シェーピング(HarfBuzzを使用)、および適切なスクリプトアイテム化を提供します。その結果、RaqmはUnicodeでカバーされているほとんどの筆記システムをサポートできます。

    • libraqmは次のライブラリに依存しています:FreeType、HarfBuzz、FriBiDi。システムにパッケージとして提供されていない場合は、libraqmをインストールする前にこれらをインストールしてください。

    • libraqmなしでは、テキスト方向またはフォント機能の設定はサポートされません。

    • バージョン8.2.0以降のPillowホイールには、インストールされている場合に実行時にlibfribidiをロードする修正版のlibraqmが含まれています。Windowsでは、FriBiDiをコンパイルし、動的リンクライブラリの検索順序(Microsoft Learn)にリストされているディレクトリにfribidi.dllをインストールする必要があります(fribidi-0.dllまたはlibfribidi-0.dllも検出されます)。このバージョンのビルド方法については、ビルドオプションを参照してください。

    • 以前のバージョンのPillow(5.0.0~8.1.2)は、実行時にlibraqmを動的にリンクしていました。

  • **libxcb**はX11スクリーンキャプチャサポートを提供します。

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 - 22.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

libraqmをインストールするには、sudo apt-get install mesonを実行し、次にdepends/install_raqm.shを参照してください。

最近の**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

テストインフラストラクチャリポジトリにあるDockerfileも参照してください(https://github.com/python-pillow/docker-images)。他のテスト済みディストリビューションの既知の動作するインストールプロセスを確認できます。

Pillowの一部をコンパイルするには、Xcodeコマンドラインツールが必要です。ツールは、コマンドラインからxcode-select --installを実行することでインストールされます。完全なXcodeパッケージがインストールされている場合でも、コマンドラインツールが必要です。sudo xcodebuild -licenseを実行して、ツールを使用する前にライセンスに同意する必要がある場合があります。

外部ライブラリをインストールする最も簡単な方法は、Homebrewを使用することです。Homebrewをインストールしたら、以下を実行します。

brew install libjpeg libtiff little-cms2 openjpeg webp

macOSでlibraqmをインストールするには、Homebrewを使用してその依存関係をインストールします

brew install freetype harfbuzz fribidi

次に、depends/install_raqm_cmake.shを参照してlibraqmをインストールします。

PyPIから事前にビルドされたホイールを使用することをお勧めします。Pillowを手動でコンパイルする場合は、CIテストと開発に使用されるwinbuildディレクトリにあるビルドスクリプトを使用できます。これらのスクリプトには、Visual Studio 2017以降とNASMが必要です。

これらのスクリプトはソースコードのローカルコピーからPillowもインストールするため、その後のインストール手順は不要です。

MSYS2を使用してPillowをビルドするには、**MSYS2**ではなく、**MSYS2 MinGW 32-bit**または**MSYS2 MinGW 64-bit**コンソールを実行していることを確認してください。

次の手順は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-bit**では、前提条件は以下でインストールされます。

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

https://www.msys2.org/docs/python/には、setuptools >= 60がMSYS2では動作しないことが記載されています。これを回避するために、Pillowをインストールする前に、以下を実行する必要があります。

export SETUPTOOLS_USE_DISTUTILS=stdlib

注意

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をインストールします。

Termux環境内でのコンパイルについて、基本的なAndroidサポートが追加されました。依存関係は、以下のようにインストールできます。

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

これは、ChromeOS上のx86アーキテクチャでTermuxアプリ内でテストされています。

インストール

前提条件をインストールしたら、PyPIからPillowのソースコードをインストールするには、以下を実行します。

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

前提条件がマシンの標準ライブラリ位置(例:/usrまたは/usr/local)にインストールされている場合、追加の設定は必要ありません。標準以外の場所にインストールされている場合は、setup.pyまたはpyproject.tomlを編集するか、コマンドラインで環境変数を追加して、setuptoolsがそれらの場所を使用するように設定する必要がある場合があります。

CFLAGS="-I/usr/pkg/include" python3 -m pip install --upgrade Pillow --no-binary :all:

必要な前提条件なしでPillowが以前にビルドされている場合、新しくインストールされた外部ライブラリを使用してビルドを強制するために、pipキャッシュを手動でクリアするか、--no-cache-dirオプションを使用してキャッシュなしでビルドする必要がある場合があります。

代わりにソースコードのローカルコピーからインストールする場合は、git clone https://github.com/python-pillow/PillowでGitHubからクローンするか、PyPIから圧縮アーカイブをダウンロードして解凍できます。

Pillowディレクトリに移動したら、以下を実行します。

python3 -m pip install --upgrade pip
python3 -m pip install .

ビルドオプション

  • 設定:-C parallel=n。環境変数MAX_CONCURRENCY=nでも指定できます。Pillowはマルチプロセッシングを使用して拡張機能をビルドできます。-C parallel=nを設定すると、使用するCPU数がnに設定されます。1に設定することで、並列ビルドを無効化することもできます。デフォルトでは、4つのCPUを使用します。4つ使用できない場合は、存在する数だけ使用します。

  • 設定:-C zlib=disable-C jpeg=disable-C tiff=disable-C freetype=disable-C raqm=disable-C lcms=disable-C webp=disable-C jpeg2000=disable-C imagequant=disable-C xcb=disable。ビルドマシン上に開発ライブラリが存在する場合でも、対応する機能のビルドを無効にします。

  • 設定:-C zlib=enable-C jpeg=enable-C tiff=enable-C freetype=enable-C raqm=enable-C lcms=enable-C webp=enable-C jpeg2000=enable-C imagequant=enable-C xcb=enable。対応する機能のビルドを必須にします。ライブラリが見つからない場合、ビルドは例外を発生させます。TclとTkは一緒に使用しなければなりません。

  • 設定:-C raqm=vendor-C fribidi=vendor。これらのフラグは、libraqmの修正版と、実行時にlibfribidiを動的にロードするシムをコンパイルするために使用されます。これらは、標準的なPillowホイールをコンパイルするために使用されます。libraqmのコンパイルには、C99準拠のコンパイラが必要です。

  • 設定:-C platform-guessing=disable。環境変数で適切なパスを設定する自動ビルドシステム(例:Buildroot)向けに、プラットフォームに依存するincludeディレクトリとライブラリディレクトリの推測をすべてスキップします。

  • 設定:-C debug=true。includeとライブラリ検索プロセスにデバッグフラグを追加し、検索および検出されたすべてのパスを標準出力にダンプします。

使用例

python3 -m pip install --upgrade Pillow -C [feature]=enable

旧バージョン

PyPIのリリーストリビューション履歴と、直接URLアクセス(例:https://pypi.org/project/pillow/1.0/)から、古いディストリビューションをダウンロードできます。