mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	module list utility
This commit is contained in:
		
							parent
							
								
									3e86595280
								
							
						
					
					
						commit
						ec2f74f4b1
					
				
					 1 changed files with 126 additions and 0 deletions
				
			
		
							
								
								
									
										126
									
								
								Doc/tools/listmodules.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								Doc/tools/listmodules.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,126 @@ | ||||||
|  | # $Id$ | ||||||
|  | # | ||||||
|  | # Locate all standard modules available in this build. | ||||||
|  | # | ||||||
|  | # This script is designed to run on Python 1.5.2 and newer. | ||||||
|  | # | ||||||
|  | # Written by Fredrik Lundh, January 2005 | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | import imp, sys, os, re, time | ||||||
|  | 
 | ||||||
|  | identifier = "python-%s-%s" % (sys.version[:3], sys.platform) | ||||||
|  | timestamp = time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(time.time())) | ||||||
|  | 
 | ||||||
|  | # known test packages | ||||||
|  | TEST_PACKAGES = "test.", "bsddb.test.", "distutils.tests." | ||||||
|  | 
 | ||||||
|  | try: | ||||||
|  |     import platform | ||||||
|  |     platform = platform.platform() | ||||||
|  | except: | ||||||
|  |     platform = None # unknown | ||||||
|  | 
 | ||||||
|  | suffixes = imp.get_suffixes() | ||||||
|  | 
 | ||||||
|  | def get_suffix(file): | ||||||
|  |     for suffix in suffixes: | ||||||
|  |         if file[-len(suffix[0]):] == suffix[0]: | ||||||
|  |             return suffix | ||||||
|  |     return None | ||||||
|  | 
 | ||||||
|  | def main(): | ||||||
|  | 
 | ||||||
|  |     path = getpath() | ||||||
|  | 
 | ||||||
|  |     modules = {} | ||||||
|  |     for m in sys.builtin_module_names: | ||||||
|  |         modules[m] = None | ||||||
|  | 
 | ||||||
|  |     for p in path: | ||||||
|  |         modules.update(getmodules(p)) | ||||||
|  | 
 | ||||||
|  |     keys = modules.keys() | ||||||
|  |     keys.sort() | ||||||
|  | 
 | ||||||
|  |     # filter out known test packages | ||||||
|  |     def cb(m): | ||||||
|  |         for d in TEST_PACKAGES: | ||||||
|  |             if m[:len(d)] == d: | ||||||
|  |                 return 0 | ||||||
|  |         return 1 | ||||||
|  |     keys = filter(cb, keys) | ||||||
|  | 
 | ||||||
|  |     try: | ||||||
|  |         outfile = sys.argv[1] | ||||||
|  |         if outfile == "-": | ||||||
|  |             outfile = None | ||||||
|  |         elif outfile == "-f": | ||||||
|  |             outfile = "modules-" + identifier + ".txt" | ||||||
|  |     except IndexError: | ||||||
|  |         outfile = None | ||||||
|  | 
 | ||||||
|  |     if not outfile: | ||||||
|  |         out = sys.stdout | ||||||
|  |     else: | ||||||
|  |         out = open(outfile, "w") | ||||||
|  | 
 | ||||||
|  |     out.write("# module list (generated by listmodules.py)\n") | ||||||
|  |     out.write("#\n") | ||||||
|  |     out.write("# timestamp=%s\n" % repr(timestamp)) | ||||||
|  |     out.write("# sys.version=%s\n" % repr(sys.version)) | ||||||
|  |     out.write("# sys.platform=%s\n" % repr(sys.platform)) | ||||||
|  |     if platform: | ||||||
|  |         out.write("# platform=%s\n" % repr(platform)) | ||||||
|  |     out.write("#\n") | ||||||
|  | 
 | ||||||
|  |     for k in keys: | ||||||
|  |         out.write(k + "\n") | ||||||
|  | 
 | ||||||
|  |     if out is not sys.stdout: | ||||||
|  |         out.close() | ||||||
|  |         print out.name, "ok (%d modules)" % len(modules) | ||||||
|  | 
 | ||||||
|  | def getmodules(p): | ||||||
|  |     # get modules in a given directory | ||||||
|  |     modules = {} | ||||||
|  |     for f in os.listdir(p): | ||||||
|  |         f = os.path.join(p, f) | ||||||
|  |         if os.path.isfile(f): | ||||||
|  |             m, e = os.path.splitext(f) | ||||||
|  |             suffix = get_suffix(f) | ||||||
|  |             if not suffix: | ||||||
|  |                 continue | ||||||
|  |             m = os.path.basename(m) | ||||||
|  |             if re.compile("(?i)[a-z_]\w*$").match(m): | ||||||
|  |                 if suffix[2] == imp.C_EXTENSION: | ||||||
|  |                     # check that this extension can be imported | ||||||
|  |                     try: | ||||||
|  |                         __import__(m) | ||||||
|  |                     except ImportError: | ||||||
|  |                         continue | ||||||
|  |                 modules[m] = f | ||||||
|  |         elif os.path.isdir(f): | ||||||
|  |             m = os.path.basename(f) | ||||||
|  |             if os.path.isfile(os.path.join(f, "__init__.py")): | ||||||
|  |                 for mm, f in getmodules(f).items(): | ||||||
|  |                     modules[m + "." + mm] = f | ||||||
|  |     return modules | ||||||
|  | 
 | ||||||
|  | def getpath(): | ||||||
|  |     path = map(os.path.normcase, map(os.path.abspath, sys.path[:])) | ||||||
|  |     # get rid of site packages | ||||||
|  |     for p in path: | ||||||
|  |         if p[-13:] == "site-packages": | ||||||
|  |             def cb(p, site_package_path=os.path.abspath(p)): | ||||||
|  |                 return p[:len(site_package_path)] != site_package_path | ||||||
|  |             path = filter(cb, path) | ||||||
|  |             break | ||||||
|  |     # get rid of non-existent directories and the current directory | ||||||
|  |     def cb(p, cwd=os.path.normcase(os.getcwd())): | ||||||
|  |         return os.path.isdir(p) and p != cwd | ||||||
|  |     path = filter(cb, path) | ||||||
|  |     return path | ||||||
|  | 
 | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     main() | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Fredrik Lundh
						Fredrik Lundh