Hello everyone,
I currently have an error that I cannot resolve:
backend-1 | Using Relstorage configuration
backend-1 | 2026-02-27 08:45:12 INFO [chameleon.config:39][MainThread] directory cache: /app/var/cache.
backend-1 | 2026-02-27 08:45:16 INFO [relstorage.blobhelper.cached:176][MainThread] Spawning cache checker for /app/var/blobstorage (creating storage)
backend-1 | 2026-02-27 08:45:16 INFO [relstorage.blobhelper.cached:693][Thread-1 (Blob Cache Checker: /app/var/blobstorage)-spawn-Blob Cache Checker: /app/var/blobstorage] Checking blob cache size for /app/var/blobstorage. (target: 90.00 MB)
backend-1 | 2026-02-27 08:45:16 INFO [relstorage.blobhelper.cached:716][Thread-1 (Blob Cache Checker: /app/var/blobstorage)-spawn-Blob Cache Checker: /app/var/blobstorage] Traversed /app/var/blobstorage to compute size 84.95 MB (<= 90.00 MB); quitting.
backend-1 | 2026-02-27 08:45:16 INFO [relstorage.blobhelper.cached:219][Thread-1 (Blob Cache Checker: /app/var/blobstorage)-spawn-Blob Cache Checker: /app/var/blobstorage] Finished checking /app/var/blobstorage (in 0.000s) with size of 84.95 MB (max: 100.00 MB; target 90.00 MB)
backend-1 | Traceback (most recent call last):
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/xmlconfig.py", line 448, in endElementNS
backend-1 | self.context.end()
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/config.py", line 748, in end
backend-1 | self.stack.pop().finish()
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/config.py", line 918, in finish
backend-1 | actions = self.handler(context, **args)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/plone/autoinclude/zcml.py", line 37, in includePluginsDirective
backend-1 | dists = loader.load_packages(target)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/plone/autoinclude/loader.py", line 192, in load_packages
backend-1 | dists = load_own_packages(target=target)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/plone/autoinclude/loader.py", line 178, in load_own_packages
backend-1 | module = importlib.import_module(module_name)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
backend-1 | return _bootstrap._gcd_import(name[level:], package, level)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
backend-1 | File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
backend-1 | File "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked
backend-1 | ModuleNotFoundError: No module named 'collective.volto.acumbamail'
backend-1 |
backend-1 | During handling of the above exception, another exception occurred:
backend-1 |
backend-1 | Traceback (most recent call last):
backend-1 | File "/app/bin/runwsgi", line 8, in <module>
backend-1 | sys.exit(main())
backend-1 | ^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/Zope2/Startup/serve.py", line 251, in main
backend-1 | return command.run()
backend-1 | ^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/Zope2/Startup/serve.py", line 189, in run
backend-1 | app = self.loadapp(app_spec, name=app_name, relative_to=base,
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/Zope2/Startup/serve.py", line 220, in loadapp
backend-1 | return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/paste/deploy/loadwsgi.py", line 246, in loadapp
backend-1 | return loadobj(APP, uri, name=name, **kw)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/paste/deploy/loadwsgi.py", line 271, in loadobj
backend-1 | return context.create()
backend-1 | ^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/paste/deploy/loadwsgi.py", line 738, in create
backend-1 | return self.object_type.invoke(self)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/paste/deploy/loadwsgi.py", line 198, in invoke
backend-1 | app = context.app_context.create()
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/paste/deploy/loadwsgi.py", line 738, in create
backend-1 | return self.object_type.invoke(self)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/paste/deploy/loadwsgi.py", line 136, in invoke
backend-1 | return fix_call(context.object, context.global_conf, **context.local_conf)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/paste/deploy/util.py", line 61, in fix_call
backend-1 | val = callable(*args, **kw)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/Zope2/Startup/run.py", line 61, in make_wsgi_app
backend-1 | starter.prepare()
backend-1 | File "/app/lib/python3.12/site-packages/Zope2/Startup/starter.py", line 38, in prepare
backend-1 | self.startZope()
backend-1 | File "/app/lib/python3.12/site-packages/Zope2/Startup/starter.py", line 94, in startZope
backend-1 | Zope2.startup_wsgi()
backend-1 | File "/app/lib/python3.12/site-packages/Zope2/__init__.py", line 36, in startup_wsgi
backend-1 | _startup()
backend-1 | File "/app/lib/python3.12/site-packages/Zope2/App/startup.py", line 126, in startup
backend-1 | load_zcml()
backend-1 | File "/app/lib/python3.12/site-packages/Zope2/App/startup.py", line 41, in load_zcml
backend-1 | load_site()
backend-1 | File "/app/lib/python3.12/site-packages/Zope2/App/zcml.py", line 45, in load_site
backend-1 | _context = xmlconfig.file(site_zcml)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/xmlconfig.py", line 717, in file
backend-1 | include(context, name, package)
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/xmlconfig.py", line 614, in include
backend-1 | processxmlfile(f, context)
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/xmlconfig.py", line 464, in processxmlfile
backend-1 | parser.parse(src)
backend-1 | File "/usr/local/lib/python3.12/xml/sax/expatreader.py", line 105, in parse
backend-1 | xmlreader.IncrementalParser.parse(self, source)
backend-1 | File "/usr/local/lib/python3.12/xml/sax/xmlreader.py", line 124, in parse
backend-1 | self.feed(buffer)
backend-1 | File "/usr/local/lib/python3.12/xml/sax/expatreader.py", line 211, in feed
backend-1 | self._parser.Parse(data, isFinal)
backend-1 | File "./Modules/pyexpat.c", line 475, in EndElement
backend-1 | File "/usr/local/lib/python3.12/xml/sax/expatreader.py", line 389, in end_element_ns
backend-1 | self._cont_handler.endElementNS(pair, None)
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/xmlconfig.py", line 450, in endElementNS
backend-1 | self._handle_exception(ex, info)
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/xmlconfig.py", line 448, in endElementNS
backend-1 | self.context.end()
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/config.py", line 748, in end
backend-1 | self.stack.pop().finish()
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/config.py", line 918, in finish
backend-1 | actions = self.handler(context, **args)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/lib/python3.12/site-packages/OFS/metaconfigure.py", line 47, in loadProducts
backend-1 | xmlconfig.include(_context, zcml, package=product)
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/xmlconfig.py", line 614, in include
backend-1 | processxmlfile(f, context)
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/xmlconfig.py", line 464, in processxmlfile
backend-1 | parser.parse(src)
backend-1 | File "/usr/local/lib/python3.12/xml/sax/expatreader.py", line 105, in parse
backend-1 | xmlreader.IncrementalParser.parse(self, source)
backend-1 | File "/usr/local/lib/python3.12/xml/sax/xmlreader.py", line 124, in parse
backend-1 | self.feed(buffer)
backend-1 | File "/usr/local/lib/python3.12/xml/sax/expatreader.py", line 211, in feed
backend-1 | self._parser.Parse(data, isFinal)
backend-1 | File "./Modules/pyexpat.c", line 475, in EndElement
backend-1 | File "/usr/local/lib/python3.12/xml/sax/expatreader.py", line 389, in end_element_ns
backend-1 | self._cont_handler.endElementNS(pair, None)
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/xmlconfig.py", line 450, in endElementNS
backend-1 | self._handle_exception(ex, info)
backend-1 | File "/app/lib/python3.12/site-packages/zope/configuration/xmlconfig.py", line 237, in _handle_exception
backend-1 | raise ZopeXMLConfigurationError(info, ex)
backend-1 | zope.configuration.xmlconfig.ZopeXMLConfigurationError: File "/app/lib/python3.12/site-packages/Products/CMFPlone/meta.zcml", line 67.2-71.8
backend-1 | File "/app/etc/site.zcml", line 10.2-10.39
backend-1 | ModuleNotFoundError: No module named 'collective.volto.acumbamail'
I have a monorepo project; these are the versions I use:
- Python v3.12.11
- Plone v6.1.2
- Volto v18.29.1
The add-on collective.volto.acumbamail (GitHub - macagua/collective.volto.acumbamail: An integration for the Acumbamail service with Plone 6 · GitHub) is an extra add-on, it was created using the command pipx run cookieplone backend_addon
Below, I describe my settings for the collective.volto.acumbamail add-on:
backend/pyproject.toml
...
dependencies = [
"Products.CMFPlone==6.1.2",
"plone.api",
"plone.restapi",
"plone.volto",
"collective.volto.acumbamail",
"collective.honeypot",
"kitconcept.voltolighttheme==7.6.0",
"Products.PrintingMailHost==1.1.8",
]
...
backend/mx.ini
...
[collective.volto.acumbamail]
url = ${settings:github}/macagua/collective.volto.acumbamail.git
pushurl = ${settings:github-pushurl}:macagua/collective.volto.acumbamail.git
branch = main
backend/instance.yaml
default_context:
initial_user_password: 'admin'
zcml_package_includes: project.title, collective.volto.acumbamail
backend/src/project/title/dependencies.zcml
<?xml version="1.0" encoding="utf-8"?>
<configure xmlns="http://namespaces.zope.org/zope">
<include package="plone.restapi" />
<include package="plone.volto" />
<include package="plone.app.caching" />
<include package="plone.app.dexterity" />
<include package="plone.app.iterate" />
<include package="collective.volto.acumbamail" />
<include package="collective.volto.formsupport" />
<include package="collective.honeypot" />
<include package="collective.volto.gdprcookie" />
<include package="collective.geolocationbehavior" />
<include package="plone.formwidget.geolocation" />
<include package="kitconcept.voltolighttheme" />
</configure>
backend/src/project/title/profiles/default/metadata.xml
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<version>1000</version>
<dependencies>
<dependency>profile-plone.volto:default</dependency>
<dependency>profile-plone.app.caching:default</dependency>
<dependency>profile-plone.app.caching:with-caching-proxy</dependency>
<dependency>profile-plone.app.dexterity:default</dependency>
<dependency>profile-plone.app.iterate:default</dependency>
<dependency>profile-collective.volto.acumbamail:default</dependency>
<dependency>profile-collective.volto.formsupport:default</dependency>
<dependency>profile-collective.volto.gdprcookie:default</dependency>
<dependency>profile-collective.geolocationbehavior:default</dependency>
<dependency>profile-plone.formwidget.geolocation:default</dependency>
<dependency>profile-kitconcept.voltolighttheme:default</dependency>
</dependencies>
</metadata>
If I verify that the collective.volto.acumbamail add-on is installed in the virtual environment:
uv pip list | grep "collective"
Using Python 3.12.11 environment at: /home/macagua/projects/.venv
collective-address 1.7.dev0 /home/macagua/projects/backend/sources/collective.address
collective-geolocationbehavior 1.7.3.dev0 /home/macagua/projects/backend/sources/collective.geolocationbehavior
collective-honeypot 4.0.0
collective-mockmailhost 3.0.0
collective-monkeypatcher 2.0.0
collective-venue 4.2.dev0 /home/macagua/projects/backend/sources/collective.venue
collective-volto-acumbamail 1.0.0a0 /home/macagua/projects/backend/sources/collective.volto.acumbamail
collective-volto-formsupport 3.3.3.dev0 /home/macagua/projects/backend/sources/collective.volto.formsupport
collective-volto-gdprcookie 1.0.5.dev0 /home/macagua/projects/backend/sources/collective.volto.gdprcookie
collective-volto-otp 1.0.1
If I validate that the collective.volto.acumbamail module is located in the backend/sources/collective.volto.acumbamail directory:
ls backend/sources/
collective.address collective.geolocationbehavior collective.venue collective.volto.acumbamail collective.volto.formsupport collective.volto.gdprcookie plone.formwidget.geolocation
So, the collective.volto.acumbamail add-on is installed in the virtual environment, but I still get the error ModuleNotFoundError: No module named 'collective.volto.acumbamail'
when I start the backend Docker container.
If I change to the backend/sources/collective.volto.acumbamail directory to check if the collective.volto.acumbamail add-on is installed correctly via Makefile:
make install
make create-site
make start
And the Zope instance starts without any error.
If I remove the collective.volto.acumbamail add-on from the backend/mx.ini file, the Zope instance starts without any error.
Also if I remove the collective.volto.acumbamail add-on from the backend/instance.yaml file, the Zope instance starts without any error.
Please, can you help me to resolve this error? I have been trying to solve it for a while, but I cannot find the solution.
Thank you in advance for your help!