--- /dev/null
+
+def install():
+ """
+ This installs a hook into setuptools' pkg_resources infrastructure, so that resource
+ files can be found in files relative to the runnin executable, in addition to the
+ usual egg and source lookup mechanisms. This overrides the ZipProvider, since that
+ is the lookup mechanism triggered within pkg_resources when running code out of a
+ py2exe or py2app build's library.zip.
+ """
+ import os, sys
+ import pkg_resources, zipimport
+
+ platform_libdirs = {
+ 'darwin': '../Resources/pkg_resources',
+ }
+ exedir = os.path.dirname(sys.executable)
+ libdir = platform_libdirs.get(sys.platform, 'pkg_resources')
+
+ class Provider(pkg_resources.ZipProvider):
+
+ def __init__(self, module):
+ self._module_name = module.__name__
+ pkg_resources.ZipProvider.__init__(self, module)
+
+ def get_resource_filename(self, manager, resource_name):
+ #print 'get_resource_filename(%s, %s)' % (manager, resource_name)
+ path = [exedir, libdir] + self._module_name.split('.') + [resource_name]
+ localfile = os.path.join(*path)
+ #print ' checking(%s)' % (localfile,)
+ if os.path.exists(localfile):
+ #print 'found locally'
+ return localfile
+ else:
+ try:
+ ret = pkg_resources.ZipProvider.get_resource_filename(self, manager, resource_name)
+ #print 'returning %s' % (ret,)
+ return ret
+ except NotImplementedError:
+ #print 'get_resource_filename(%s,%s): not found' % (self._module_name, resource_name)
+ #import traceback
+ #traceback.print_exc()
+ return ''
+
+ pkg_resources.register_loader_type(zipimport.zipimporter, Provider)
+
+
#
# Now with some bootstrap util functions in place, let's try and init things:
try:
+ import pkgreshook # override the pkg_resources zip provider for py2exe deployment
+ pkgreshook.install() # this is done before nevow is imported
+
logmsg('loading base dir')
from allmydata.windows import registry
basedir = registry.get_base_dir_path()