Installation ============ Basic Installation ------------------ .. note:: This is a recommended way of installation for use. Install Pillow-Heif with :command:`pip`:: python3 -m pip install --upgrade pip python3 -m pip install --upgrade pillow-heif Wheels are present for most popular systems with help of `cibuildwheel `_ Building From Source -------------------- .. role:: bash(code) :language: bash Linux ^^^^^ .. note:: | Here is a `GH Action `_ and in `docker/from_src `_ folder there are docker files for different Linuxes with examples how to build from source. | | **And of course you can build your own libheif library with your preferred encoders and decoders and use what you like.** There is many different ways how to build it from source. Main requirements are: * ``libheif`` should be version >= ``1.17.0`` version(recommended version is ``1.17.3`` or higher). * ``x265`` should support 10 - 12 bit encoding(if you want to save in that bitness) * ``aom`` should be >= ``3.3.0`` version * ``libde265`` should be >= ``1.0.8`` version On `Ubuntu`: | :bash:`sudo add-apt-repository ppa:strukturag/libheif` | :bash:`sudo apt update` | :bash:`sudo apt -y install libheif-dev` On `Alpine 19`: | :bash:`sudo apk add --no-cache libheif-dev` Now install Pillow-Heif with:: python3 -m pip install --upgrade pillow-heif --no-binary :all: or from within the uncompressed source directory:: python3 -m pip install . .. note:: Refer to `libheif repo `_ for additional information of how to build it with what features you want. *If you have questions about build from sources you can ask them in discussions or create an issue.* FreeBSD ^^^^^^^ `Action to test build on FreeBSD from source `_ Since Python itself does not support binary wheels for BSD systems, you should install libheif and then simply install Pillow-Heif from source. Install `gcc`, `cmake`, `aom` and `x265`:: - pkg install -y gcc cmake aom x265 - pkg install -y py39-pip - pkg install -y py39-pillow py39-numpy - python3 libheif/build_libs.py Install Python and Pillow:: pkg install -y py39-pip pkg install -y py39-pillow Install Pillow-Heif:: python3 -m pip install . macOS ^^^^^ `GA Action to test build on macOS from source `_ First install `Homebrew `_, if it is not installed and run:: brew install x265 libjpeg libde265 libheif python3 -m pip install --upgrade pip Now install Pillow-Heif with:: python3 -m pip install --upgrade pillow-heif --no-binary :all: or from within the uncompressed source directory:: python3 -m pip install . Windows ^^^^^^^ `GA Action to test build on Windows from source `_ .. note:: | On Windows, use prebuilt binaries. Installing from source on Windows is tricky. | First install `msys2 `_, if it is not installed. | By default, build script assumes that **msys2** builds libs in :bash:`C:/msys64/mingw64` | You can set **MSYS2_PREFIX** environment variable to your custom path, e.g.: | :bash:`setx MSYS2_PREFIX "D:/msys64/mingw64"` Using **msys2** terminal change working directory and install `libheif`:: cd .../pillow_heif/libheif/windows/mingw-w64-libheif makepkg-mingw --syncdeps pacman -U mingw-w64-x86_64-libheif-*-any.pkg.tar.zst .. note:: This is needed, so we dont want to `dav1d`, `rav1e` or `libSvtAv1Enc` to be installed as the dependencies. Now inside Pillow-Heif directory install it with pip from source:: python -m pip install . | After that copy **libheif.dll**, **libaom.dll**, **libde265-0.dll**, **libx265.dll**, **libgcc_s_seh-1.dll**, **libstdc++-6.dll** and **libwinpthread-1.dll** from *msys64\\mingw64\\bin* to python site-packages root.