1919
2020__all__ = ["compile_dir" ,"compile_file" ,"compile_path" ]
2121
22- def compile_dir (dir , maxlevels = 10 , ddir = None ,
23- force = False , rx = None , quiet = False , legacy = False ):
22+ def compile_dir (dir , maxlevels = 10 , ddir = None , force = False , rx = None ,
23+ quiet = False , legacy = False , optimize = - 1 ):
2424 """Byte-compile all modules in the given directory tree.
2525
2626 Arguments (only dir is required):
@@ -32,6 +32,7 @@ def compile_dir(dir, maxlevels=10, ddir=None,
3232 force: if True, force compilation, even if timestamps are up-to-date
3333 quiet: if True, be quiet during compilation
3434 legacy: if True, produce legacy pyc paths instead of PEP 3147 paths
35+ optimize: optimization level or -1 for level of the interpreter
3536 """
3637 if not quiet :
3738 print ('Listing' , dir , '...' )
@@ -51,7 +52,8 @@ def compile_dir(dir, maxlevels=10, ddir=None,
5152 else :
5253 dfile = None
5354 if not os .path .isdir (fullname ):
54- if not compile_file (fullname , ddir , force , rx , quiet , legacy ):
55+ if not compile_file (fullname , ddir , force , rx , quiet ,
56+ legacy , optimize ):
5557 success = 0
5658 elif (maxlevels > 0 and name != os .curdir and name != os .pardir and
5759 os .path .isdir (fullname ) and not os .path .islink (fullname )):
@@ -61,14 +63,15 @@ def compile_dir(dir, maxlevels=10, ddir=None,
6163 return success
6264
6365def compile_file (fullname , ddir = None , force = 0 , rx = None , quiet = False ,
64- legacy = False ):
66+ legacy = False , optimize = - 1 ):
6567 """Byte-compile file.
6668 fullname: the file to byte-compile
6769 ddir: if given, purported directory name (this is the
6870 directory name that will show up in error messages)
6971 force: if True, force compilation, even if timestamps are up-to-date
7072 quiet: if True, be quiet during compilation
7173 legacy: if True, produce legacy pyc paths instead of PEP 3147 paths
74+ optimize: optimization level or -1 for level of the interpreter
7275 """
7376 success = 1
7477 name = os .path .basename (fullname )
@@ -84,7 +87,11 @@ def compile_file(fullname, ddir=None, force=0, rx=None, quiet=False,
8487 if legacy :
8588 cfile = fullname + ('c' if __debug__ else 'o' )
8689 else :
87- cfile = imp .cache_from_source (fullname )
90+ if optimize >= 0 :
91+ cfile = imp .cache_from_source (fullname ,
92+ debug_override = not optimize )
93+ else :
94+ cfile = imp .cache_from_source (fullname )
8895 cache_dir = os .path .dirname (cfile )
8996 head , tail = name [:- 3 ], name [- 3 :]
9097 if tail == '.py' :
@@ -101,7 +108,8 @@ def compile_file(fullname, ddir=None, force=0, rx=None, quiet=False,
101108 if not quiet :
102109 print ('Compiling' , fullname , '...' )
103110 try :
104- ok = py_compile .compile (fullname , cfile , dfile , True )
111+ ok = py_compile .compile (fullname , cfile , dfile , True ,
112+ optimize = optimize )
105113 except py_compile .PyCompileError as err :
106114 if quiet :
107115 print ('*** Error compiling' , fullname , '...' )
@@ -126,7 +134,7 @@ def compile_file(fullname, ddir=None, force=0, rx=None, quiet=False,
126134 return success
127135
128136def compile_path (skip_curdir = 1 , maxlevels = 0 , force = False , quiet = False ,
129- legacy = False ):
137+ legacy = False , optimize = - 1 ):
130138 """Byte-compile all module on sys.path.
131139
132140 Arguments (all optional):
@@ -136,6 +144,7 @@ def compile_path(skip_curdir=1, maxlevels=0, force=False, quiet=False,
136144 force: as for compile_dir() (default False)
137145 quiet: as for compile_dir() (default False)
138146 legacy: as for compile_dir() (default False)
147+ optimize: as for compile_dir() (default -1)
139148 """
140149 success = 1
141150 for dir in sys .path :
@@ -144,7 +153,7 @@ def compile_path(skip_curdir=1, maxlevels=0, force=False, quiet=False,
144153 else :
145154 success = success and compile_dir (dir , maxlevels , None ,
146155 force , quiet = quiet ,
147- legacy = legacy )
156+ legacy = legacy , optimize = optimize )
148157 return success
149158
150159
0 commit comments