Installation error on new build-failed building wheel for pillow

Hello, I am currently trying to set up a pi for myself and I have run into an issue where it cannot build a wheel for pillow. I have tried multiple reflashes, different versions of OS but still have the same issue. The funny thing is, I made a console for my FIL for christmas and had zero issues. I don’t have a ton of experience with RPi so I need some help! This is the log that I get…

billy@raspberrypi:~ $ curl -sSL https://peted-davis.github.io/wfpiconsole | bash

[✓] Root user check passed
[✓] Architecture check passed (armhf)
[✓] OS check passed (Raspbian GNU/Linux 12 (bookworm))
[✓] Raspberry Pi check passed (Raspberry Pi 4 Model B Rev 1.5)

================================
Installing WeatherFlow PiConsole

[✓] Checking for updated packages
[i] No updated packages found

[i] WeatherFlow PiConsole dependency checks…
[✓] Checking for git
[✓] Checking for curl
[✓] Checking for rng-tools
[✓] Checking for build-essential
[✓] Checking for python3-dev
[✓] Checking for python3-pip
[✓] Checking for python3-setuptools
[✓] Checking for libssl-dev
[✓] Checking for libffi-dev
[✓] Checking for libatlas-base-dev
[✓] Checking for libopenblas-dev
[✓] Checking for jq

[i] Installing Python virtual environment… already exists

[i] Installing WeatherFlow PiConsole Python modules…
[✓] Updating Python package manager
[✓] Installing Python module websockets
[✓] Installing Python module numpy
[✓] Installing Python module pytz
[✓] Installing Python module tzlocal
[✓] Installing Python module ephem
[✓] Installing Python module packaging
[✓] Installing Python module cryptography
[✓] Installing Python module pyOpenSSL
[✓] Installing Python module certifi

[i] Kivy Python library installation check (will be installed)
[✗] Installing Kivy Python library
Error: Unable to install Kivy Python library

