diff --git a/direct/src/showbase/VFSImporter.py b/direct/src/showbase/VFSImporter.py index ff47434083..c72bd750f4 100644 --- a/direct/src/showbase/VFSImporter.py +++ b/direct/src/showbase/VFSImporter.py @@ -37,7 +37,7 @@ class VFSImporter: path = Filename(self.dir_path, basename) # First, look for Python files. - filename = path + filename = Filename(path) filename.setExtension('py') vfile = vfs.getFile(filename, True) if vfile: @@ -45,7 +45,7 @@ class VFSImporter: # If there's no .py file, but there's a .pyc file, load that # anyway. - filename = path + filename = Filename(path) filename.setExtension(pycExtension) vfile = vfs.getFile(filename, True) if vfile: @@ -56,7 +56,7 @@ class VFSImporter: if desc[2] != imp.C_EXTENSION: continue - filename = path + filename = Filename(path) filename.setExtension(desc[0][1:]) vfile = vfs.getFile(filename, True) if vfile: @@ -70,12 +70,12 @@ class VFSImporter: vfile = vfs.getFile(filename, True) if vfile: return VFSLoader(self, vfile, filename, FTPythonSource, - package = True) + packagePath = path) filename = Filename(path, '__init__.' + pycExtension) vfile = vfs.getFile(filename, True) if vfile: return VFSLoader(self, vfile, filename, FTPythonCompiled, - package = True) + packagePath = path) return None @@ -84,14 +84,14 @@ class VFSLoader: particular .py file or directory. """ def __init__(self, importer, vfile, filename, fileType, - desc = None, package = False): + desc = None, packagePath = None): self.importer = importer self.dir_path = importer.dir_path self.timestamp = vfile.getTimestamp() self.filename = filename self.fileType = fileType self.desc = desc - self.package = package + self.packagePath = packagePath def load_module(self, fullname): if self.fileType == FTCompiledModule: @@ -104,8 +104,9 @@ class VFSLoader: mod = sys.modules.setdefault(fullname, new.module(fullname)) mod.__file__ = self.filename.cStr() mod.__loader__ = self - if self.package: - mod.__path__ = [] + if self.packagePath: + mod.__path__ = [self.packagePath.cStr()] + exec code in mod.__dict__ return mod @@ -115,7 +116,7 @@ class VFSLoader: return f.read() def is_package(self, fullname): - return self.package + return bool(self.packagePath) def get_code(self, fullname): return self._read_code() @@ -143,8 +144,6 @@ class VFSLoader: """ Loads the compiled C/C++ shared object as a Python module, and returns it. """ - print "importing %s" % (fullname) - vfile = vfs.getFile(self.filename, False) # We can only import a compiled module if it already exists on @@ -184,7 +183,7 @@ class VFSLoader: # It's a pyc file; just read it directly. pycVfile = vfs.getFile(self.filename, False) if pycVfile: - return self._loadPyc(pycVfile) + return self._loadPyc(pycVfile, None) return None elif self.fileType == FTCompiledModule: @@ -202,7 +201,7 @@ class VFSLoader: code = None if t_pyc and t_pyc >= self.timestamp: - code = self._loadPyc(pycVfile) + code = self._loadPyc(pycVfile, self.timestamp) if not code: source = self._read_source() @@ -212,13 +211,13 @@ class VFSLoader: return code - def _loadPyc(self, vfile): + def _loadPyc(self, vfile, timestamp): """ Reads and returns the marshal data from a .pyc file. """ code = None f = open(vfile, 'rb') if f.read(4) == imp.get_magic(): t = struct.unpack('