A py2app-built application stopped building properly recently after
various upgrades. It would fail immediately on startup complaining that
it could not find zope.interface. The app uses Twisted, which is why it
needs zope.interface.
I tried adding "zope" or "zope.interface" to "packages", but neither
worked (in particular, the latter resulted in a traceback during the
build).
What did work was to add a blank __init__.py file to the "zope"
directory in site-packages. But I don't know why that was useful. (I
realize it makes zope into a package, but I don't know why that was
necessary because zope.interface can already be imported from the
command line -- presumably due to a pth file).
Details are given below.
-- Russell
Details
Python 2.6, py2app 0.4.3, zope.interface 3.6.1 and Twisted 10.0.0.
zope.interface is installed as follows (contents of site-packages):
zope/
zope/interface/
zope.interface-3.6.1-py2.6-nspkg.pth
zope.interface-3.6.1-py2.6.egg-info/
If I add a blank
zope/__init__.py
then the py2app-built application runs properly.
zope.interface-3.6.1-py2.6-nspkg.pth contains:
import sys,new,os; p =
os.path.join(sys._getframe(1).f_locals['sitedir'], *('zope',)); ie =
os.path.exists(os.path.join(p,'__init__.py')); m = not ie and
sys.modules.setdefault('zope',new.module('zope')); mp = (m or []) and
m.__dict__.setdefault('__path__',[]); (p not in mp) and mp.append(p)
I don't use easy_install (I installed zope.interface with pip), so
easy_install.pth doesn't contain any zope info. For completeness, here
is what it has:
import sys; sys.__plen = len(sys.path)
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:];
p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert =
p+len(new)
_______________________________________________
Pythonmac-SIG maillist - [email protected]
http://mail.python.org/mailman/listinfo/pythonmac-sig
unsubscribe: http://mail.python.org/mailman/options/Pythonmac-SIG