Internal error during buildout

Hi, I’m unable to install Senaite, it returns the following error:

(senaite) senaite@BioServer:~/senaitelims$ PYTHONHTTPSVERIFY=0 buildout
Uninstalling unifiedinstaller.
Uninstalling zopepy.
Uninstalling zopescripts.
Uninstalling backup.
Uninstalling repozo.
Uninstalling instance.
Unused options for buildout: 'deprecation-warnings'.
Installing instance.
Getting distribution for 'pyphen==0.11.0'.
zip_safe flag not set; analyzing archive contents...
pyphen.__init__: module references __file__
Got pyphen 0.11.0.
Getting distribution for 'cssselect2==0.2.2'.
Got cssselect2 0.2.2.
Getting distribution for 'tinycss2<1.0.0'.
Got tinycss2 0.6.1.
Getting distribution for 'WeasyPrint==0.42.3'.
warning: no files found matching 'pytest.ini'
warning: no files found matching 'tox.ini'
no previously-included directories found matching 'docs/_build'
Got WeasyPrint 0.42.3.
Getting distribution for 'cairocffi<1.0.0'.
/tmp/easy_install-GXUFV_/cairocffi-0.9.0/.eggs/cffi-1.15.1-py2.7-linux-x86_64.egg/cffi/cparser.py:154: UserWarning: String literal found in cdef() or type source. String literals are ignored here, but you should remove them anyway because some character sequences confuse pre-parsing.
  warnings.warn("String literal found in cdef() or type source. "
/tmp/easy_install-GXUFV_/cairocffi-0.9.0/.eggs/cffi-1.15.1-py2.7-linux-x86_64.egg/cffi/cparser.py:165: UserWarning: Global variable 'CAIRO_TAG_DEST' in cdef(): for consistency with C it should have a storage class specifier (usually 'extern')
  "(usually 'extern')" % (decl.name,))
/tmp/easy_install-GXUFV_/cairocffi-0.9.0/.eggs/cffi-1.15.1-py2.7-linux-x86_64.egg/cffi/cparser.py:165: UserWarning: Global variable 'CAIRO_TAG_LINK' in cdef(): for consistency with C it should have a storage class specifier (usually 'extern')
  "(usually 'extern')" % (decl.name,))
no previously-included directories found matching 'docs/_build'
warning: no previously-included files found matching 'cairocffi/_ffi*.py'
file cairocffi/_ffi.py (for module cairocffi._ffi) not found
file cairocffi/_ffi_pixbuf.py (for module cairocffi._ffi_pixbuf) not found
file cairocffi/_ffi.py (for module cairocffi._ffi) not found
file cairocffi/_ffi_pixbuf.py (for module cairocffi._ffi_pixbuf) not found
zip_safe flag not set; analyzing archive contents...
cairocffi.ffi_build: module references __file__
Got cairocffi 0.9.0.
Getting distribution for 'CairoSVG==1.0.20'.
zip_safe flag not set; analyzing archive contents...
Got CairoSVG 1.0.20.
Getting distribution for 'pycountry==18.12.8'.
Got pycountry 18.12.8.
Getting distribution for 'collective.z3cform.datagridfield==1.5.3'.
Got collective.z3cform.datagridfield 1.5.3.
Getting distribution for 'Werkzeug<2.0.0'.
Got Werkzeug 1.0.1.
Getting distribution for 'openpyxl==2.6.4'.
no previously-included directories found matching 'openpyxl/sample'
no previously-included directories found matching 'openpyxl/benchmarks'
no previously-included directories found matching 'openpyxl/develop'
no previously-included directories found matching 'scratchpad'
no previously-included directories found matching 'doc'
zip_safe flag not set; analyzing archive contents...
Got openpyxl 2.6.4.
Getting distribution for 'plone.app.jquerytools'.
Got plone.app.jquerytools 1.9.5.
Getting distribution for 'more-itertools==5.0.0'.
Got more-itertools 5.0.0.
Getting distribution for 'Pillow==5.1.0'.
warning: no files found matching '*.c'
warning: no files found matching '*.h'
warning: no files found matching '*.sh'
no previously-included directories found matching 'docs/_static'
warning: no previously-included files found matching '.appveyor.yml'
warning: no previously-included files found matching '.coveragerc'
warning: no previously-included files found matching '.codecov.yml'
warning: no previously-included files found matching '.editorconfig'
warning: no previously-included files found matching '.landscape.yaml'
warning: no previously-included files found matching '.travis'
warning: no previously-included files found matching '.travis/*'
warning: no previously-included files found matching 'build_children.sh'
warning: no previously-included files found matching 'tox.ini'
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


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

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/multiprocessing/pool.py", line 370, in _handle_tasks
    debug('task handler got sentinel')
TypeError: 'NoneType' object is not callable
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/multiprocessing/pool.py", line 332, in _handle_workers
    debug('worker handler exiting')
