[original question asked, accompanied by a long story, how to perform acquisition-based actions when Zope starts up, in my case to initialize properties in my product classes based on Zope Python Scripts and data in DTML methods]
Stick a call at the end of z2.py after Zope has loaded.
Excellent! Radical!! Obvious!!! Wonder if I would have ever thought of that, and if I had, whether I would have thought it too crude.... Come to think of it, maybe z2.py should import an initially empty init.p (or site-init.py or zope-init.py or startup.py or whatever, in the root Zope directory where z2.py lives) to establish a clear hook for startup actions. Yes, people can edit z2.py, but do they realize that? Do they even realize z2.py exists? Do they assume z2.py is full of black magic and they shouldn't touch it? Do they realize that z2.py *is* the startup script? And you don't want to have to re-edit z2.py with every new release -- much easier just to copy over your initialization file for the new release; actually, that suggests that the init file should *not* be in the Zope root, but rather in INSTANCE_HOME (if using that scheme) so that you wouldn't have to do anything to move to a new version of Zope. [This isn't really big enough for a fishbowl propsoal is it? It would be great if someone from ZC would just say "Done."....]