def initPackedAppEnvironment(self): """ This function sets up the Python environment suitably for running a packed app. It should only run once in any given session (and it includes logic to ensure this). """ if self.packedAppEnvironmentInitialized: return self.packedAppEnvironmentInitialized = True vfs = VirtualFileSystem.getGlobalPtr() # Now set up Python to import this stuff. VFSImporter.register() sys.path.append(self.multifileRoot) # Make sure that $MAIN_DIR is set to the p3d root before we # start executing the code in this file. ExecutionEnvironment.setEnvironmentVariable( "MAIN_DIR", Filename(self.multifileRoot).toOsSpecific()) # Put our root directory on the model-path, too. getModelPath().appendDirectory(self.multifileRoot) if not self.trueFileIO: # Replace the builtin open and file symbols so user code will get # our versions by default, which can open and read files out of # the multifile. builtins.open = file.open if sys.version_info < (3, 0): builtins.file = file.open builtins.execfile = file.execfile os.listdir = file.listdir os.walk = file.walk os.path.join = file.join os.path.isfile = file.isfile os.path.isdir = file.isdir os.path.exists = file.exists os.path.lexists = file.lexists os.path.getmtime = file.getmtime os.path.getsize = file.getsize sys.modules['glob'] = glob self.checkDiskUsage()
def initPackedAppEnvironment(self): """ This function sets up the Python environment suitably for running a packed app. It should only run once in any given session (and it includes logic to ensure this). """ if self.packedAppEnvironmentInitialized: return self.packedAppEnvironmentInitialized = True vfs = VirtualFileSystem.getGlobalPtr() # Now set up Python to import this stuff. VFSImporter.register() sys.path.append(self.multifileRoot) # Make sure that $MAIN_DIR is set to the p3d root before we # start executing the code in this file. ExecutionEnvironment.setEnvironmentVariable("MAIN_DIR", Filename(self.multifileRoot).toOsSpecific()) # Put our root directory on the model-path, too. getModelPath().appendDirectory(self.multifileRoot) if not self.trueFileIO: # Replace the builtin open and file symbols so user code will get # our versions by default, which can open and read files out of # the multifile. builtins.open = file.open if sys.version_info < (3, 0): builtins.file = file.open builtins.execfile = file.execfile os.listdir = file.listdir os.walk = file.walk os.path.join = file.join os.path.isfile = file.isfile os.path.isdir = file.isdir os.path.exists = file.exists os.path.lexists = file.lexists os.path.getmtime = file.getmtime os.path.getsize = file.getsize sys.modules["glob"] = glob self.checkDiskUsage()
def runPackedApp(args): if not args: raise ArgumentError, "No Panda app specified. Use:\npython RunAppMF.py app.mf" vfs = VirtualFileSystem.getGlobalPtr() fname = Filename.fromOsSpecific(args[0]) if not vfs.exists(fname): raise ArgumentError, "No such file: %s" % (args[0]) mf = Multifile() if not mf.openRead(fname): raise ArgumentError, "Not a Panda Multifile: %s" % (args[0]) # Clear *all* the mount points, including "/", so that we no # longer access the disk directly. vfs.unmountAll() # Mount the Multifile under /mf, by convention, and make that our # "current directory". vfs.mount(mf, MultifileRoot, vfs.MFReadOnly) vfs.chdir(MultifileRoot) # Make sure the directories on our standard Python path are mounted # read-only, so we can still load Python. for dirname in sys.path: vfs.mount(dirname, dirname, vfs.MFReadOnly) # Also mount some standard directories read-write (temporary and # app-data directories). tdir = Filename.temporary('', '') for dirname in set([ tdir.getDirname(), Filename.getTempDirectory().cStr(), Filename.getUserAppdataDirectory().cStr(), Filename.getCommonAppdataDirectory().cStr() ]): vfs.mount(dirname, dirname, 0) # Now set up Python to import this stuff. VFSImporter.register() sys.path = [MultifileRoot] + sys.path # Put our root directory on the model-path and prc-path, too. getModelPath().prependDirectory(MultifileRoot) # Load the implicit App.prc file. loadPrcFileData(AppPrcFilename, AppPrc) # Load any prc files in the root. We have to load them # explicitly, since the ConfigPageManager can't directly look # inside the vfs. for f in vfs.scanDirectory(MultifileRoot): if f.getFilename().getExtension() == 'prc': data = f.readFile(True) loadPrcFileData(f.getFilename().cStr(), data) # Replace the builtin open and file symbols so user code will get # our versions by default, which can open and read files out of # the multifile. __builtin__.file = file.file __builtin__.open = file.open os.listdir = file.listdir os.walk = file.walk import main if hasattr(main, 'main') and callable(main.main): main.main()
getModelPath().appendDirectory(multifileRoot) trueFileIO = False if not trueFileIO: # Replace the builtin open and file symbols so user code will get # our versions by default, which can open and read files out of # the multifile. builtins.open = file.open if sys.version_info < (3, 0): builtins.file = file.open builtins.execfile = file.execfile os.listdir = file.listdir os.walk = file.walk os.path.join = file.join os.path.isfile = file.isfile os.path.isdir = file.isdir os.path.exists = file.exists os.path.lexists = file.lexists os.path.getmtime = file.getmtime os.path.getsize = file.getsize sys.modules['glob'] = glob vfs = VirtualFileSystem.getGlobalPtr() vfs.mount(Filename("app.p3d"), multifileRoot, VirtualFileSystem.MFReadOnly) VFSImporter.register() VFSImporter.reloadSharedPackages() loadPrcFileData('', 'default-model-extension .bam') dirName = Filename(multifileRoot).toOsSpecific() importer = VFSImporter.VFSImporter(dirName) loaderr = importer.find_module('__main__') mainModule = loaderr.load_module('__main__') #import Pinball