TypeError: 'NoneType' object is not callable


Exception TypeError: TypeError("'NoneType' object does not support item deletion",) in <Finalize object, dead> ignored
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 2312, in main
    **kw
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/__init__.py", line 129, in setup
    return distutils.core.setup(**attrs)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/distutils/core.py", line 151, in setup
    dist.run_commands()
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 412, in run
    self.easy_install(spec, not self.no_deps)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 654, in easy_install
    return self.install_item(None, spec, tmpdir, deps, True)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 699, in install_item
    dists = self.install_eggs(spec, download, tmpdir)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 884, in install_eggs
    return self.build_and_install(setup_script, setup_base)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1152, in build_and_install
    self.run_setup(setup_script, setup_base, args)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1138, in run_setup
    run_setup(setup_script, args)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/sandbox.py", line 253, in run_setup
    raise
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/contextlib.py", line 35, in __exit__
    self.gen.throw(type, value, traceback)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/sandbox.py", line 195, in setup_context
    yield
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/contextlib.py", line 35, in __exit__
    self.gen.throw(type, value, traceback)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/sandbox.py", line 166, in save_modules
    saved_exc.resume()
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/sandbox.py", line 141, in resume
    six.reraise(type, exc, self._tb)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/sandbox.py", line 154, in save_modules
    yield saved
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/sandbox.py", line 195, in setup_context
    yield
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/sandbox.py", line 250, in run_setup
    _execfile(setup_script, ns)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/setuptools/sandbox.py", line 45, in _execfile
    exec(code, globals, locals)
  File "/tmp/easy_install-Rwjapp/Pillow-5.1.0/setup.py", line 806, in <module>
setuptools.sandbox.UnpickleableException: RequiredDependencyException('\n\nThe headers or library files could not be found for jpeg,\na required dependency when compiling Pillow from source.\n\nPlease see the install instructions at:\n   https://pillow.readthedocs.io/en/latest/installation.html\n\n',)
An error occurred when trying to install /home/senaite/buildout-cache/downloads/dist/Pillow-5.1.0.tar.gz. Look above this message for any errors that were output by easy_install.
While:
  Installing instance.
  Getting distribution for 'Pillow==5.1.0'.

An internal error occurred due to a bug in either zc.buildout or in a
recipe being used:
Traceback (most recent call last):
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/zc/buildout/buildout.py", line 2174, in main
    getattr(buildout, command)(args)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/zc/buildout/buildout.py", line 817, in install
    installed_files = self[part]._call(recipe.install)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/zc/buildout/buildout.py", line 1603, in _call
    return f()
  File "/home/senaite/buildout-cache/eggs/cp27mu/plone.recipe.zope2instance-6.10.2-py2.7.egg/plone/recipe/zope2instance/recipe.py", line 155, in install
    installed.extend(self.install_scripts())
  File "/home/senaite/buildout-cache/eggs/cp27mu/plone.recipe.zope2instance-6.10.2-py2.7.egg/plone/recipe/zope2instance/recipe.py", line 949, in install_scripts
    requirements, ws = self.egg.working_set(["plone.recipe.zope2instance"])
  File "/home/senaite/buildout-cache/eggs/cp27mu/zc.recipe.egg-2.0.7-py2.7.egg/zc/recipe/egg/egg.py", line 87, in working_set
    allow_unknown_extras=bool_option(buildout_section, 'allow-unknown-extras')
  File "/home/senaite/buildout-cache/eggs/cp27mu/zc.recipe.egg-2.0.7-py2.7.egg/zc/recipe/egg/egg.py", line 168, in _working_set
    allow_unknown_extras=allow_unknown_extras)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/zc/buildout/easy_install.py", line 957, in install
    return installer.install(specs, working_set)
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/zc/buildout/easy_install.py", line 730, in install
    for dist in self._get_dist(req, ws):
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/zc/buildout/easy_install.py", line 574, in _get_dist
    dists = [_move_to_eggs_dir_and_compile(dist, self._dest)]
  File "/home/senaite/miniconda2/envs/senaite/lib/python2.7/site-packages/zc/buildout/easy_install.py", line 1745, in _move_to_eggs_dir_and_compile
    [tmp_loc] = glob.glob(os.path.join(tmp_dest, '*'))
ValueError: need more than 0 values to unpack

I have tried version 5.2.6 of Plone, I got an error message regarding version requirement being 5.2.7; I use 5.2.7, I get this error.

This is the buildout file:

[buildout]

# buildout.sanitycheck makes sure you're not running buildout
# as root.
# extensions =
#     buildout.sanitycheck

