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, https://www.piwheels.org/simple
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!

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.

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.