diff --git a/direct/src/p3d/Packager.py b/direct/src/p3d/Packager.py index 6acd43cf03..7145061bad 100644 --- a/direct/src/p3d/Packager.py +++ b/direct/src/p3d/Packager.py @@ -1786,7 +1786,6 @@ class Packager: filename = file.newName.rsplit('.', 1)[0] moduleName = filename.replace("/", ".") - newName = moduleName if moduleName.endswith('.__init__'): moduleName = moduleName.rsplit('.', 1)[0] @@ -1795,8 +1794,7 @@ class Packager: # deal with it again. return - self.freezer.addModule(moduleName, newName = newName, - filename = file.filename) + self.freezer.addModule(moduleName, filename = file.filename) def addEggFile(self, file): # Precompile egg files to bam's. diff --git a/direct/src/showutil/FreezeTool.py b/direct/src/showutil/FreezeTool.py index 28b0ce108b..9200f132c9 100644 --- a/direct/src/showutil/FreezeTool.py +++ b/direct/src/showutil/FreezeTool.py @@ -1077,22 +1077,25 @@ class Freezer: str = '.'.join(dirnames) if str not in moduleDirs: - # Add an implicit __init__.py file. + # Add an implicit __init__.py file (but only if there's + # not already a legitimate __init__.py file). moduleName = '.'.join(dirnames) filename = '/'.join(dirnames) + '/__init__' if self.storePythonSource: filename += '.py' stream = StringStream('') - multifile.addSubfile(filename, stream, 0) - multifile.flush() + if multifile.findSubfile(filename) < 0: + multifile.addSubfile(filename, stream, 0) + multifile.flush() else: if __debug__: filename += '.pyc' else: filename += '.pyo' - code = compile('', moduleName, 'exec') - self.__addPyc(multifile, filename, code, compressionLevel) + if multifile.findSubfile(filename) < 0: + code = compile('', moduleName, 'exec') + self.__addPyc(multifile, filename, code, compressionLevel) moduleDirs[str] = True self.__addPythonDirs(multifile, moduleDirs, dirnames[:-1], compressionLevel) @@ -1103,12 +1106,17 @@ class Freezer: # First, split the module into its subdirectory names. dirnames = moduleName.split('.') + if len(dirnames) > 1 and dirnames[-1] == '__init__': + # The "module" may end in __init__, but that really means + # the parent directory. + dirnames = dirnames[:-1] + self.__addPythonDirs(multifile, moduleDirs, dirnames[:-1], compressionLevel) filename = '/'.join(dirnames) module = self.mf.modules.get(mdef.moduleName, None) - if getattr(module, '__path__', None) is not None: + if getattr(module, '__path__', None) is not None or getattr(module, '__file__', '').endswith('/__init__.py'): # It's actually a package. In this case, we really write # the file moduleName/__init__.py. filename += '/__init__'