1b410d6e4ce58c177569d42b51772f7bb239a24a3darylm"""Append module search paths for third-party packages to sys.path. 2b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 3b410d6e4ce58c177569d42b51772f7bb239a24a3darylm**************************************************************** 4b410d6e4ce58c177569d42b51772f7bb239a24a3darylm* This module is automatically imported during initialization. * 5b410d6e4ce58c177569d42b51772f7bb239a24a3darylm**************************************************************** 6b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 7b410d6e4ce58c177569d42b51772f7bb239a24a3darylmThis is a UEFI-specific version of site.py. 8b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 9b410d6e4ce58c177569d42b51772f7bb239a24a3darylmIn earlier versions of Python (up to 1.5a3), scripts or modules that 10b410d6e4ce58c177569d42b51772f7bb239a24a3darylmneeded to use site-specific modules would place ``import site'' 11b410d6e4ce58c177569d42b51772f7bb239a24a3darylmsomewhere near the top of their code. Because of the automatic 12b410d6e4ce58c177569d42b51772f7bb239a24a3darylmimport, this is no longer necessary (but code that does it still 13b410d6e4ce58c177569d42b51772f7bb239a24a3darylmworks). 14b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 15b410d6e4ce58c177569d42b51772f7bb239a24a3darylmThis will append site-specific paths to the module search path. It 16b410d6e4ce58c177569d42b51772f7bb239a24a3darylmstarts with sys.prefix and sys.exec_prefix (if different) and appends 17b410d6e4ce58c177569d42b51772f7bb239a24a3darylmlib/python<version>/site-packages as well as lib/site-python. 18b410d6e4ce58c177569d42b51772f7bb239a24a3darylmThe resulting directories, if they exist, are appended to sys.path, 19b410d6e4ce58c177569d42b51772f7bb239a24a3darylmand also inspected for path configuration files. 20b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 21b410d6e4ce58c177569d42b51772f7bb239a24a3darylmA path configuration file is a file whose name has the form 22b410d6e4ce58c177569d42b51772f7bb239a24a3darylm<package>.pth; its contents are additional directories (one per line) 23b410d6e4ce58c177569d42b51772f7bb239a24a3darylmto be added to sys.path. Non-existing directories (or 24b410d6e4ce58c177569d42b51772f7bb239a24a3darylmnon-directories) are never added to sys.path; no directory is added to 25b410d6e4ce58c177569d42b51772f7bb239a24a3darylmsys.path more than once. Blank lines and lines beginning with 26b410d6e4ce58c177569d42b51772f7bb239a24a3darylm'#' are skipped. Lines starting with 'import' are executed. 27b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 28b410d6e4ce58c177569d42b51772f7bb239a24a3darylmFor example, suppose sys.prefix and sys.exec_prefix are set to 29b410d6e4ce58c177569d42b51772f7bb239a24a3darylm/Efi/StdLib and there is a directory /Efi/StdLib/lib/python2.7/site-packages 30b410d6e4ce58c177569d42b51772f7bb239a24a3darylmwith three subdirectories, foo, bar and spam, and two path 31b410d6e4ce58c177569d42b51772f7bb239a24a3darylmconfiguration files, foo.pth and bar.pth. Assume foo.pth contains the 32b410d6e4ce58c177569d42b51772f7bb239a24a3darylmfollowing: 33b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 34b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # foo package configuration 35b410d6e4ce58c177569d42b51772f7bb239a24a3darylm foo 36b410d6e4ce58c177569d42b51772f7bb239a24a3darylm bar 37b410d6e4ce58c177569d42b51772f7bb239a24a3darylm bletch 38b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 39b410d6e4ce58c177569d42b51772f7bb239a24a3darylmand bar.pth contains: 40b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 41b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # bar package configuration 42b410d6e4ce58c177569d42b51772f7bb239a24a3darylm bar 43b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 44b410d6e4ce58c177569d42b51772f7bb239a24a3darylmThen the following directories are added to sys.path, in this order: 45b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 46b410d6e4ce58c177569d42b51772f7bb239a24a3darylm /Efi/StdLib/lib/python2.7/site-packages/bar 47b410d6e4ce58c177569d42b51772f7bb239a24a3darylm /Efi/StdLib/lib/python2.7/site-packages/foo 48b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 49b410d6e4ce58c177569d42b51772f7bb239a24a3darylmNote that bletch is omitted because it doesn't exist; bar precedes foo 50b410d6e4ce58c177569d42b51772f7bb239a24a3darylmbecause bar.pth comes alphabetically before foo.pth; and spam is 51b410d6e4ce58c177569d42b51772f7bb239a24a3darylmomitted because it is not mentioned in either path configuration file. 52b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 53b410d6e4ce58c177569d42b51772f7bb239a24a3darylmAfter these path manipulations, an attempt is made to import a module 54b410d6e4ce58c177569d42b51772f7bb239a24a3darylmnamed sitecustomize, which can perform arbitrary additional 55b410d6e4ce58c177569d42b51772f7bb239a24a3darylmsite-specific customizations. If this import fails with an 56b410d6e4ce58c177569d42b51772f7bb239a24a3darylmImportError exception, it is silently ignored. 57b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 58b410d6e4ce58c177569d42b51772f7bb239a24a3darylmCopyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR> 59b410d6e4ce58c177569d42b51772f7bb239a24a3darylmThis program and the accompanying materials are licensed and made available under 60b410d6e4ce58c177569d42b51772f7bb239a24a3darylmthe terms and conditions of the BSD License that accompanies this distribution. 61b410d6e4ce58c177569d42b51772f7bb239a24a3darylmThe full text of the license may be found at 62b410d6e4ce58c177569d42b51772f7bb239a24a3darylmhttp://opensource.org/licenses/bsd-license. 63b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 64b410d6e4ce58c177569d42b51772f7bb239a24a3darylmTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 65b410d6e4ce58c177569d42b51772f7bb239a24a3darylmWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 66b410d6e4ce58c177569d42b51772f7bb239a24a3darylm""" 67b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 68b410d6e4ce58c177569d42b51772f7bb239a24a3darylmimport sys 69b410d6e4ce58c177569d42b51772f7bb239a24a3darylmimport os 70b410d6e4ce58c177569d42b51772f7bb239a24a3darylmimport __builtin__ 71b410d6e4ce58c177569d42b51772f7bb239a24a3darylmimport traceback 72b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 73b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# Prefixes for site-packages; add additional prefixes like /usr/local here 74b410d6e4ce58c177569d42b51772f7bb239a24a3darylmPREFIXES = [sys.prefix, sys.exec_prefix] 75b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# Enable per user site-packages directory 76b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# set it to False to disable the feature or True to force the feature 77b410d6e4ce58c177569d42b51772f7bb239a24a3darylmENABLE_USER_SITE = False 78b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 79b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# for distutils.commands.install 80b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# These values are initialized by the getuserbase() and getusersitepackages() 81b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# functions, through the main() function when Python starts. 82b410d6e4ce58c177569d42b51772f7bb239a24a3darylmUSER_SITE = None 83b410d6e4ce58c177569d42b51772f7bb239a24a3darylmUSER_BASE = None 84b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 85b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 86b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef makepath(*paths): 87b410d6e4ce58c177569d42b51772f7bb239a24a3darylm dir = os.path.join(*paths) 88b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 89b410d6e4ce58c177569d42b51772f7bb239a24a3darylm dir = os.path.abspath(dir) 90b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except OSError: 91b410d6e4ce58c177569d42b51772f7bb239a24a3darylm pass 92b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return dir, os.path.normcase(dir) 93b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 94b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 95b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef abs__file__(): 96b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Set all module' __file__ attribute to an absolute path""" 97b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for m in sys.modules.values(): 98b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if hasattr(m, '__loader__'): 99b410d6e4ce58c177569d42b51772f7bb239a24a3darylm continue # don't mess with a PEP 302-supplied __file__ 100b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 101b410d6e4ce58c177569d42b51772f7bb239a24a3darylm m.__file__ = os.path.abspath(m.__file__) 102b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except (AttributeError, OSError): 103b410d6e4ce58c177569d42b51772f7bb239a24a3darylm pass 104b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 105b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 106b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef removeduppaths(): 107b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ Remove duplicate entries from sys.path along with making them 108b410d6e4ce58c177569d42b51772f7bb239a24a3darylm absolute""" 109b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # This ensures that the initial path provided by the interpreter contains 110b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # only absolute pathnames, even if we're running from the build directory. 111b410d6e4ce58c177569d42b51772f7bb239a24a3darylm L = [] 112b410d6e4ce58c177569d42b51772f7bb239a24a3darylm known_paths = set() 113b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for dir in sys.path: 114b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # Filter out duplicate paths (on case-insensitive file systems also 115b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # if they only differ in case); turn relative paths into absolute 116b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # paths. 117b410d6e4ce58c177569d42b51772f7bb239a24a3darylm dir, dircase = makepath(dir) 118b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if not dircase in known_paths: 119b410d6e4ce58c177569d42b51772f7bb239a24a3darylm L.append(dir) 120b410d6e4ce58c177569d42b51772f7bb239a24a3darylm known_paths.add(dircase) 121b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sys.path[:] = L 122b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return known_paths 123b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 124b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 125b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef _init_pathinfo(): 126b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Return a set containing all existing directory entries from sys.path""" 127b410d6e4ce58c177569d42b51772f7bb239a24a3darylm d = set() 128b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for dir in sys.path: 129b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 130b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if os.path.isdir(dir): 131b410d6e4ce58c177569d42b51772f7bb239a24a3darylm dir, dircase = makepath(dir) 132b410d6e4ce58c177569d42b51772f7bb239a24a3darylm d.add(dircase) 133b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except TypeError: 134b410d6e4ce58c177569d42b51772f7bb239a24a3darylm continue 135b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return d 136b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 137b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 138b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef addpackage(sitedir, name, known_paths): 139b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Process a .pth file within the site-packages directory: 140b410d6e4ce58c177569d42b51772f7bb239a24a3darylm For each line in the file, either combine it with sitedir to a path 141b410d6e4ce58c177569d42b51772f7bb239a24a3darylm and add that to known_paths, or execute it if it starts with 'import '. 142b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ 143b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if known_paths is None: 144b410d6e4ce58c177569d42b51772f7bb239a24a3darylm _init_pathinfo() 145b410d6e4ce58c177569d42b51772f7bb239a24a3darylm reset = 1 146b410d6e4ce58c177569d42b51772f7bb239a24a3darylm else: 147b410d6e4ce58c177569d42b51772f7bb239a24a3darylm reset = 0 148b410d6e4ce58c177569d42b51772f7bb239a24a3darylm fullname = os.path.join(sitedir, name) 149b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 150b410d6e4ce58c177569d42b51772f7bb239a24a3darylm f = open(fullname, "rU") 151b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except IOError: 152b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return 153b410d6e4ce58c177569d42b51772f7bb239a24a3darylm with f: 154b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for n, line in enumerate(f): 155b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if line.startswith("#"): 156b410d6e4ce58c177569d42b51772f7bb239a24a3darylm continue 157b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 158b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if line.startswith(("import ", "import\t")): 159b410d6e4ce58c177569d42b51772f7bb239a24a3darylm exec line 160b410d6e4ce58c177569d42b51772f7bb239a24a3darylm continue 161b410d6e4ce58c177569d42b51772f7bb239a24a3darylm line = line.rstrip() 162b410d6e4ce58c177569d42b51772f7bb239a24a3darylm dir, dircase = makepath(sitedir, line) 163b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if not dircase in known_paths and os.path.exists(dir): 164b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sys.path.append(dir) 165b410d6e4ce58c177569d42b51772f7bb239a24a3darylm known_paths.add(dircase) 166b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except Exception as err: 167b410d6e4ce58c177569d42b51772f7bb239a24a3darylm print >>sys.stderr, "Error processing line {:d} of {}:\n".format( 168b410d6e4ce58c177569d42b51772f7bb239a24a3darylm n+1, fullname) 169b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for record in traceback.format_exception(*sys.exc_info()): 170b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for line in record.splitlines(): 171b410d6e4ce58c177569d42b51772f7bb239a24a3darylm print >>sys.stderr, ' '+line 172b410d6e4ce58c177569d42b51772f7bb239a24a3darylm print >>sys.stderr, "\nRemainder of file ignored" 173b410d6e4ce58c177569d42b51772f7bb239a24a3darylm break 174b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if reset: 175b410d6e4ce58c177569d42b51772f7bb239a24a3darylm known_paths = None 176b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return known_paths 177b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 178b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 179b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef addsitedir(sitedir, known_paths=None): 180b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Add 'sitedir' argument to sys.path if missing and handle .pth files in 181b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 'sitedir'""" 182b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if known_paths is None: 183b410d6e4ce58c177569d42b51772f7bb239a24a3darylm known_paths = _init_pathinfo() 184b410d6e4ce58c177569d42b51772f7bb239a24a3darylm reset = 1 185b410d6e4ce58c177569d42b51772f7bb239a24a3darylm else: 186b410d6e4ce58c177569d42b51772f7bb239a24a3darylm reset = 0 187b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sitedir, sitedircase = makepath(sitedir) 188b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if not sitedircase in known_paths: 189b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sys.path.append(sitedir) # Add path component 190b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 191b410d6e4ce58c177569d42b51772f7bb239a24a3darylm names = os.listdir(sitedir) 192b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except os.error: 193b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return 194b410d6e4ce58c177569d42b51772f7bb239a24a3darylm dotpth = os.extsep + "pth" 195b410d6e4ce58c177569d42b51772f7bb239a24a3darylm names = [name for name in names if name.endswith(dotpth)] 196b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for name in sorted(names): 197b410d6e4ce58c177569d42b51772f7bb239a24a3darylm addpackage(sitedir, name, known_paths) 198b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if reset: 199b410d6e4ce58c177569d42b51772f7bb239a24a3darylm known_paths = None 200b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return known_paths 201b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 202b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 203b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef check_enableusersite(): 204b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Check if user site directory is safe for inclusion 205b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 206b410d6e4ce58c177569d42b51772f7bb239a24a3darylm The function tests for the command line flag (including environment var), 207b410d6e4ce58c177569d42b51772f7bb239a24a3darylm process uid/gid equal to effective uid/gid. 208b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 209b410d6e4ce58c177569d42b51772f7bb239a24a3darylm None: Disabled for security reasons 210b410d6e4ce58c177569d42b51772f7bb239a24a3darylm False: Disabled by user (command line option) 211b410d6e4ce58c177569d42b51772f7bb239a24a3darylm True: Safe and enabled 212b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ 213b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if sys.flags.no_user_site: 214b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return False 215b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 216b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if hasattr(os, "getuid") and hasattr(os, "geteuid"): 217b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # check process uid == effective uid 218b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if os.geteuid() != os.getuid(): 219b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return None 220b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if hasattr(os, "getgid") and hasattr(os, "getegid"): 221b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # check process gid == effective gid 222b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if os.getegid() != os.getgid(): 223b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return None 224b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 225b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return True 226b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 227b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef getuserbase(): 228b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Returns the `user base` directory path. 229b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 230b410d6e4ce58c177569d42b51772f7bb239a24a3darylm The `user base` directory can be used to store data. If the global 231b410d6e4ce58c177569d42b51772f7bb239a24a3darylm variable ``USER_BASE`` is not initialized yet, this function will also set 232b410d6e4ce58c177569d42b51772f7bb239a24a3darylm it. 233b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ 234b410d6e4ce58c177569d42b51772f7bb239a24a3darylm global USER_BASE 235b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if USER_BASE is not None: 236b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return USER_BASE 237b410d6e4ce58c177569d42b51772f7bb239a24a3darylm from sysconfig import get_config_var 238b410d6e4ce58c177569d42b51772f7bb239a24a3darylm USER_BASE = get_config_var('userbase') 239b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return USER_BASE 240b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 241b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef getusersitepackages(): 242b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Returns the user-specific site-packages directory path. 243b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 244b410d6e4ce58c177569d42b51772f7bb239a24a3darylm If the global variable ``USER_SITE`` is not initialized yet, this 245b410d6e4ce58c177569d42b51772f7bb239a24a3darylm function will also set it. 246b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ 247b410d6e4ce58c177569d42b51772f7bb239a24a3darylm global USER_SITE 248b410d6e4ce58c177569d42b51772f7bb239a24a3darylm user_base = getuserbase() # this will also set USER_BASE 249b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 250b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if USER_SITE is not None: 251b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return USER_SITE 252b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 253b410d6e4ce58c177569d42b51772f7bb239a24a3darylm from sysconfig import get_path 254b410d6e4ce58c177569d42b51772f7bb239a24a3darylm import os 255b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 256b410d6e4ce58c177569d42b51772f7bb239a24a3darylm USER_SITE = get_path('purelib', '%s_user' % os.name) 257b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return USER_SITE 258b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 259b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef addusersitepackages(known_paths): 260b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Add a per user site-package to sys.path 261b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 262b410d6e4ce58c177569d42b51772f7bb239a24a3darylm Each user has its own python directory with site-packages in the 263b410d6e4ce58c177569d42b51772f7bb239a24a3darylm home directory. 264b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ 265b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # get the per user site-package path 266b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # this call will also make sure USER_BASE and USER_SITE are set 267b410d6e4ce58c177569d42b51772f7bb239a24a3darylm user_site = getusersitepackages() 268b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 269b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if ENABLE_USER_SITE and os.path.isdir(user_site): 270b410d6e4ce58c177569d42b51772f7bb239a24a3darylm addsitedir(user_site, known_paths) 271b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return known_paths 272b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 273b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef getsitepackages(): 274b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Returns a list containing all global site-packages directories 275b410d6e4ce58c177569d42b51772f7bb239a24a3darylm (and possibly site-python). 276b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 277b410d6e4ce58c177569d42b51772f7bb239a24a3darylm For each directory present in the global ``PREFIXES``, this function 278b410d6e4ce58c177569d42b51772f7bb239a24a3darylm will find its `site-packages` subdirectory depending on the system 279b410d6e4ce58c177569d42b51772f7bb239a24a3darylm environment, and will return a list of full paths. 280b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ 281b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sitepackages = [] 282b410d6e4ce58c177569d42b51772f7bb239a24a3darylm seen = set() 283b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 284b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for prefix in PREFIXES: 285b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if not prefix or prefix in seen: 286b410d6e4ce58c177569d42b51772f7bb239a24a3darylm continue 287b410d6e4ce58c177569d42b51772f7bb239a24a3darylm seen.add(prefix) 288b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 289b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sitepackages.append(os.path.join(prefix, "lib", 290b410d6e4ce58c177569d42b51772f7bb239a24a3darylm "python." + sys.version[0] + sys.version[2], 291b410d6e4ce58c177569d42b51772f7bb239a24a3darylm "site-packages")) 292b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sitepackages.append(os.path.join(prefix, "lib", "site-python")) 293b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return sitepackages 294b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 295b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef addsitepackages(known_paths): 296b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Add site-packages (and possibly site-python) to sys.path""" 297b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for sitedir in getsitepackages(): 298b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if os.path.isdir(sitedir): 299b410d6e4ce58c177569d42b51772f7bb239a24a3darylm addsitedir(sitedir, known_paths) 300b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 301b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return known_paths 302b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 303b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef setBEGINLIBPATH(): 304b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """The UEFI port has optional extension modules that do double duty 305b410d6e4ce58c177569d42b51772f7bb239a24a3darylm as DLLs (even though they have .efi file extensions) for other extensions. 306b410d6e4ce58c177569d42b51772f7bb239a24a3darylm The library search path needs to be amended so these will be found 307b410d6e4ce58c177569d42b51772f7bb239a24a3darylm during module import. Use BEGINLIBPATH so that these are at the start 308b410d6e4ce58c177569d42b51772f7bb239a24a3darylm of the library search path. 309b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 310b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ 311b410d6e4ce58c177569d42b51772f7bb239a24a3darylm dllpath = os.path.join(sys.prefix, "Lib", "lib-dynload") 312b410d6e4ce58c177569d42b51772f7bb239a24a3darylm libpath = os.environ['BEGINLIBPATH'].split(os.path.pathsep) 313b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if libpath[-1]: 314b410d6e4ce58c177569d42b51772f7bb239a24a3darylm libpath.append(dllpath) 315b410d6e4ce58c177569d42b51772f7bb239a24a3darylm else: 316b410d6e4ce58c177569d42b51772f7bb239a24a3darylm libpath[-1] = dllpath 317b410d6e4ce58c177569d42b51772f7bb239a24a3darylm os.environ['BEGINLIBPATH'] = os.path.pathsep.join(libpath) 318b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 319b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 320b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef setquit(): 321b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Define new builtins 'quit' and 'exit'. 322b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 323b410d6e4ce58c177569d42b51772f7bb239a24a3darylm These are objects which make the interpreter exit when called. 324b410d6e4ce58c177569d42b51772f7bb239a24a3darylm The repr of each object contains a hint at how it works. 325b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 326b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ 327b410d6e4ce58c177569d42b51772f7bb239a24a3darylm eof = 'Ctrl-D (i.e. EOF)' 328b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 329b410d6e4ce58c177569d42b51772f7bb239a24a3darylm class Quitter(object): 330b410d6e4ce58c177569d42b51772f7bb239a24a3darylm def __init__(self, name): 331b410d6e4ce58c177569d42b51772f7bb239a24a3darylm self.name = name 332b410d6e4ce58c177569d42b51772f7bb239a24a3darylm def __repr__(self): 333b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return 'Use %s() or %s to exit' % (self.name, eof) 334b410d6e4ce58c177569d42b51772f7bb239a24a3darylm def __call__(self, code=None): 335b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # Shells like IDLE catch the SystemExit, but listen when their 336b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # stdin wrapper is closed. 337b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 338b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sys.stdin.close() 339b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except: 340b410d6e4ce58c177569d42b51772f7bb239a24a3darylm pass 341b410d6e4ce58c177569d42b51772f7bb239a24a3darylm raise SystemExit(code) 342b410d6e4ce58c177569d42b51772f7bb239a24a3darylm __builtin__.quit = Quitter('quit') 343b410d6e4ce58c177569d42b51772f7bb239a24a3darylm __builtin__.exit = Quitter('exit') 344b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 345b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 346b410d6e4ce58c177569d42b51772f7bb239a24a3darylmclass _Printer(object): 347b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """interactive prompt objects for printing the license text, a list of 348b410d6e4ce58c177569d42b51772f7bb239a24a3darylm contributors and the copyright notice.""" 349b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 350b410d6e4ce58c177569d42b51772f7bb239a24a3darylm MAXLINES = 23 351b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 352b410d6e4ce58c177569d42b51772f7bb239a24a3darylm def __init__(self, name, data, files=(), dirs=()): 353b410d6e4ce58c177569d42b51772f7bb239a24a3darylm self.__name = name 354b410d6e4ce58c177569d42b51772f7bb239a24a3darylm self.__data = data 355b410d6e4ce58c177569d42b51772f7bb239a24a3darylm self.__files = files 356b410d6e4ce58c177569d42b51772f7bb239a24a3darylm self.__dirs = dirs 357b410d6e4ce58c177569d42b51772f7bb239a24a3darylm self.__lines = None 358b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 359b410d6e4ce58c177569d42b51772f7bb239a24a3darylm def __setup(self): 360b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if self.__lines: 361b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return 362b410d6e4ce58c177569d42b51772f7bb239a24a3darylm data = None 363b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for dir in self.__dirs: 364b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for filename in self.__files: 365b410d6e4ce58c177569d42b51772f7bb239a24a3darylm filename = os.path.join(dir, filename) 366b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 367b410d6e4ce58c177569d42b51772f7bb239a24a3darylm fp = file(filename, "rU") 368b410d6e4ce58c177569d42b51772f7bb239a24a3darylm data = fp.read() 369b410d6e4ce58c177569d42b51772f7bb239a24a3darylm fp.close() 370b410d6e4ce58c177569d42b51772f7bb239a24a3darylm break 371b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except IOError: 372b410d6e4ce58c177569d42b51772f7bb239a24a3darylm pass 373b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if data: 374b410d6e4ce58c177569d42b51772f7bb239a24a3darylm break 375b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if not data: 376b410d6e4ce58c177569d42b51772f7bb239a24a3darylm data = self.__data 377b410d6e4ce58c177569d42b51772f7bb239a24a3darylm self.__lines = data.split('\n') 378b410d6e4ce58c177569d42b51772f7bb239a24a3darylm self.__linecnt = len(self.__lines) 379b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 380b410d6e4ce58c177569d42b51772f7bb239a24a3darylm def __repr__(self): 381b410d6e4ce58c177569d42b51772f7bb239a24a3darylm self.__setup() 382b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if len(self.__lines) <= self.MAXLINES: 383b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return "\n".join(self.__lines) 384b410d6e4ce58c177569d42b51772f7bb239a24a3darylm else: 385b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return "Type %s() to see the full %s text" % ((self.__name,)*2) 386b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 387b410d6e4ce58c177569d42b51772f7bb239a24a3darylm def __call__(self): 388b410d6e4ce58c177569d42b51772f7bb239a24a3darylm self.__setup() 389b410d6e4ce58c177569d42b51772f7bb239a24a3darylm prompt = 'Hit Return for more, or q (and Return) to quit: ' 390b410d6e4ce58c177569d42b51772f7bb239a24a3darylm lineno = 0 391b410d6e4ce58c177569d42b51772f7bb239a24a3darylm while 1: 392b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 393b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for i in range(lineno, lineno + self.MAXLINES): 394b410d6e4ce58c177569d42b51772f7bb239a24a3darylm print self.__lines[i] 395b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except IndexError: 396b410d6e4ce58c177569d42b51772f7bb239a24a3darylm break 397b410d6e4ce58c177569d42b51772f7bb239a24a3darylm else: 398b410d6e4ce58c177569d42b51772f7bb239a24a3darylm lineno += self.MAXLINES 399b410d6e4ce58c177569d42b51772f7bb239a24a3darylm key = None 400b410d6e4ce58c177569d42b51772f7bb239a24a3darylm while key is None: 401b410d6e4ce58c177569d42b51772f7bb239a24a3darylm key = raw_input(prompt) 402b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if key not in ('', 'q'): 403b410d6e4ce58c177569d42b51772f7bb239a24a3darylm key = None 404b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if key == 'q': 405b410d6e4ce58c177569d42b51772f7bb239a24a3darylm break 406b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 407b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef setcopyright(): 408b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Set 'copyright' and 'credits' in __builtin__""" 409b410d6e4ce58c177569d42b51772f7bb239a24a3darylm __builtin__.copyright = _Printer("copyright", sys.copyright) 410b410d6e4ce58c177569d42b51772f7bb239a24a3darylm __builtin__.credits = _Printer("credits", """\ 411b410d6e4ce58c177569d42b51772f7bb239a24a3darylm Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands 412b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for supporting Python development. See www.python.org for more information.""") 413b410d6e4ce58c177569d42b51772f7bb239a24a3darylm here = os.path.dirname(os.__file__) 414b410d6e4ce58c177569d42b51772f7bb239a24a3darylm __builtin__.license = _Printer( 415b410d6e4ce58c177569d42b51772f7bb239a24a3darylm "license", "See http://www.python.org/%.3s/license.html" % sys.version, 416b410d6e4ce58c177569d42b51772f7bb239a24a3darylm ["LICENSE.txt", "LICENSE"], 417b410d6e4ce58c177569d42b51772f7bb239a24a3darylm [os.path.join(here, os.pardir), here, os.curdir]) 418b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 419b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 420b410d6e4ce58c177569d42b51772f7bb239a24a3darylmclass _Helper(object): 421b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Define the builtin 'help'. 422b410d6e4ce58c177569d42b51772f7bb239a24a3darylm This is a wrapper around pydoc.help (with a twist). 423b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 424b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ 425b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 426b410d6e4ce58c177569d42b51772f7bb239a24a3darylm def __repr__(self): 427b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return "Type help() for interactive help, " \ 428b410d6e4ce58c177569d42b51772f7bb239a24a3darylm "or help(object) for help about object." 429b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 430b410d6e4ce58c177569d42b51772f7bb239a24a3darylm def __call__(self, *args, **kwds): 431b410d6e4ce58c177569d42b51772f7bb239a24a3darylm import pydoc 432b410d6e4ce58c177569d42b51772f7bb239a24a3darylm return pydoc.help(*args, **kwds) 433b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 434b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef sethelper(): 435b410d6e4ce58c177569d42b51772f7bb239a24a3darylm __builtin__.help = _Helper() 436b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 437b410d6e4ce58c177569d42b51772f7bb239a24a3darylm#### 438b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# Keep around for future mbcs support. 439b410d6e4ce58c177569d42b51772f7bb239a24a3darylm#### 440b410d6e4ce58c177569d42b51772f7bb239a24a3darylm#def aliasmbcs(): 441b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# """On Windows, some default encodings are not provided by Python, 442b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# while they are always available as "mbcs" in each locale. Make 443b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# them usable by aliasing to "mbcs" in such a case.""" 444b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# if sys.platform == 'win32': 445b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# import locale, codecs 446b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# enc = locale.getdefaultlocale()[1] 447b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# if enc.startswith('cp'): # "cp***" ? 448b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# try: 449b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# codecs.lookup(enc) 450b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# except LookupError: 451b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# import encodings 452b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# encodings._cache[enc] = encodings._unknown 453b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# encodings.aliases.aliases[enc] = 'mbcs' 454b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 455b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef setencoding(): 456b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Set the string encoding used by the Unicode implementation. The 457b410d6e4ce58c177569d42b51772f7bb239a24a3darylm default is 'ascii', but if you're willing to experiment, you can 458b410d6e4ce58c177569d42b51772f7bb239a24a3darylm change this.""" 459b410d6e4ce58c177569d42b51772f7bb239a24a3darylm encoding = "ascii" # Default value set by _PyUnicode_Init() 460b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if 0: 461b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # Enable to support locale aware default string encodings. 462b410d6e4ce58c177569d42b51772f7bb239a24a3darylm import locale 463b410d6e4ce58c177569d42b51772f7bb239a24a3darylm loc = locale.getdefaultlocale() 464b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if loc[1]: 465b410d6e4ce58c177569d42b51772f7bb239a24a3darylm encoding = loc[1] 466b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if 0: 467b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # Enable to switch off string to Unicode coercion and implicit 468b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # Unicode to string conversion. 469b410d6e4ce58c177569d42b51772f7bb239a24a3darylm encoding = "undefined" 470b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if encoding != "ascii": 471b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # On Non-Unicode builds this will raise an AttributeError... 472b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sys.setdefaultencoding(encoding) # Needs Python Unicode build ! 473b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 474b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 475b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef execsitecustomize(): 476b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Run custom site specific code, if available.""" 477b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 478b410d6e4ce58c177569d42b51772f7bb239a24a3darylm import sitecustomize 479b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except ImportError: 480b410d6e4ce58c177569d42b51772f7bb239a24a3darylm pass 481b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except Exception: 482b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if sys.flags.verbose: 483b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sys.excepthook(*sys.exc_info()) 484b410d6e4ce58c177569d42b51772f7bb239a24a3darylm else: 485b410d6e4ce58c177569d42b51772f7bb239a24a3darylm print >>sys.stderr, \ 486b410d6e4ce58c177569d42b51772f7bb239a24a3darylm "'import sitecustomize' failed; use -v for traceback" 487b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 488b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 489b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef execusercustomize(): 490b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """Run custom user specific code, if available.""" 491b410d6e4ce58c177569d42b51772f7bb239a24a3darylm try: 492b410d6e4ce58c177569d42b51772f7bb239a24a3darylm import usercustomize 493b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except ImportError: 494b410d6e4ce58c177569d42b51772f7bb239a24a3darylm pass 495b410d6e4ce58c177569d42b51772f7bb239a24a3darylm except Exception: 496b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if sys.flags.verbose: 497b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sys.excepthook(*sys.exc_info()) 498b410d6e4ce58c177569d42b51772f7bb239a24a3darylm else: 499b410d6e4ce58c177569d42b51772f7bb239a24a3darylm print>>sys.stderr, \ 500b410d6e4ce58c177569d42b51772f7bb239a24a3darylm "'import usercustomize' failed; use -v for traceback" 501b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 502b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 503b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef main(): 504b410d6e4ce58c177569d42b51772f7bb239a24a3darylm abs__file__() 505b410d6e4ce58c177569d42b51772f7bb239a24a3darylm known_paths = removeduppaths() 5063b553e0ab2146ef2055c969a1893b453b2023cf4darylm known_paths = addsitepackages(known_paths) 507b410d6e4ce58c177569d42b51772f7bb239a24a3darylm setquit() 508b410d6e4ce58c177569d42b51772f7bb239a24a3darylm setcopyright() 509b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sethelper() 510b410d6e4ce58c177569d42b51772f7bb239a24a3darylm# aliasmbcs() 511b410d6e4ce58c177569d42b51772f7bb239a24a3darylm setencoding() 512b410d6e4ce58c177569d42b51772f7bb239a24a3darylm execsitecustomize() 513b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # Remove sys.setdefaultencoding() so that users cannot change the 514b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # encoding after initialization. The test for presence is needed when 515b410d6e4ce58c177569d42b51772f7bb239a24a3darylm # this module is run as a script, because this code is executed twice. 516b410d6e4ce58c177569d42b51772f7bb239a24a3darylm if hasattr(sys, "setdefaultencoding"): 517b410d6e4ce58c177569d42b51772f7bb239a24a3darylm del sys.setdefaultencoding 518b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 519b410d6e4ce58c177569d42b51772f7bb239a24a3darylmmain() 520b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 521b410d6e4ce58c177569d42b51772f7bb239a24a3darylmdef _script(): 522b410d6e4ce58c177569d42b51772f7bb239a24a3darylm help = """\ 523b410d6e4ce58c177569d42b51772f7bb239a24a3darylm %s 524b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 525b410d6e4ce58c177569d42b51772f7bb239a24a3darylm Path elements are normally separated by '%s'. 526b410d6e4ce58c177569d42b51772f7bb239a24a3darylm """ 527b410d6e4ce58c177569d42b51772f7bb239a24a3darylm print "sys.path = [" 528b410d6e4ce58c177569d42b51772f7bb239a24a3darylm for dir in sys.path: 529b410d6e4ce58c177569d42b51772f7bb239a24a3darylm print " %r," % (dir,) 530b410d6e4ce58c177569d42b51772f7bb239a24a3darylm print "]" 531b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 532b410d6e4ce58c177569d42b51772f7bb239a24a3darylm import textwrap 533b410d6e4ce58c177569d42b51772f7bb239a24a3darylm print textwrap.dedent(help % (sys.argv[0], os.pathsep)) 534b410d6e4ce58c177569d42b51772f7bb239a24a3darylm sys.exit(0) 535b410d6e4ce58c177569d42b51772f7bb239a24a3darylm 536b410d6e4ce58c177569d42b51772f7bb239a24a3darylmif __name__ == '__main__': 537b410d6e4ce58c177569d42b51772f7bb239a24a3darylm _script() 538