[ZODB-Dev] RE: lost "implementer"
Tim Peters
tim at zope.com
Thu Jan 19 22:20:33 EST 2006
[replying to private email here, with permission]
[Egon Frerich]
> maybe you are interested in this.
>
> I installed Zope 3 (version 3.2) in python 2.4.2 site-packages (Windows
> XP Home - but I assume this is not important).
Windows isn't relevant to the problem you hit, no.
> Then I installed ZODB with ZODB-installer (why? - I assumed then the ZODB
> documentation would be installed too. But that is not the case).
Windows _is_ relevant to this part, though: there's no conventional place
for a distutils installer to put documentation on Windows, so the Windows
installer doesn't even try. You can, however, download the ZODB tarball and
extract its doc/ directory. That contains, among other things, a PDF
version of the ZODB Programming Guide:
http://www.zope.org/Wikis/ZODB/FrontPage/guide/index.html
The version on the web is in fact for ZODB 3.6 (I regenerated & replaced the
docs there as part of releasing ZODB 3.6.0).
> After that I tried to start a Zope 3 instance. But that was not possible
> - I have got an error message: python couldn't find
> zope.interface.implementer.
>
> (Precisely: zope.app.principalannotation.__init__ imports interface from
> zope and 'calls' interface.implementer. 'implementer' is not in interface
> but a class in interface.declarations. interface.__init__ imports
> implementer from interface.declarations)
>
> I uninstalled Zope 3 version 3.2 and installed it again. Now I could
> start Zope.
>
> So: if you install ZODB after Zope 3 'implementer' get lost (maybe only
> under Windows).
That part will happen on all platforms.
> I looked at the ZODB installation log. There I found:
> - - some zope files are installed too, for example interface.__init__
> - - but not 'interface.declarations' and therefore I assume
> interface.__init__ in ZODB is not the same as in the Zope 3 installer.
While it's not _intended_ that you install ZODB "on top of" an existing Zope
installation, this does point to a problem with how things are stitched
together.
The immediate cause is that ZODB 3.6 uses an older version of zope.interface
than Zope 3.2 uses. That's good enough for everything ZODB needs from it,
but not good enough for what Zope 3.2 needs. Since Zope 3.2 and ZODB 3.6
both install zope.interface, the last of those two you install "wins".
A complication is that Zope 2.9 also uses ZODB 3.6, and also installs
zope.interface. ZODB 3.6 uses this version of zope.interface:
Zope3/tags/ZopeX3-3.0.0-Zope-2.8-a4/src/zope/interface
because that's the tag Zope 2.9 development used for its copy of
zope.interface at the time.
I see that someone changed Zope 2.9 to use tag:
Zope3/tags/Zope-3.2.0/src/zope/interface
instead before Zope 2.9 final got released, but ZODB wasn't changed to
match. If ZODB 3.6 had been changed to match, you wouldn't have had a
problem here.
That's my fault, and I apologize for the inconvenience. Alas, I'm not sure
it won't happen again -- while sharing packages across projects has many
attractions, it also creates that many more opportunities for "related"
projects to get out of synch wrt the package versions they include, and it
would take real effort to coordinate which package versions all related
projects include. While there's nothing wrong with "real effort", the
_kind_ of real effort needed is akin to teaching a family of cats spread
across the globe to dance in unison with each other ;-)
More information about the ZODB-Dev
mailing list