Hanno Schlichting: Zope on Python 3
Talk by Hanno Schlichting at the Plone Conference 2017 in Barcelona.
I am currently still the release manager for Zope. There is now a actually a release team.
Plone is built up like this:
- Python is the programming language.
- On top of this is the ZODB and the ZCA (Zope Component Architecture)
- Then the ZTK (Zope ToolKit), just a bunch of packages.
- Above it is Zope (2.x/4.x)
- Then CMF
- Then the Plone CMS
Unrelated to Plone:
- Pyramid sits on top of the ZCA.
- Grok sits on top of the ZTK.
The ZTK (like zope.interface and zope.component) was already mostly Python 3 compatible at the moment when we started working on compatibility for Zope. Jason Madden has done a lot and Marius Gedminas, Tres Seaver, a bunch of others.. There is very little development on the ZTK level, mostly just letting it work on newer Python versions.
Alexander Loechel already gave a talk on this conference about porting RestrictedPython.
We no longer call Zope Zope2, but just Zope. This is version 4. Forget about version 3.
ZODB and the ZTK support Python 2.7, 3.4, 3.5, 3.6, PyPy, PyPy3. Status page of Python 3 compatibility for Zope related packages: https://zope3.pov.lt/py3/ More on the ZTK: https://zopetoolkit.readthedocs.io/
Zope 4.0 beta 2 has been released. That means no new major features should be introduced, focusing on bug fixes. Zope supports Python 2.7, 3.4, 3.5, 3.6. There is no support for PyPy or PyPy3. RestrictedPython is a big reason there, because that is currently just not possible on PyPy. For Acquisition you also have to use a C implementation, so no PyPy.
On https://blog.gocept.com you can find some good reports and stories about the Zope porting sprints.
CMF 2.4 beta is released. It targets Zope 4 compatibility. Currently only Python 2.7, but progress is being made on Python 3 support. The Plone community is also busy with that.
Some other changes in Zope 4, not Python 3 related:
- The distribution name was changed from Zope2 to Zope. Zope2 is now a meta distribution, depending only on Zope. This is similar to ZODB3 being renamed to ZODB. Please keep Zope2 as dependency in your own package, unless it really only works on Zope 4.
- Zope now uses WSGI, and there is a separate ZServer project. ZServer was written in the days of Python 1.5, so really old. We wanted to get rid of that and use WSGI instead. But to not completely lose the old code, we made this new ZServer project. The WSGI server only supports HTTP, not for example FTP. Also not WebDav as that was really to hard, although it is built on top of HTTP. Probably ZServer is never going to be ported to Python 3. So with WSGI you use something like waitress or gunicorn or Apache mod_wsgi to call Zope.
There are more optional projects for Zope now:
- SiteErrorLog (instead just use the standard Python logging and the WSGI solutions for logging)
Some of these have been ported to Python 3, some not.
- There now is a WSGI based zope.testbrowser. The old test browser was based on mechanize, which was not maintained and not ported, and that was not going to happen.
- There is full IPv6 support in waitress.
- Chameleon page templates is in Zope, without needing five.pt anymore.
- zope.globalrequest is in Zope, without needing five.globalrequest anymore.
- Upcoming minor change: support for unicode object ids under Python 3.
Zope 4 was started five or six years ago. The idea was first to remove lots of things to make it simpler. This has been partially reverted. But you might miss some features.
- Expect more Zope 4 beta releases over the next monts.
- Expect a final Zope 4 final release when it is done. :-) That will be when we have the feeling it is stable enough and we are only doing small bug fixes. See the issue tracker.
- There are no plans for Zope 4.1 or 5.0 yet. A nicer ZMI (Zope Management Interface) is being worked on, so it does not look like it was made in the eighties.
Remarks from the audience:
- David: Plone on Zope 4 is being worked on, and is making progress. We will further sprint on it this weekend.
- Eric: We will create a branch for Plone 5.2 this weekend, and try to get an alpha out soon.