############################################
# Plone Component Versions
# ------------------------
# This version of the Unified Installer has the components of Plone 5
# preloaded so that it can install without an Internet connection.
# If you want to update, uncomment the "http://..." line below,
# edit it to point to the current version URL, comment out the
# "versions.cfg" line and run "bin/buildout" while attached to the
# Internet. Generally, you only want to do that as part of a planned migration.
# Note that if you are updating components, you should also check the versions
# section at the end of this file, since recipes or components other than
# those of Zope and Plone may need updating at the same time.
#
extends =
    base.cfg
    https://dist.plone.org/release/5.2.7/versions.cfg


# This user will own the non-data parts of the installation, and should be used to
# run buildout.
buildout-user = senaite
# A flag to tell the Unified Installer whether or not to document sudo use.
need-sudo = no


############################################
# Eggs
# ----
# Add an indented line to the eggs section for any Python
# eggs or packages you wish to include in your Plone instance.
#
# Note that versions may be specified here or in the [versions]
# section below. You should always specify versions that you know
# are compatible with the Plone release and at an acceptable
# development level.
#
# If you update to a later version of Plone, remove the hotfix.
#
eggs =
    Plone
    senaite.lims
    simplejson

############################################
# ZCML Slugs
# ----------
# Some eggs need ZCML slugs to tell Zope to
# use them. This is increasingly rare.
zcml =
#    plone.reload


############################################
# Development Eggs
# ----------------
# You can use paster to create "development eggs" to
# develop new products/themes. Put these in the src/
# directory.
# You will also need to add the egg names in the
# eggs section above, and may also need to add them
# to the zcml section.
#
# Provide the *paths* to the eggs you are developing here:
develop =
#    src/my.package


############################################
# var Directory
# -------------
# Sets the target directory for the "var" components of the install such as
# database and log files.
#
var-dir=${buildout:directory}/var


############################################
# Backup Directory
# ----------------
# Sets the target directory for the bin/backup and bin/snapshotbackup
# commands. Default is inside this project's var directory, but ideally
# this should be on a separate volume or backup server.
#
backups-dir=${buildout:var-dir}


############################################
# Initial User
# ------------
# This is the user id and password that will be used to create the initial
# user id that will allow you to log in and create a Plone site. This only
# sets the initial password; it will not allow you to change an already
# existing password. If you change the admin password via the web interface,
# the one below will no longer be valid.
# If you find yourself locked out of your Zope/Python installation, you may
# add an emergency user via "bin/plonectl adduser".
user=admin:admin


############################################
# Debug Options
# -------------
# Start Zope/Plone instances in "fg" mode to turn on debug mode;
# this will dramatically slow Plone.
#
# Add-on developers should turn deprecation warnings on
deprecation-warnings = off
# change verbose-security to "on" for useful security errors while developing
verbose-security = off


############################################
# Parts Specification
#--------------------
# Specifies the components that should be included in the buildout.
# Most are defined in the base.cfg extension; you may add your
# own if you need them at the end of this file.
parts =
    instance
    repozo
    backup
    zopescripts
    zopepy
    unifiedinstaller

############################################
# Major Parts
# ----------------------
# These common parts make use of sane base settings from
# base.cfg. To customize a part, just add whatever options
# you need. Read base.cfg for common settings.


[instance]
<= instance_base
recipe = plone.recipe.zope2instance
http-address = 8080



############################################
# Versions Specification
# ----------------------
# Version information supplied here will "pin" Python packages to a particular
# version number, even when you use the "newest" flag running buildout.
# Specifying versions for all packages is a good idea and can prevent
# accidental changes when you add new packages to your buildout.
# Note that versions specified here will override those specified earlier
# in the configuration, including those from the Plone and Zope version
# config files.
#
[versions]
# other pins not in plone
plone.recipe.unifiedinstaller = 5.2b1
buildout.sanitycheck = 1.0.2
collective.recipe.backup = 4.1.0
zc.buildout =
setuptools =
Pillow = 5.1.0
cssselect2 = 0.2.2
soupsieve = 1.9.5

# only for Windows
nt-svcutils = 2.13.0

Please provide assistance, the documentation is obsolete and I didn’t found other answers regarding this issue.

Hi @Fuuzz ,
to me this looks like a compatibility issue between the installed packages. Your buildout complains about two things:

  1. Pillow==5.1.0 cannot be installed for some reason.
  1. The problem is somehow connected to the package “setuptools”

My approach would be:

  • for each of the pinned (specified) versions (in buildout → [versions]) I would search for compatibility with the packages setuptools and zc.buildout. Doing so I found this: Installing Pillow on macOS 10.15.7 / Zope5.5 / python 3.10 · Issue #6131 · python-pillow/Pillow · GitHub , which looks exactly like your problem.
  • And then, I would follow the hint that they provide and see if it is working or not. If not, keep on searching and trying. In this way, you learn about the system and how it works. You will also get faster at solving the problems.

I hope this approach helps you. Once you figured out the solution, please consider replying to this post and share your solution with the community. If you are motivated, you can always dedicate your time to improve the documentation.

Kind regards
Julia