In python 2, StringIO does not implement the context handler protocol. In py2app, calls to zipio.open assume that a context handler is present.
This is fairly easily fixed by doing a version check, and if on python 2, changing the following lines to:
84: return contextlib.closing(_BytesIO(data)) 90: return contextlib.closing(_StringIO(data))
You'll of course have to import contextlib as well.