Skip to content

Following the instructions on how to install Plone end-up in a crash when installing Pillow on MacOS #1712

@avoinea

Description

@avoinea
Member

Links of affected pages in Plone Documentation, if any.

https://6.docs.plone.org/install/create-project.html#install-plone-6

Description

Building wheels for collected packages: clean_volto_project, Pillow
  Building editable for clean_volto_project (pyproject.toml) ... done
  Created wheel for clean_volto_project: filename=clean_volto_project-1.0.0a1-0.editable-py3-none-any.whl size=10114 sha256=ff79be2d0f9d9baff7173e552957e0c3328938be2147170faf2c7b13c8a2ae04
  Stored in directory: /private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-ephem-wheel-cache-bdueugz1/wheels/84/55/df/ae2e163935af84ce547646d4eade8f53e309defd7cabeff6d8
  Building wheel for Pillow (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Building wheel for Pillow (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [201 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/MpoImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageMode.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PngImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/XbmImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PcxImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/SunImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageFile.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/SpiderImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/TarIO.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/FitsStubImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/MpegImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/BdfFontFile.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/GribStubImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageStat.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PixarImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/GimpPaletteFile.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageColor.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/QoiImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ContainerIO.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/MspImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/MicImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/_version.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImtImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/GifImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PalmImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageQt.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageMath.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PaletteFile.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/FontFile.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PdfParser.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ExifTags.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageCms.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/FpxImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageChops.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/_deprecate.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/BufrStubImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PSDraw.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PcdImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageFilter.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageDraw2.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImagePath.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/DcxImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/__init__.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/JpegPresets.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/Hdf5StubImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/features.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageDraw.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/GimpGradientFile.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageWin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/IcoImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/_tkinter_finder.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/EpsImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/TgaImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageMorph.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/Jpeg2KImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/WalImageFile.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PcfFontFile.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/BlpImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageTk.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/GbrImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageOps.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PdfImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageShow.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageEnhance.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/WmfImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageGrab.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/WebPImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/FliImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/TiffTags.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/CurImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/_util.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/GdImageFile.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/TiffImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/IptcImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImagePalette.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/BmpImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageTransform.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/IcnsImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/McIdasImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/FitsImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/XpmImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/DdsImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageSequence.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PyAccess.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/_binary.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/Image.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/__main__.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/XVThumbImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/SgiImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PsdImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/JpegImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/ImageFont.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/PpmImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/PIL
      copying src/PIL/FtexImagePlugin.py -> build/lib.macosx-11.1-arm64-cpython-312/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 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 '*.pyc' found anywhere in distribution
      warning: no previously-included files matching '*.so' found anywhere in distribution
      no previously-included directories found matching '.ci'
      adding license file 'LICENSE'
      writing manifest file 'src/Pillow.egg-info/SOURCES.txt'
      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 993, in <module>
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/__init__.py", line 117, in setup
          return distutils.core.setup(**attrs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 183, in setup
          return run_commands(dist)
                 ^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 199, in run_commands
          dist.run_commands()
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 954, in run_commands
          self.run_command(cmd)
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 950, in run_command
          super().run_command(command)
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 973, in run_command
          cmd_obj.run()
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/command/bdist_wheel.py", line 398, in run
          self.run_command("build")
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 950, in run_command
          super().run_command(command)
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 973, in run_command
          cmd_obj.run()
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build.py", line 135, in run
          self.run_command(cmd_name)
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 950, in run_command
          super().run_command(command)
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 973, in run_command
          cmd_obj.run()
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/command/build_ext.py", line 98, in run
          _build_ext.run(self)
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 359, in run
          self.build_extensions()
        File "<string>", line 809, in build_extensions
      RequiredDependencyException: jpeg
      
      During handling of the above exception, another exception occurred:
      
      Traceback (most recent call last):
        File "/Users/alin/sandbox/my_proj/clean-volto-project/backend/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/Users/alin/sandbox/my_proj/clean-volto-project/backend/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/Users/alin/sandbox/my_proj/clean-volto-project/backend/lib/python3.12/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 "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 421, in build_wheel
          return self._build_with_temp_dir(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 403, in _build_with_temp_dir
          self.run_setup()
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 503, in run_setup
          super().run_setup(setup_script=setup_script)
        File "/private/var/folders/b4/lsgv36b501b_b613nrnd7_bw0000gn/T/pip-build-env-jz4a0gt5/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 318, in run_setup
          exec(code, locals())
        File "<string>", line 1010, 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
Successfully built clean_volto_project
Failed to build Pillow
ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (Pillow)
make[2]: *** [build-dev] Error 1
make[1]: *** [install-backend] Error 2
make: *** [install] Error 2

Activity

avoinea

avoinea commented on Sep 24, 2024

@avoinea
SponsorMemberAuthor

This seems to solve the issue:

brew install zlib libtiff
stevepiercy

stevepiercy commented on Sep 24, 2024

@stevepiercy
Contributor

What was the command you used?

avoinea

avoinea commented on Sep 25, 2024

@avoinea
SponsorMemberAuthor
pipx run cookiecutter gh:collective/cookiecutter-plone-starter
cd clean-volto-project
make install
stevepiercy

stevepiercy commented on Sep 25, 2024

@stevepiercy
Contributor

brew install zlib libtiff

The error message indicated:

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

So I don't understand how installing those two, instead of libjpeg, could have resolved the issue.

Backing up, I assume that you accepted the defaults for the cookiecutter, and that you installed an alpha version of Volto. Is that correct?

Why does make install try to build a wheel for Pillow, instead of just installing it via pip?

https://github.com/collective/cookiecutter-plone-starter/blob/main/%7B%7B%20cookiecutter.project_slug%20%7D%7D/backend/Makefile#L114

Pillow==9.5.0 should get installed via pip, based on https://dist.plone.org/release/6.0.13/constraints.txt.

What is your macOS version? I see 11.1 in the log, but it shouldn't really be an issue, unless you have not installed XCode Developer Tools.

davisagli

davisagli commented on Sep 25, 2024

@davisagli
SponsorMember

Why does make install try to build a wheel for Pillow, instead of just installing it via pip?

pip will build a wheel if an existing one isn't available for the current platform on PyPI

avoinea

avoinea commented on Sep 26, 2024

@avoinea
SponsorMemberAuthor

What is your macOS version? I see 11.1 in the log, but it shouldn't really be an issue, unless you have not installed XCode Developer Tools.

macOS Sonoma 14.6.1
stevepiercy

stevepiercy commented on Sep 26, 2024

@stevepiercy
Contributor

I verified that pip tries to build a wheel for Pillow on my mac, too.

Anyway, I think we need to update the install docs with a troubleshooting tip or section for this step. Something like this:


### ERROR: Failed building wheel for Pillow

After generating a project, then running `make install`, if you see an error message `ERROR: Failed building wheel for Pillow`, then you need to install Pillow's dependencies.

(Use sphinx-design tabbed UI for macOS and Linux)

macOS

```shell
brew install zlib libjpeg
```

Linux

```shell
apt-get zlib libjpeg
```

```{seealso}
See also the Pillow documentation [External Libraries](https://pillow.readthedocs.io/en/latest/installation/building-from-source.html#external-libraries) for additional libraries that you might need.
```
stevepiercy

stevepiercy commented on Sep 29, 2024

@stevepiercy
Contributor

Fixed in d67ac39. See #1714

moved this to In Progress in Install Docson Sep 29, 2024
moved this from New to In Progress in Plone Documentationon Sep 29, 2024
self-assigned this
on Sep 29, 2024
added a commit that references this issue on Sep 30, 2024
moved this from In Progress to Done in Install Docson Sep 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

Done

Status

Done

Milestone

No milestone

Relationships

None yet

    Development

    Participants

    @davisagli@stevepiercy@avoinea

    Issue actions

      Following the instructions on how to install Plone end-up in a crash when installing Pillow on MacOS · Issue #1712 · plone/documentation