Looking in indexes: Simple index, piwheels - Simple index
Collecting kivy==2.2.0 (from kivy[base]==2.2.0)
Downloading https://www.piwheels.org/simple/kivy/Kivy-2.2.0-cp311-cp311-linux_armv7l.whl (23.8 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 23.8/23.8 MB 3.7 MB/s eta 0:00:00
Collecting Kivy-Garden>=0.1.4 (from kivy==2.2.0->kivy[base]==2.2.0)
Downloading Kivy_Garden-0.1.5-py3-none-any.whl (4.6 kB)
Collecting docutils (from kivy==2.2.0->kivy[base]==2.2.0)
Downloading https://www.piwheels.org/simple/docutils/docutils-0.20.1-py3-none-any.whl (572 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 572.7/572.7 kB 866.0 kB/s eta 0:00:00
Collecting pygments (from kivy==2.2.0->kivy[base]==2.2.0)
Downloading https://www.piwheels.org/simple/pygments/pygments-2.17.2-py3-none-any.whl (1.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 1.5 MB/s eta 0:00:00
Collecting pillow (from kivy[base]==2.2.0)
Downloading pillow-10.2.0.tar.gz (46.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.2/46.2 MB 11.2 MB/s eta 0:00:00
Installing build dependencies: started
Installing build dependencies: finished with status ‘done’
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status ‘done’
Installing backend dependencies: started
Installing backend dependencies: finished with status ‘done’
Preparing metadata (pyproject.toml): started
Preparing metadata (pyproject.toml): finished with status ‘done’
Collecting requests (from kivy[base]==2.2.0)
Downloading https://www.piwheels.org/simple/requests/requests-2.31.0-py3-none-any.whl (62 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.6/62.6 kB 368.7 kB/s eta 0:00:00
Collecting charset-normalizer<4,>=2 (from requests->kivy[base]==2.2.0)
Downloading https://www.piwheels.org/simple/charset-normalizer/charset_normalizer-3.3.2-py3-none-any.whl (48 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.5/48.5 kB 174.6 kB/s eta 0:00:00
Collecting idna<4,>=2.5 (from requests->kivy[base]==2.2.0)
Downloading https://www.piwheels.org/simple/idna/idna-3.6-py3-none-any.whl (61 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.6/61.6 kB 235.0 kB/s eta 0:00:00
Collecting urllib3<3,>=1.21.1 (from requests->kivy[base]==2.2.0)
Downloading https://www.piwheels.org/simple/urllib3/urllib3-2.1.0-py3-none-any.whl (104 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.6/104.6 kB 11.7 MB/s eta 0:00:00
Requirement already satisfied: certifi>=2017.4.17 in ./wfpiconsole/venv/lib/python3.11/site-packages (from requests->kivy[base]==2.2.0) (2023.7.22)
Building wheels for collected packages: pillow
Building wheel for pillow (pyproject.toml): started
Building wheel for pillow (pyproject.toml): finished with status ‘error’
error: subprocess-exited-with-error

× Building wheel for pillow (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [210 lines of output]
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-aarch64-cpython-311
creating build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageStat.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/SpiderImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/XpmImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/Jpeg2KImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageTk.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/XbmImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PdfParser.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/FontFile.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageQt.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/FitsImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/XVThumbImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/EpsImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/MicImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageFile.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageDraw.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/_deprecate.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/IcnsImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageShow.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/DcxImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImagePalette.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PSDraw.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/McIdasImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/GimpGradientFile.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PcfFontFile.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/FliImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/SgiImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/IcoImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PcxImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/GbrImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageDraw2.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/WebPImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/Hdf5StubImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/BufrStubImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/_util.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageOps.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PixarImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/SunImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PpmImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/GifImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ContainerIO.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageTransform.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PalmImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageMode.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageMorph.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageEnhance.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/features.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/JpegImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/Image.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/_tkinter_finder.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/_binary.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PsdImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/BlpImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/MpegImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/FpxImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageChops.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/GimpPaletteFile.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PcdImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/WalImageFile.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/MspImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageSequence.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/WmfImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/JpegPresets.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/IptcImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/init.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/DdsImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageMath.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/FtexImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/GribStubImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/TarIO.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageFilter.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/TiffTags.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/TgaImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PngImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/BdfFontFile.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/QoiImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/GdImageFile.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/CurImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImagePath.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PyAccess.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PdfImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageFont.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/MpoImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageGrab.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/_typing.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ExifTags.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageColor.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImtImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/TiffImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageWin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/_version.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/BmpImagePlugin.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/main.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/ImageCms.py → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/PaletteFile.py → build/lib.linux-aarch64-cpython-311/PIL
running egg_info
writing src/pillow.egg-info/PKG-INFO
writing dependency_links to src/pillow.egg-info/dependency_links.txt
writing requirements to src/pillow.egg-info/requires.txt
writing top-level names to src/pillow.egg-info/top_level.txt
reading manifest file ‘src/pillow.egg-info/SOURCES.txt’
reading manifest template ‘MANIFEST.in’
warning: no files found matching ‘.c’
warning: no files found matching '
.h’
warning: no files found matching ‘.sh’
warning: no files found matching '
.txt’
warning: no files found matching ‘.flake8’
warning: no previously-included files found matching ‘.appveyor.yml’
warning: no previously-included files found matching ‘.clang-format’
warning: no previously-included files found matching ‘.coveragerc’
warning: no previously-included files found matching ‘.editorconfig’
warning: no previously-included files found matching ‘.readthedocs.yml’
warning: no previously-included files found matching ‘codecov.yml’
warning: no previously-included files found matching ‘renovate.json’
warning: no previously-included files matching ‘.git*’ found anywhere in distribution
warning: no previously-included files matching ‘*.so’ found anywhere in distribution
no previously-included directories found matching ‘.ci’
no previously-included directories found matching ‘wheels’
adding license file ‘LICENSE’
writing manifest file ‘src/pillow.egg-info/SOURCES.txt’
copying src/PIL/_imagingcms.pyi → build/lib.linux-aarch64-cpython-311/PIL
copying src/PIL/_imagingft.pyi → build/lib.linux-aarch64-cpython-311/PIL
running build_ext

  The headers or library files could not be found for jpeg,
  a required dependency when compiling Pillow from source.

  Please see the install instructions at:
     https://pillow.readthedocs.io/en/latest/installation.html

  Traceback (most recent call last):
    File "<string>", line 989, in <module>
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/__init__.py", line 103, in setup
      return distutils.core.setup(**attrs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 185, in setup
      return run_commands(dist)
             ^^^^^^^^^^^^^^^^^^
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
      dist.run_commands()
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
      self.run_command(cmd)
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/dist.py", line 963, in run_command
      super().run_command(command)
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
      cmd_obj.run()
    File "/tmp/pip-build-env-4i1cadd1/normal/lib/python3.11/site-packages/wheel/bdist_wheel.py", line 368, in run
      self.run_command("build")
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command
      self.distribution.run_command(command)
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/dist.py", line 963, in run_command
      super().run_command(command)
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
      cmd_obj.run()
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/_distutils/command/build.py", line 131, in run
      self.run_command(cmd_name)
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command
      self.distribution.run_command(command)
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/dist.py", line 963, in run_command
      super().run_command(command)
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
      cmd_obj.run()
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/command/build_ext.py", line 88, in run
      _build_ext.run(self)
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/_distutils/command/build_ext.py", line 345, in run
      self.build_extensions()
    File "<string>", line 812, in build_extensions
  RequiredDependencyException: jpeg

  During handling of the above exception, another exception occurred:

  Traceback (most recent call last):
    File "/home/billy/wfpiconsole/venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
      main()
    File "/home/billy/wfpiconsole/venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/billy/wfpiconsole/venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 251, in build_wheel
      return _build_backend().build_wheel(wheel_directory, config_settings,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/tmp/pip-install-p7ib0g5d/pillow_34ae197763064093a52378791a29d6fd/_custom_build/backend.py", line 55, in build_wheel
      return super().build_wheel(wheel_directory, config_settings, metadata_directory)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 404, in build_wheel
      return self._build_with_temp_dir(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 389, in _build_with_temp_dir
      self.run_setup()
    File "/tmp/pip-install-p7ib0g5d/pillow_34ae197763064093a52378791a29d6fd/_custom_build/backend.py", line 49, in run_setup
      return super().run_setup(setup_script)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/tmp/pip-build-env-4i1cadd1/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 311, in run_setup
      exec(code, locals())
    File "<string>", line 1005, in <module>
  RequiredDependencyException:

  The headers or library files could not be found for jpeg,
  a required dependency when compiling Pillow from source.

  Please see the install instructions at:
     https://pillow.readthedocs.io/en/latest/installation.html


  [end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for pillow
Failed to build pillow
ERROR: Could not build wheels for pillow, which is required to install pyproject.toml-based projects

Thank you in advance for any help that you can provide!

1 Like

Google for your exact error message for which prerequisite dpkgs you need to add. For me the first hit had your answer.

Hint - always always always google for your exact error message. Really.

2 Likes

In addition to what @vinceskahan said, typically you want to resolve the very first error that shows up as often future errors are happening because of the first error.

1 Like