|
|
@@ -787,7 +787,7 @@ class Freezer:
|
|
|
return 'ModuleDef(%s)' % (', '.join(args))
|
|
|
|
|
|
def __init__(self, previous = None, debugLevel = 0,
|
|
|
- platform = None, path=None, hiddenImports=None):
|
|
|
+ platform = None, path=None, hiddenImports=None, optimize=None):
|
|
|
# Normally, we are freezing for our own platform. Change this
|
|
|
# if untrue.
|
|
|
self.platform = platform or PandaSystem.getPlatform()
|
|
|
@@ -917,7 +917,13 @@ class Freezer:
|
|
|
('.so', 'rb', 3),
|
|
|
]
|
|
|
|
|
|
- self.mf = PandaModuleFinder(excludes=['doctest'], suffixes=suffixes, path=path)
|
|
|
+ if optimize is None or optimize < 0:
|
|
|
+ self.optimize = sys.flags.optimize
|
|
|
+ else:
|
|
|
+ self.optimize = optimize
|
|
|
+
|
|
|
+ self.mf = PandaModuleFinder(excludes=['doctest'], suffixes=suffixes,
|
|
|
+ path=path, optimize=self.optimize)
|
|
|
|
|
|
def excludeFrom(self, freezer):
|
|
|
""" Excludes all modules that have already been processed by
|
|
|
@@ -1413,7 +1419,7 @@ class Freezer:
|
|
|
else:
|
|
|
filename += '.pyo'
|
|
|
if multifile.findSubfile(filename) < 0:
|
|
|
- code = compile('', moduleName, 'exec', optimize=2)
|
|
|
+ code = compile('', moduleName, 'exec', optimize=self.optimize)
|
|
|
self.__addPyc(multifile, filename, code, compressionLevel)
|
|
|
|
|
|
moduleDirs[str] = True
|
|
|
@@ -1493,7 +1499,7 @@ class Freezer:
|
|
|
source = open(sourceFilename.toOsSpecific(), 'r').read()
|
|
|
if source and source[-1] != '\n':
|
|
|
source = source + '\n'
|
|
|
- code = compile(source, str(sourceFilename), 'exec', optimize=2)
|
|
|
+ code = compile(source, str(sourceFilename), 'exec', optimize=self.optimize)
|
|
|
|
|
|
self.__addPyc(multifile, filename, code, compressionLevel)
|
|
|
|
|
|
@@ -1572,7 +1578,7 @@ class Freezer:
|
|
|
# trouble importing it as a builtin module. Synthesize a frozen
|
|
|
# module that loads it as builtin.
|
|
|
if '.' in moduleName and self.linkExtensionModules:
|
|
|
- code = compile('import sys;del sys.modules["%s"];import imp;imp.init_builtin("%s")' % (moduleName, moduleName), moduleName, 'exec', optimize=2)
|
|
|
+ code = compile('import sys;del sys.modules["%s"];import imp;imp.init_builtin("%s")' % (moduleName, moduleName), moduleName, 'exec', optimize=self.optimize)
|
|
|
code = marshal.dumps(code)
|
|
|
mangledName = self.mangleName(moduleName)
|
|
|
moduleDefs.append(self.makeModuleDef(mangledName, code))
|
|
|
@@ -1845,7 +1851,7 @@ class Freezer:
|
|
|
code = 'import sys;del sys.modules["%s"];import sys,os,imp;imp.load_dynamic("%s",os.path.join(sys.path[0], "%s%s"))' % (moduleName, moduleName, moduleName, modext)
|
|
|
else:
|
|
|
code = 'import sys;del sys.modules["%s"];import sys,os,imp;imp.load_dynamic("%s",os.path.join(os.path.dirname(sys.executable), "%s%s"))' % (moduleName, moduleName, moduleName, modext)
|
|
|
- code = compile(code, moduleName, 'exec', optimize=2)
|
|
|
+ code = compile(code, moduleName, 'exec', optimize=self.optimize)
|
|
|
code = marshal.dumps(code)
|
|
|
moduleList.append((moduleName, len(pool), len(code)))
|
|
|
pool += code
|
|
|
@@ -1946,6 +1952,8 @@ class Freezer:
|
|
|
flags |= 1
|
|
|
if log_filename_strftime:
|
|
|
flags |= 2
|
|
|
+ if self.optimize < 2:
|
|
|
+ flags |= 4 # keep_docstrings
|
|
|
|
|
|
# Compose the header we will be writing to the stub, to tell it
|
|
|
# where to find the module data blob, as well as other variables.
|
|
|
@@ -2377,6 +2385,7 @@ class PandaModuleFinder(modulefinder.ModuleFinder):
|
|
|
"""
|
|
|
|
|
|
self.suffixes = kw.pop('suffixes', imp.get_suffixes())
|
|
|
+ self.optimize = kw.pop('optimize', -1)
|
|
|
|
|
|
modulefinder.ModuleFinder.__init__(self, *args, **kw)
|
|
|
|
|
|
@@ -2530,7 +2539,7 @@ class PandaModuleFinder(modulefinder.ModuleFinder):
|
|
|
|
|
|
if type is _PKG_NAMESPACE_DIRECTORY:
|
|
|
m = self.add_module(fqname)
|
|
|
- m.__code__ = compile('', '', 'exec', optimize=2)
|
|
|
+ m.__code__ = compile('', '', 'exec', optimize=self.optimize)
|
|
|
m.__path__ = pathname
|
|
|
return m
|
|
|
|
|
|
@@ -2542,7 +2551,7 @@ class PandaModuleFinder(modulefinder.ModuleFinder):
|
|
|
code = fp.read()
|
|
|
|
|
|
code += b'\n' if isinstance(code, bytes) else '\n'
|
|
|
- co = compile(code, pathname, 'exec', optimize=2)
|
|
|
+ co = compile(code, pathname, 'exec', optimize=self.optimize)
|
|
|
elif type == imp.PY_COMPILED:
|
|
|
if sys.version_info >= (3, 7):
|
|
|
try:
|