further fixes to windows build (pkg_resources / web templates)

now that web templates are found via pkg_resources, then the windows build
should in fact _use_ pkg_resources, rather than exclude it from the build
to prevent nevow exploding upon import due to the zip provider exception,
so that the pkgreshook can do install location based lookups
This commit is contained in:
robk-tahoe 2008-01-23 18:52:43 -07:00
parent 869cf44f68
commit 4662f282cf
4 changed files with 51 additions and 1 deletions

46
windows/pkgreshook.py Normal file
View File

@ -0,0 +1,46 @@
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)

View File

@ -65,7 +65,6 @@ setup_args = {
'options': {
"py2exe": {
"excludes": [
"pkg_resources",
],
"includes": [
],

View File

@ -1,3 +1,5 @@
import pkgreshook # override the pkg_resources zip provider for py2exe deployment
pkgreshook.install() # this is done before nevow is imported by depends
import depends # import dependencies so that py2exe finds them
_junk = depends # appease pyflakes

View File

@ -22,6 +22,9 @@ logmsg('service loaded')
#
# 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()