mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-31 00:24:13 +00:00
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:
parent
869cf44f68
commit
4662f282cf
46
windows/pkgreshook.py
Normal file
46
windows/pkgreshook.py
Normal 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)
|
||||
|
||||
|
@ -65,7 +65,6 @@ setup_args = {
|
||||
'options': {
|
||||
"py2exe": {
|
||||
"excludes": [
|
||||
"pkg_resources",
|
||||
],
|
||||
"includes": [
|
||||
],
|
||||
|
@ -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
|
||||
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user