mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Routines to force "compilation" of all .py files in a directory
 | |
| # tree or on sys.path.  By default recursion is pruned at a depth of
 | |
| # 10 and the current directory, if it occurs in sys.path, is skipped.
 | |
| # When called as a script, compiles argument directories, or sys.path
 | |
| # if no arguments.
 | |
| # After a similar module by Sjoerd Mullender.
 | |
| 
 | |
| import os
 | |
| import sys
 | |
| import py_compile
 | |
| 
 | |
| def compile_dir(dir, maxlevels = 10):
 | |
| 	print 'Listing', dir, '...'
 | |
| 	try:
 | |
| 		names = os.listdir(dir)
 | |
| 	except os.error:
 | |
| 		print "Can't list", dir
 | |
| 		names = []
 | |
| 	names.sort()
 | |
| 	for name in names:
 | |
| 		fullname = os.path.join(dir, name)
 | |
| 		if os.path.isfile(fullname):
 | |
| 			head, tail = name[:-3], name[-3:]
 | |
| 			if tail == '.py':
 | |
| 				print 'Compiling', fullname, '...'
 | |
| 				try:
 | |
| 					py_compile.compile(fullname)
 | |
| 				except KeyboardInterrupt:
 | |
| 					del names[:]
 | |
| 					print '\n[interrupt]'
 | |
| 					break
 | |
| 				except:
 | |
| 					if type(sys.exc_type) == type(''):
 | |
| 						exc_type_name = sys.exc_type
 | |
| 					else: exc_type_name = sys.exc_type.__name__
 | |
| 					print 'Sorry:', exc_type_name + ':',
 | |
| 					print sys.exc_value
 | |
| 		elif maxlevels > 0 and \
 | |
| 		     name != os.curdir and name != os.pardir and \
 | |
| 		     os.path.isdir(fullname) and \
 | |
| 		     not os.path.islink(fullname):
 | |
| 			compile_dir(fullname, maxlevels - 1)
 | |
| 
 | |
| def compile_path(skip_curdir = 1):
 | |
| 	for dir in sys.path:
 | |
| 		if (not dir or dir == os.curdir) and skip_curdir:
 | |
| 			print 'Skipping current directory'
 | |
| 		else:
 | |
| 			compile_dir(dir, 0)
 | |
| 
 | |
| def main():
 | |
| 	import getopt
 | |
| 	try:
 | |
| 		opts, args = getopt.getopt(sys.argv[1:], 'l')
 | |
| 	except getopt.error, msg:
 | |
| 		print msg
 | |
| 		print "usage: compileall [-l] [directory ...]"
 | |
| 		print "-l: don't recurse down"
 | |
| 		print "if no arguments, -l sys.path is assumed"
 | |
| 	maxlevels = 10
 | |
| 	for o, a in opts:
 | |
| 		if o == '-l': maxlevels = 0
 | |
| 	if args:
 | |
| 		for dir in sys.argv[1:]:
 | |
| 			compile_dir(dir, maxlevels)
 | |
| 	else:
 | |
| 		compile_path()
 | |
| 
 | |
| if __name__ == '__main__':
 | |
| 	main()
 | 
