Plone 6.1.1 released - Announcements - Plone
"Important Announcements, Plone releases, and security-related notifications. Recommended subscription for all Plone developers and site admins" <[email protected]> Tue, 25 Mar 2025 10:23:14 -0500
| Newsgroups | gmane.comp.web.zope.plone.announce |
|---|---|
| Message-ID | <mailman.9770.1742978781.1636.plone-announce@lists.sourceforge.net> |
--===============7683202627294364788==
Content-Type: multipart/alternative;
boundary="Apple-Mail=_45ABA4A4-DFA7-4D97-B3A1-261F29C805B8"
--Apple-Mail=_45ABA4A4-DFA7-4D97-B3A1-261F29C805B8
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=us-ascii
>=20
> https://community.plone.org/t/plone-6-1-1-released/21627
>=20
> Plone 6.1.1 released
> Release notes for Plone 6.1.1
>=20
> Released: March 25, 2025
> Check the release schedule =
<https://plone.org/download/release-schedule>.
> Read the upgrade guide =
<https://6.docs.plone.org/backend/upgrading/version-specific-migration/upg=
rade-to-61.html>, explaining the biggest changes compared to 6.0.
> Canonical place for these release notes =
<https://dist.plone.org/release/6.1.1/RELEASE-NOTES.md> and the full =
packages changelog <https://dist.plone.org/release/6.1.1/changelog.txt>.
> If you want to jump straight in, here are some important links:
>=20
> With pip you can use the constraints file at =
https://dist.plone.org/release/6.1.1/constraints.txt. This includes the =
extra and ecosystem constraints, which are separate in the Buildout =
configs.
> With Buildout you can use the versions file at =
https://dist.plone.org/release/6.1.1/versions.cfg, plus optionally =
versions-extra.cfg =
<https://dist.plone.org/release/6.1.1/versions-extra.cfg> and =
versions-ecosystem.cfg =
<https://dist.plone.org/release/6.1.1/versions-ecosystem.cfg>.
> Use Docker image plone-backend.
> Highlights
>=20
> These are the main changes since 6.1.0:
>=20
> Lots of packages: Replace pkg_resources with =
importlib.metadata/importlib.resources. See the "Distribution not found" =
section below for why this is important.
> Zope:
> Add configuration switch to turn off the built-in XML-RPC support.
> Hardly anyone needs XML-RPC, and it can lead to strange errors when =
you get malicious and/or spam requests.
> Add configuration switch for the maximum allowed number of form =
fields.
> multipart version 1.2.1 introduced a default value of 128, Zope now
> sets it to 1024.
> plone.recipe.zope2instance: Support for new Zope option enable-xmlrpc.
> Usage: zope-conf-additional =3D enable-xmlrpc off.
> Setting this is recommended for most sites.
> plone.autoinclude:
> If a distribution is not found, try to normalize the name like recent =
setuptools is doing and try again.
> Fix importing module when the module name differs from the project =
name.
> This can easily happen with setuptools 75.8.1, though 75.8.2 fixes =
most of it.
> Products.CMFPlone:
> RegistrationTool: add method principal_id_or_login_name_exists.
> This is factored out from the isMemberIdAllowed method, which now =
calls this after checking the allowed member id pattern.
> Fix moving portal actions between categories.
> Use contentbrowser options for TinyMCE image/link browser. This also =
fixes the basePath calculation for uploading.
> collective.recipe.omelette (only relevant if you use Buildout):
> No longer generate __init__.py files with namespace stanza in =
parts/omelette.
> I think this was originally done to be able to go to parts/omelette, =
start a standard Python, and be able to import everything.
> With current Python versions the __init__.py files are not needed for =
a directory to be importable.
> Remove products recipe option and special handling of Products =
namespace.
> Zope 4 and higher no longer have the concept of a products directory.
> You can still use packages =3D path/to/products_dir Products if you =
need something similar.
> Fix handling checkouts of native namespace packages.
> plone.api:
> Added the content API helper function api.content.get_path, which gets =
either the relative or absolute path of an object.
> Added two new portal API functions:
> api.portal.get_vocabulary: Get a vocabulary by name.
> api.portal.get_vocabulary_names: Get a list of all available =
vocabulary names.
> Add the api.content.iter_ancestors function for iterating over an =
object acquisition chain.
> Implement plone.api.addon module.
> plone.app.users: Email validation: use new registration tool method =
principal_id_or_login_name_exists if available.
> This helps in some corner cases when email-as-login is used. The =
method is in the new Products.CMFPlone release.
> plone.schema: Fix email validation:
> allow apostrophes
> allow accented characters
> allow ampersand in the user part
> do not allow spaces.
> accept TLDs with more than 4 characters
> plone.staticresources: Update to latest mockup. This improves the new =
content browser widget (used for uploading images or selecting content).
> plone.app.caching:
> Trigger purge on workflow change.
> Fix purging for deleted content.
> plone.exportimport:
> Report object creation during import using the plone-importer cli. Use =
--quiet to disable it.
> Do not stop the import if an object parent is missing.
> plone.restapi:
> Apply block serialization and deserialization transforms also to JSON =
fields.
> This includes converting internal URLs to resolveuid URLs.
> Add a new endpoint, @inherit, for getting values from behaviors =
inherited from ancestors in the object hierarchy.
> Add a @userschema/registration endpoint to get the fields for the =
registration form.
> Added multilingual feature to @site endpoint.
> Volto frontend
>=20
> The default frontend for new Plone 6 sites is Volto.
> Note that this is a JavaScript frontend that you need to run in a =
separate process with NodeJS.
>=20
> Plone 6.1 is meant to be used with Volto 18.
> Latest release is 18.10.1 =
<https://www.npmjs.com/package/@plone/volto/v/18.10.1>. See the =
changelog =
<https://github.com/plone/volto/blob/18.10.1/packages/volto/CHANGELOG.md>.=
>=20
> Classic UI
>=20
> The HTML based and server side rendered UI that was present in Plone =
5.2 and earlier major Plone releases is still available and has also =
been updated and improved upon in Plone 6.0 and 6.1. Our documentation =
now refers to this frontend as 'Classic UI'.
>=20
> Python compatibility
>=20
> This release supports Python 3.10, 3.11, 3.12, and 3.13.
>=20
> pip, buildout, setuptools
>=20
> In Plone core we use these versions to install Plone:
>=20
> packaging=3D=3D24.2
> pip=3D=3D25.0.1
> setuptools=3D=3D75.8.2
> wheel=3D=3D0.45.1
> zc.buildout=3D=3D4.1.4
> In general you are free to use whatever versions work for you, but =
these worked for us.
>=20
> Distribution not found
>=20
> On February 25, setuptools 75.8.1 was released. This had an innocent =
sounding change: "Fix wheel file naming to follow binary distribution =
specification." The consequences were large. Any namespace packages that =
are released using this or a later version, have a slightly different =
"binary wheel" name, for example plone_autoinclude-2.0.2.whl with an =
underscore instead of plone.autoinclude-2.0.2.whl with a dot. Result is =
that you can easily get a "distribution not found" error when starting =
Plone, or even during install.
>=20
> This new Plone 6.1.1 should fix all problems. If you run into problems =
with this Plone version or an older one, the following observations may =
help.
>=20
> setuptools 75.8.2 fixes some of the problems: it tries to find a =
distribution by multiple names, for example plone.autoinclude, =
plone-autoinclude, plone_autoinclude. So use this version or a higher =
one.
> Buildout had more problems than pip, but that should be fixed with =
zc.buildout 4.1.4.
> In pip-based projects I had more problems on Python 3.9 than on newer =
versions. (Plone 6.1 cannot use 3.9, so no problem there.) I had =
slightly more problems on 3.13 than on 3.11 and 3.12. So if all else =
fails, switching the Python version may help.
> plone.autoinclude was the package that needed the most changes, =
because this uses entry points and here we quickly ran into problems in =
finding a distribution. Latest 2.0.3 has all the fixes that we found =
necessary. It needs Python 3.9 minimum.
> A lot of Plone packages where using the pkg_resources part of =
setuptools to check for the existence of a distribution, or do other =
tasks related to Python packages. This is deprecated, and can mostly be =
replaced by switching to importlib.metadata, which is a library =
available in standard Python since version 3.8. We made the switch for =
most packages. See CMFPlone issue 4126 =
<https://github.com/plone/Products.CMFPlone/issues/4126> for a big list =
of packages with changes. This also contains examples of changes that =
needed to be made.
> You may be using add-ons or have own code that uses pkg_resources. You =
should probably replace that, getting inspiration from the previous =
link. You can leave declare_namespace lines untouched; that is something =
for another time.
> If you have a namespace package that you want to support in projects =
that cannot switch to the latest setuptools or zc.buildout (which both =
require Python 3.9 minimum), you can restrict which setuptools version =
is used while building the binary wheel. You need as maximum 75.8.0. We =
did this for plone.restapi and plone.autoinclude. To do this, the =
package needs a pyproject.toml file with contents like this:
> [build-system]
> requires =3D ["setuptools>=3D68.2,<=3D75.8.0"]
> or this:
>=20
> [build-system]
> requires =3D ["setuptools=3D=3D75.8.0"]
> This needs zest.releaser 9.5.0, if you are using this for releasing =
your packages to PyPI. See its changelog =
<https://github.com/zestsoftware/zest.releaser/blob/9.5.0/CHANGES.rst> =
for this and other recent changes, also relates to the new setuptools =
versions.
>=20
> Note that on March 19, setuptools 77 was released with initial support =
for so called "license expressions" (PEP 639 =
<https://peps.python.org/pep-0639/#add-license-expression-field>). This =
gave errors when I tried making releases to PyPI: =
"twine.exceptions.InvalidDistribution: Metadata is missing required =
fields: Name, Version." . So this may need some changes in setup.py/cfg =
or pyproject.toml. So if you try to upload to PyPI and get a similar =
error, you may indeed want to restrict the setuptools version to =
something less than 77.
>=20
> Installation
>=20
> For installation instructions, see the documentation =
<https://6.docs.plone.org/install/index.html>.
>=20
> Issues
>=20
> If you find any issues, please report them in the main issue tracker =
<https://github.com/plone/Products.CMFPlone/issues>.
>=20
--Apple-Mail=_45ABA4A4-DFA7-4D97-B3A1-261F29C805B8
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
charset=us-ascii
<html><head><base href="https://community.plone.org/t/plone-6-1-1-released/21627"><meta http-equiv="content-type" content="text/html; charset=us-ascii"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div class="Apple-Mail-URLShareUserContentTopClass"><br></div><div class="Apple-Mail-URLShareWrapperClass" style="position: relative !important;"><blockquote type="cite" style="border-left-style: none; color: inherit; padding: inherit; margin: inherit;"><base href="https://community.plone.org/t/plone-6-1-1-released/21627"><style id="print">
@media print {
body {
margin: 2mm 9mm;
}
.original-url {
display: none;
}
#article .float.left {
float: left !important;
}
#article .float.right {
float: right !important;
}
#article .float {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
}
</style><title>Plone 6.1.1 released - Announcements - Plone Community</title><div><div class="original-url"><br><a href="https://community.plone.org/t/plone-6-1-1-released/21627">https://community.plone.org/t/plone-6-1-1-released/21627</a><br><br></div><div id="article" role="article" class="system exported" style="text-rendering: optimizelegibility; font-family: -apple-system-font; font-size: 1.2em; line-height: 1.5em; margin: 0px; padding: 0px;">
<!-- This node will contain a number of div.page. -->
<div class="page" style="text-align: start; overflow-wrap: break-word; max-width: 100%;"><h1 class="title" style="font-weight: bold; font-size: 1.95552em; line-height: 1.2141em; margin-top: 0px; margin-bottom: 0.5em; text-align: start; hyphens: manual; display: block; max-width: 100%;">Plone 6.1.1 released</h1><h1 style="font-weight: bold; font-size: 1.5em; line-height: 1.4em; max-width: 100%;"><span class="converted-anchor" style="max-width: 100%;"></span>Release notes for Plone 6.1.1</h1>
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">Released: March 25, 2025</li>
<li style="max-width: 100%;">Check the <a href="https://plone.org/download/release-schedule" data-clicks="3" aria-label="release schedule link clicked 3 times" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">release schedule</a>.</li>
<li style="max-width: 100%;">Read the <a href="https://6.docs.plone.org/backend/upgrading/version-specific-migration/upgrade-to-61.html" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">upgrade guide</a>, explaining the biggest changes compared to 6.0.</li>
<li style="max-width: 100%;">Canonical place for these <a href="https://dist.plone.org/release/6.1.1/RELEASE-NOTES.md" data-clicks="2" aria-label="release notes link clicked 2 times" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">release notes</a> and the full <a href="https://dist.plone.org/release/6.1.1/changelog.txt" data-clicks="1" aria-label="packages changelog link clicked 1 time" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">packages changelog</a>.</li>
</ul>
<p style="max-width: 100%;">If you want to jump straight in, here are some important links:</p>
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">With pip you can use the constraints file at <a href="https://dist.plone.org/release/6.1.1/constraints.txt" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">https://dist.plone.org/release/6.1.1/constraints.txt</a>. This includes the extra and ecosystem constraints, which are separate in the Buildout configs.</li>
<li style="max-width: 100%;">With Buildout you can use the versions file at <a href="https://dist.plone.org/release/6.1.1/versions.cfg" data-clicks="1" aria-label="https://dist.plone.org/release/6.1.1/versions.cfg link clicked 1 time" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">https://dist.plone.org/release/6.1.1/versions.cfg</a>, plus optionally <a href="https://dist.plone.org/release/6.1.1/versions-extra.cfg" data-clicks="1" aria-label="versions-extra.cfg link clicked 1 time" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;"><code style="max-width: 100%;">versions-extra.cfg</code></a> and <a href="https://dist.plone.org/release/6.1.1/versions-ecosystem.cfg" data-clicks="1" aria-label="versions-ecosystem.cfg link clicked 1 t
ime" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;"><code style="max-width: 100%;">versions-ecosystem.cfg</code></a>.</li>
<li style="max-width: 100%;">Use Docker image <code style="max-width: 100%;">plone-backend</code>.</li>
</ul>
<h2 style="font-weight: bold; font-size: 1.43em; max-width: 100%;"><span class="converted-anchor" style="max-width: 100%;"></span>Highlights</h2>
<p style="max-width: 100%;">These are the main changes since 6.1.0:</p>
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">Lots of packages: Replace <code style="max-width: 100%;">pkg_resources</code> with <code style="max-width: 100%;">importlib.metadata</code>/<code style="max-width: 100%;">importlib.resources</code>. See the "Distribution not found" section below for why this is important.</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">Zope</code>:
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">Add configuration switch to turn off the built-in XML-RPC support.<br style="max-width: 100%;">
Hardly anyone needs XML-RPC, and it can lead to strange errors when you get malicious and/or spam requests.</li>
<li style="max-width: 100%;">Add configuration switch for the maximum allowed number of form fields.<br style="max-width: 100%;">
<code style="max-width: 100%;">multipart</code> version 1.2.1 introduced a default value of 128, Zope now<br style="max-width: 100%;">
sets it to 1024.</li>
</ul>
</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">plone.recipe.zope2instance</code>: Support for new Zope option <code style="max-width: 100%;">enable-xmlrpc</code>.<br style="max-width: 100%;">
Usage: <code style="max-width: 100%;">zope-conf-additional = enable-xmlrpc off</code>.<br style="max-width: 100%;">
<strong style="max-width: 100%;">Setting this is recommended for most sites.</strong></li>
<li style="max-width: 100%;"><code style="max-width: 100%;">plone.autoinclude</code>:
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">If a distribution is not found, try to normalize the name like recent setuptools is doing and try again.</li>
<li style="max-width: 100%;">Fix importing module when the module name differs from the project name.<br style="max-width: 100%;">
This can easily happen with <code style="max-width: 100%;">setuptools</code> 75.8.1, though 75.8.2 fixes most of it.</li>
</ul>
</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">Products.CMFPlone</code>:
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">RegistrationTool: add method <code style="max-width: 100%;">principal_id_or_login_name_exists</code>.<br style="max-width: 100%;">
This is factored out from the <code style="max-width: 100%;">isMemberIdAllowed</code> method, which now calls this after checking the allowed member id pattern.</li>
<li style="max-width: 100%;">Fix moving portal actions between categories.</li>
<li style="max-width: 100%;">Use contentbrowser options for TinyMCE image/link browser. This also fixes the <code style="max-width: 100%;">basePath</code> calculation for uploading.</li>
</ul>
</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">collective.recipe.omelette</code> (only relevant if you use Buildout):
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">No longer generate <code style="max-width: 100%;">__init__.py</code> files with namespace stanza in <code style="max-width: 100%;">parts/omelette</code>.<br style="max-width: 100%;">
I think this was originally done to be able to go to <code style="max-width: 100%;">parts/omelette</code>, start a standard Python, and be able to import everything.<br style="max-width: 100%;">
With current Python versions the <code style="max-width: 100%;">__init__.py</code> files are not needed for a directory to be importable.</li>
<li style="max-width: 100%;">Remove <code style="max-width: 100%;">products</code> recipe option and special handling of <code style="max-width: 100%;">Products</code> namespace.<br style="max-width: 100%;">
Zope 4 and higher no longer have the concept of a products directory.<br style="max-width: 100%;">
You can still use <code style="max-width: 100%;">packages = path/to/products_dir Products</code> if you need something similar.</li>
<li style="max-width: 100%;">Fix handling checkouts of native namespace packages.</li>
</ul>
</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">plone.api</code>:
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">Added the content API helper function <code style="max-width: 100%;">api.content.get_path</code>, which gets either the relative or absolute path of an object.</li>
<li style="max-width: 100%;">Added two new portal API functions:
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;"><code style="max-width: 100%;">api.portal.get_vocabulary</code>: Get a vocabulary by name.</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">api.portal.get_vocabulary_names</code>: Get a list of all available vocabulary names.</li>
</ul>
</li>
<li style="max-width: 100%;">Add the <code style="max-width: 100%;">api.content.iter_ancestors</code> function for iterating over an object acquisition chain.</li>
<li style="max-width: 100%;">Implement <code style="max-width: 100%;">plone.api.addon</code> module.</li>
</ul>
</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">plone.app.users</code>: Email validation: use new registration tool method <code style="max-width: 100%;">principal_id_or_login_name_exists</code> if available.<br style="max-width: 100%;">
This helps in some corner cases when email-as-login is used. The method is in the new <code style="max-width: 100%;">Products.CMFPlone</code> release.</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">plone.schema</code>: Fix email validation:
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">allow apostrophes</li>
<li style="max-width: 100%;">allow accented characters</li>
<li style="max-width: 100%;">allow ampersand in the user part</li>
<li style="max-width: 100%;">do not allow spaces.</li>
<li style="max-width: 100%;">accept TLDs with more than 4 characters</li>
</ul>
</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">plone.staticresources</code>: Update to latest <code style="max-width: 100%;">mockup</code>. This improves the new content browser widget (used for uploading images or selecting content).</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">plone.app.caching</code>:
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">Trigger purge on workflow change.</li>
<li style="max-width: 100%;">Fix purging for deleted content.</li>
</ul>
</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">plone.exportimport</code>:
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">Report object creation during import using the <code style="max-width: 100%;">plone-importer</code> cli. Use <code style="max-width: 100%;">--quiet</code> to disable it.</li>
<li style="max-width: 100%;">Do not stop the import if an object parent is missing.</li>
</ul>
</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">plone.restapi</code>:
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;">Apply block serialization and deserialization transforms also to JSON fields.<br style="max-width: 100%;">
This includes converting internal URLs to resolveuid URLs.</li>
<li style="max-width: 100%;">Add a new endpoint, <code style="max-width: 100%;">@inherit</code>, for getting values from behaviors inherited from ancestors in the object hierarchy.</li>
<li style="max-width: 100%;">Add a <code style="max-width: 100%;">@userschema/registration</code> endpoint to get the fields for the registration form.</li>
<li style="max-width: 100%;">Added <code style="max-width: 100%;">multilingual</code> feature to <code style="max-width: 100%;">@site</code> endpoint.</li>
</ul>
</li>
</ul>
<h2 style="font-weight: bold; font-size: 1.43em; max-width: 100%;"><span class="converted-anchor" style="max-width: 100%;"></span>Volto frontend</h2>
<p style="max-width: 100%;">The default frontend for new Plone 6 sites is Volto.<br style="max-width: 100%;">
Note that this is a JavaScript frontend that you need to run in a separate process with NodeJS.</p>
<p style="max-width: 100%;">Plone 6.1 is meant to be used with Volto 18.<br style="max-width: 100%;">
Latest release is <a href="https://www.npmjs.com/package/@plone/volto/v/18.10.1" data-clicks="1" aria-label="18.10.1 link clicked 1 time" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">18.10.1</a>. See the <a href="https://github.com/plone/volto/blob/18.10.1/packages/volto/CHANGELOG.md" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">changelog</a>.</p>
<h2 style="font-weight: bold; font-size: 1.43em; max-width: 100%;"><span class="converted-anchor" style="max-width: 100%;"></span>Classic UI</h2>
<p style="max-width: 100%;">The HTML based and server side rendered UI that was present in Plone 5.2 and earlier major Plone releases is still available and has also been updated and improved upon in Plone 6.0 and 6.1. Our documentation now refers to this frontend as 'Classic UI'.</p>
<h2 style="font-weight: bold; font-size: 1.43em; max-width: 100%;"><span class="converted-anchor" style="max-width: 100%;"></span>Python compatibility</h2>
<p style="max-width: 100%;">This release supports Python 3.10, 3.11, 3.12, and 3.13.</p>
<h2 style="font-weight: bold; font-size: 1.43em; max-width: 100%;"><span class="converted-anchor" style="max-width: 100%;"></span>pip, buildout, setuptools</h2>
<p style="max-width: 100%;">In Plone core we use these versions to install Plone:</p>
<div class="scrollable" style="max-width: 100%; overflow-x: scroll; overflow-wrap: normal;"><pre style="white-space: pre; max-width: 100%; font-family: -apple-system-ui-monospaced, Menlo; font-size: 0.87em; line-height: 1.45em;"><code data-highlighted="yes" style="max-width: 100%;"><span style="max-width: 100%;">packaging</span>==<span style="max-width: 100%;">24.2</span>
<span style="max-width: 100%;">pip</span>==<span style="max-width: 100%;">25.0</span>.<span style="max-width: 100%;">1</span>
<span style="max-width: 100%;">setuptools</span>==<span style="max-width: 100%;">75.8</span>.<span style="max-width: 100%;">2</span>
<span style="max-width: 100%;">wheel</span>==<span style="max-width: 100%;">0.45</span>.<span style="max-width: 100%;">1</span>
<span style="max-width: 100%;">zc.buildout</span>==<span style="max-width: 100%;">4.1</span>.<span style="max-width: 100%;">4</span>
</code></pre></div>
<p style="max-width: 100%;">In general you are free to use whatever versions work for you, but these worked for us.</p>
<h2 style="font-weight: bold; font-size: 1.43em; max-width: 100%;"><span class="converted-anchor" style="max-width: 100%;"></span>Distribution not found</h2>
<p style="max-width: 100%;">On February 25, <code style="max-width: 100%;">setuptools</code> 75.8.1 was released. This had an innocent sounding change: "Fix wheel file naming to follow binary distribution specification." The consequences were large. Any namespace packages that are released using this or a later version, have a slightly different "binary wheel" name, for example <code style="max-width: 100%;">plone_autoinclude-2.0.2.whl</code> with an underscore instead of <code style="max-width: 100%;">plone.autoinclude-2.0.2.whl</code> with a dot. Result is that you can easily get a "distribution not found" error when starting Plone, or even during install.</p>
<p style="max-width: 100%;">This new Plone 6.1.1 should fix all problems. If you run into problems with this Plone version or an older one, the following observations may help.</p>
<ul class="clear" style="max-width: 100%; clear: both;">
<li style="max-width: 100%;"><code style="max-width: 100%;">setuptools</code> 75.8.2 fixes some of the problems: it tries to find a distribution by multiple names, for example <code style="max-width: 100%;">plone.autoinclude</code>, <code style="max-width: 100%;">plone-autoinclude</code>, <code style="max-width: 100%;">plone_autoinclude</code>. So use this version or a higher one.</li>
<li style="max-width: 100%;">Buildout had more problems than pip, but that should be fixed with <code style="max-width: 100%;">zc.buildout</code> 4.1.4.</li>
<li style="max-width: 100%;">In pip-based projects I had more problems on Python 3.9 than on newer versions. (Plone 6.1 cannot use 3.9, so no problem there.) I had slightly more problems on 3.13 than on 3.11 and 3.12. So if all else fails, switching the Python version may help.</li>
<li style="max-width: 100%;"><code style="max-width: 100%;">plone.autoinclude</code> was the package that needed the most changes, because this uses entry points and here we quickly ran into problems in finding a distribution. Latest 2.0.3 has all the fixes that we found necessary. It needs Python 3.9 minimum.</li>
<li style="max-width: 100%;">A lot of Plone packages where using the <code style="max-width: 100%;">pkg_resources</code> part of <code style="max-width: 100%;">setuptools</code> to check for the existence of a distribution, or do other tasks related to Python packages. This is deprecated, and can mostly be replaced by switching to <code style="max-width: 100%;">importlib.metadata</code>, which is a library available in standard Python since version 3.8. We made the switch for most packages. See <a href="https://github.com/plone/Products.CMFPlone/issues/4126" data-clicks="1" aria-label="CMFPlone issue 4126 link clicked 1 time" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;"><code style="max-width: 100%;">CMFPlone</code> issue 4126</a> for a big list of pack
ages with changes. This also contains examples of changes that needed to be made.</li>
<li style="max-width: 100%;">You may be using add-ons or have own code that uses <code style="max-width: 100%;">pkg_resources</code>. You should probably replace that, getting inspiration from the previous link. You can leave <code style="max-width: 100%;">declare_namespace</code> lines untouched; that is something for another time.</li>
<li style="max-width: 100%;">If you have a namespace package that you want to support in projects that cannot switch to the latest <code style="max-width: 100%;">setuptools</code> or <code style="max-width: 100%;">zc.buildout</code> (which both require Python 3.9 minimum), you can restrict which <code style="max-width: 100%;">setuptools</code> version is used while building the binary wheel. You need as maximum 75.8.0. We did this for <code style="max-width: 100%;">plone.restapi</code> and <code style="max-width: 100%;">plone.autoinclude</code>. To do this, the package needs a <code style="max-width: 100%;">pyproject.toml</code> file with contents like this:</li>
</ul>
<div class="scrollable" style="max-width: 100%; overflow-x: scroll; overflow-wrap: normal;"><pre style="white-space: pre; max-width: 100%; font-family: -apple-system-ui-monospaced, Menlo; font-size: 0.87em; line-height: 1.45em;"><code data-highlighted="yes" style="max-width: 100%;"><span style="max-width: 100%;">[build-system]</span>
<span style="max-width: 100%;">requires</span> = [<span style="max-width: 100%;">"setuptools>=68.2,<=75.8.0"</span>]
</code></pre></div>
<p style="max-width: 100%;">or this:</p>
<div class="scrollable" style="max-width: 100%; overflow-x: scroll; overflow-wrap: normal;"><pre style="white-space: pre; max-width: 100%; font-family: -apple-system-ui-monospaced, Menlo; font-size: 0.87em; line-height: 1.45em;"><code data-highlighted="yes" style="max-width: 100%;"><span style="max-width: 100%;">[build-system]</span>
<span style="max-width: 100%;">requires</span> = [<span style="max-width: 100%;">"setuptools==75.8.0"</span>]
</code></pre></div>
<p style="max-width: 100%;">This needs <code style="max-width: 100%;">zest.releaser</code> 9.5.0, if you are using this for releasing your packages to PyPI. See its <a href="https://github.com/zestsoftware/zest.releaser/blob/9.5.0/CHANGES.rst" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">changelog</a> for this and other recent changes, also relates to the new <code style="max-width: 100%;">setuptools</code> versions.</p>
<p style="max-width: 100%;">Note that on March 19, <code style="max-width: 100%;">setuptools</code> 77 was released with initial support for so called "license expressions" (<a href="https://peps.python.org/pep-0639/#add-license-expression-field" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">PEP 639</a>). This gave errors when I tried making releases to PyPI: "twine.exceptions.InvalidDistribution: Metadata is missing required fields: Name, Version." . So this may need some changes in <code style="max-width: 100%;">setup.py/cfg</code> or <code style="max-width: 100%;">pyproject.toml</code>. So if you try to upload to PyPI and get a similar error, you may indeed want to restrict the setuptools version to something less than 77.</p>
<h2 style="font-weight: bold; font-size: 1.43em; max-width: 100%;"><span class="converted-anchor" style="max-width: 100%;"></span>Installation</h2>
<p style="max-width: 100%;">For installation instructions, see the <a href="https://6.docs.plone.org/install/index.html" data-clicks="1" aria-label="documentation link clicked 1 time" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">documentation</a>.</p>
<h2 style="font-weight: bold; font-size: 1.43em; max-width: 100%;"><span class="converted-anchor" style="max-width: 100%;"></span>Issues</h2>
<p style="max-width: 100%;">If you find any issues, please report them in the <a href="https://github.com/plone/Products.CMFPlone/issues" style="color: rgb(65, 110, 210); max-width: 100%; text-decoration: underline;">main issue tracker</a>.</p><p style="max-width: 100%;"></p></div></div></div></blockquote></div></body></html>
--Apple-Mail=_45ABA4A4-DFA7-4D97-B3A1-261F29C805B8--
--===============7683202627294364788==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
--===============7683202627294364788==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Plone-Announce mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/plone-announce
--===============7683202627294364788==--