]>
git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Python/Python-2.7.10/PyMod-2.7.10/Lib/site.py
1 """Append module search paths for third-party packages to sys.path.
3 ****************************************************************
4 * This module is automatically imported during initialization. *
5 ****************************************************************
7 In earlier versions of Python (up to 1.5a3), scripts or modules that
8 needed to use site-specific modules would place ``import site''
9 somewhere near the top of their code. Because of the automatic
10 import, this is no longer necessary (but code that does it still
13 This will append site-specific paths to the module search path. On
14 Unix (including Mac OSX), it starts with sys.prefix and
15 sys.exec_prefix (if different) and appends
16 lib/python<version>/site-packages as well as lib/site-python.
17 On other platforms (such as Windows), it tries each of the
18 prefixes directly, as well as with lib/site-packages appended. The
19 resulting directories, if they exist, are appended to sys.path, and
20 also inspected for path configuration files.
22 A path configuration file is a file whose name has the form
23 <package>.pth; its contents are additional directories (one per line)
24 to be added to sys.path. Non-existing directories (or
25 non-directories) are never added to sys.path; no directory is added to
26 sys.path more than once. Blank lines and lines beginning with
27 '#' are skipped. Lines starting with 'import' are executed.
29 For example, suppose sys.prefix and sys.exec_prefix are set to
30 /usr/local and there is a directory /usr/local/lib/python2.5/site-packages
31 with three subdirectories, foo, bar and spam, and two path
32 configuration files, foo.pth and bar.pth. Assume foo.pth contains the
35 # foo package configuration
42 # bar package configuration
45 Then the following directories are added to sys.path, in this order:
47 /usr/local/lib/python2.5/site-packages/bar
48 /usr/local/lib/python2.5/site-packages/foo
50 Note that bletch is omitted because it doesn't exist; bar precedes foo
51 because bar.pth comes alphabetically before foo.pth; and spam is
52 omitted because it is not mentioned in either path configuration file.
54 After these path manipulations, an attempt is made to import a module
55 named sitecustomize, which can perform arbitrary additional
56 site-specific customizations. If this import fails with an
57 ImportError exception, it is silently ignored.
66 # Prefixes for site-packages; add additional prefixes like /usr/local here
67 PREFIXES
= [sys
.prefix
, sys
.exec_prefix
]
68 # Enable per user site-packages directory
69 # set it to False to disable the feature or True to force the feature
70 ENABLE_USER_SITE
= None
72 # for distutils.commands.install
73 # These values are initialized by the getuserbase() and getusersitepackages()
74 # functions, through the main() function when Python starts.
80 dir = os
.path
.join(*paths
)
82 dir = os
.path
.abspath(dir)
85 return dir, os
.path
.normcase(dir)
89 """Set all module' __file__ attribute to an absolute path"""
90 for m
in sys
.modules
.values():
91 if hasattr(m
, '__loader__'):
92 continue # don't mess with a PEP 302-supplied __file__
94 m
.__file
__ = os
.path
.abspath(m
.__file
__)
95 except (AttributeError, OSError):
100 """ Remove duplicate entries from sys.path along with making them
102 # This ensures that the initial path provided by the interpreter contains
103 # only absolute pathnames, even if we're running from the build directory.
107 # Filter out duplicate paths (on case-insensitive file systems also
108 # if they only differ in case); turn relative paths into absolute
110 dir, dircase
= makepath(dir)
111 if not dircase
in known_paths
:
113 known_paths
.add(dircase
)
118 def _init_pathinfo():
119 """Return a set containing all existing directory entries from sys.path"""
123 if os
.path
.isdir(dir):
124 dir, dircase
= makepath(dir)
131 def addpackage(sitedir
, name
, known_paths
):
132 """Process a .pth file within the site-packages directory:
133 For each line in the file, either combine it with sitedir to a path
134 and add that to known_paths, or execute it if it starts with 'import '.
136 if known_paths
is None:
141 fullname
= os
.path
.join(sitedir
, name
)
143 f
= open(fullname
, "rU")
147 for n
, line
in enumerate(f
):
148 if line
.startswith("#"):
151 if line
.startswith(("import ", "import\t")):
155 dir, dircase
= makepath(sitedir
, line
)
156 if not dircase
in known_paths
and os
.path
.exists(dir):
158 known_paths
.add(dircase
)
159 except Exception as err
:
160 print >>sys
.stderr
, "Error processing line {:d} of {}:\n".format(
162 for record
in traceback
.format_exception(*sys
.exc_info()):
163 for line
in record
.splitlines():
164 print >>sys
.stderr
, ' '+line
165 print >>sys
.stderr
, "\nRemainder of file ignored"
172 def addsitedir(sitedir
, known_paths
=None):
173 """Add 'sitedir' argument to sys.path if missing and handle .pth files in
175 if known_paths
is None:
176 known_paths
= _init_pathinfo()
180 sitedir
, sitedircase
= makepath(sitedir
)
181 if not sitedircase
in known_paths
:
182 sys
.path
.append(sitedir
) # Add path component
184 names
= os
.listdir(sitedir
)
187 dotpth
= os
.extsep
+ "pth"
188 names
= [name
for name
in names
if name
.endswith(dotpth
)]
189 for name
in sorted(names
):
190 addpackage(sitedir
, name
, known_paths
)
196 def check_enableusersite():
197 """Check if user site directory is safe for inclusion
199 The function tests for the command line flag (including environment var),
200 process uid/gid equal to effective uid/gid.
202 None: Disabled for security reasons
203 False: Disabled by user (command line option)
204 True: Safe and enabled
206 if sys
.flags
.no_user_site
:
209 if hasattr(os
, "getuid") and hasattr(os
, "geteuid"):
210 # check process uid == effective uid
211 if os
.geteuid() != os
.getuid():
213 if hasattr(os
, "getgid") and hasattr(os
, "getegid"):
214 # check process gid == effective gid
215 if os
.getegid() != os
.getgid():
221 """Returns the `user base` directory path.
223 The `user base` directory can be used to store data. If the global
224 variable ``USER_BASE`` is not initialized yet, this function will also set
228 if USER_BASE
is not None:
230 from sysconfig
import get_config_var
231 USER_BASE
= get_config_var('userbase')
234 def getusersitepackages():
235 """Returns the user-specific site-packages directory path.
237 If the global variable ``USER_SITE`` is not initialized yet, this
238 function will also set it.
241 user_base
= getuserbase() # this will also set USER_BASE
243 if USER_SITE
is not None:
246 from sysconfig
import get_path
249 if sys
.platform
== 'darwin':
250 from sysconfig
import get_config_var
251 if get_config_var('PYTHONFRAMEWORK'):
252 USER_SITE
= get_path('purelib', 'osx_framework_user')
255 USER_SITE
= get_path('purelib', '%s_user' % os
.name
)
258 def addusersitepackages(known_paths
):
259 """Add a per user site-package to sys.path
261 Each user has its own python directory with site-packages in the
264 # get the per user site-package path
265 # this call will also make sure USER_BASE and USER_SITE are set
266 user_site
= getusersitepackages()
268 if ENABLE_USER_SITE
and os
.path
.isdir(user_site
):
269 addsitedir(user_site
, known_paths
)
272 def getsitepackages():
273 """Returns a list containing all global site-packages directories
274 (and possibly site-python).
276 For each directory present in the global ``PREFIXES``, this function
277 will find its `site-packages` subdirectory depending on the system
278 environment, and will return a list of full paths.
283 for prefix
in PREFIXES
:
284 if not prefix
or prefix
in seen
:
288 if sys
.platform
in ('os2emx', 'riscos'):
289 sitepackages
.append(os
.path
.join(prefix
, "Lib", "site-packages"))
291 sitepackages
.append(os
.path
.join(prefix
, "lib",
292 "python" + sys
.version
[:3],
294 sitepackages
.append(os
.path
.join(prefix
, "lib", "site-python"))
296 sitepackages
.append(prefix
)
297 sitepackages
.append(os
.path
.join(prefix
, "lib", "site-packages"))
298 if sys
.platform
== "darwin":
299 # for framework builds *only* we add the standard Apple
301 from sysconfig
import get_config_var
302 framework
= get_config_var("PYTHONFRAMEWORK")
305 os
.path
.join("/Library", framework
,
306 sys
.version
[:3], "site-packages"))
309 def addsitepackages(known_paths
):
310 """Add site-packages (and possibly site-python) to sys.path"""
311 for sitedir
in getsitepackages():
312 if os
.path
.isdir(sitedir
):
313 addsitedir(sitedir
, known_paths
)
317 def setBEGINLIBPATH():
318 """The OS/2 EMX port has optional extension modules that do double duty
319 as DLLs (and must use the .DLL file extension) for other extensions.
320 The library search path needs to be amended so these will be found
321 during module import. Use BEGINLIBPATH so that these are at the start
322 of the library search path.
325 dllpath
= os
.path
.join(sys
.prefix
, "Lib", "lib-dynload")
326 libpath
= os
.environ
['BEGINLIBPATH'].split(';')
328 libpath
.append(dllpath
)
330 libpath
[-1] = dllpath
331 os
.environ
['BEGINLIBPATH'] = ';'.join(libpath
)
335 """Define new builtins 'quit' and 'exit'.
337 These are objects which make the interpreter exit when called.
338 The repr of each object contains a hint at how it works.
344 eof
= 'Ctrl-Z plus Return'
346 eof
= 'Ctrl-D (i.e. EOF)'
348 class Quitter(object):
349 def __init__(self
, name
):
352 return 'Use %s() or %s to exit' % (self
.name
, eof
)
353 def __call__(self
, code
=None):
354 # Shells like IDLE catch the SystemExit, but listen when their
355 # stdin wrapper is closed.
360 raise SystemExit(code
)
361 __builtin__
.quit
= Quitter('quit')
362 __builtin__
.exit
= Quitter('exit')
365 class _Printer(object):
366 """interactive prompt objects for printing the license text, a list of
367 contributors and the copyright notice."""
371 def __init__(self
, name
, data
, files
=(), dirs
=()):
382 for dir in self
.__dirs
:
383 for filename
in self
.__files
:
384 filename
= os
.path
.join(dir, filename
)
386 fp
= file(filename
, "rU")
396 self
.__lines
= data
.split('\n')
397 self
.__linecnt
= len(self
.__lines
)
401 if len(self
.__lines
) <= self
.MAXLINES
:
402 return "\n".join(self
.__lines
)
404 return "Type %s() to see the full %s text" % ((self
.__name
,)*2)
408 prompt
= 'Hit Return for more, or q (and Return) to quit: '
412 for i
in range(lineno
, lineno
+ self
.MAXLINES
):
413 print self
.__lines
[i
]
417 lineno
+= self
.MAXLINES
420 key
= raw_input(prompt
)
421 if key
not in ('', 'q'):
427 """Set 'copyright' and 'credits' in __builtin__"""
428 __builtin__
.copyright
= _Printer("copyright", sys
.copyright
)
429 if sys
.platform
[:4] == 'java':
430 __builtin__
.credits
= _Printer(
432 "Jython is maintained by the Jython developers (www.jython.org).")
434 __builtin__
.credits
= _Printer("credits", """\
435 Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
436 for supporting Python development. See www.python.org for more information.""")
437 here
= os
.path
.dirname(os
.__file
__)
438 __builtin__
.license
= _Printer(
439 "license", "See https://www.python.org/psf/license/",
440 ["LICENSE.txt", "LICENSE"],
441 [os
.path
.join(here
, os
.pardir
), here
, os
.curdir
])
444 class _Helper(object):
445 """Define the builtin 'help'.
446 This is a wrapper around pydoc.help (with a twist).
451 return "Type help() for interactive help, " \
452 "or help(object) for help about object."
453 def __call__(self
, *args
, **kwds
):
455 return pydoc
.help(*args
, **kwds
)
458 __builtin__
.help = _Helper()
461 """On Windows, some default encodings are not provided by Python,
462 while they are always available as "mbcs" in each locale. Make
463 them usable by aliasing to "mbcs" in such a case."""
464 if sys
.platform
== 'win32':
465 import locale
, codecs
466 enc
= locale
.getdefaultlocale()[1]
467 if enc
.startswith('cp'): # "cp***" ?
472 encodings
._cache
[enc
] = encodings
._unknown
473 encodings
.aliases
.aliases
[enc
] = 'mbcs'
476 """Set the string encoding used by the Unicode implementation. The
477 default is 'ascii', but if you're willing to experiment, you can
479 encoding
= "ascii" # Default value set by _PyUnicode_Init()
481 # Enable to support locale aware default string encodings.
483 loc
= locale
.getdefaultlocale()
487 # Enable to switch off string to Unicode coercion and implicit
488 # Unicode to string conversion.
489 encoding
= "undefined"
490 if encoding
!= "ascii":
491 # On Non-Unicode builds this will raise an AttributeError...
492 sys
.setdefaultencoding(encoding
) # Needs Python Unicode build !
495 def execsitecustomize():
496 """Run custom site specific code, if available."""
502 if sys
.flags
.verbose
:
503 sys
.excepthook(*sys
.exc_info())
505 print >>sys
.stderr
, \
506 "'import sitecustomize' failed; use -v for traceback"
509 def execusercustomize():
510 """Run custom user specific code, if available."""
516 if sys
.flags
.verbose
:
517 sys
.excepthook(*sys
.exc_info())
520 "'import usercustomize' failed; use -v for traceback"
524 global ENABLE_USER_SITE
527 known_paths
= removeduppaths()
528 if ENABLE_USER_SITE
is None:
529 ENABLE_USER_SITE
= check_enableusersite()
530 known_paths
= addusersitepackages(known_paths
)
531 known_paths
= addsitepackages(known_paths
)
532 if sys
.platform
== 'os2emx':
542 # Remove sys.setdefaultencoding() so that users cannot change the
543 # encoding after initialization. The test for presence is needed when
544 # this module is run as a script, because this code is executed twice.
545 if hasattr(sys
, "setdefaultencoding"):
546 del sys
.setdefaultencoding
552 %s [--user-base] [--user-site]
554 Without arguments print some useful information
555 With arguments print the value of USER_BASE and/or USER_SITE separated
558 Exit codes with --user-base or --user-site:
559 0 - user site directory is enabled
560 1 - user site directory is disabled by user
561 2 - uses site directory is disabled by super user
562 or for security reasons
569 print " %r," % (dir,)
571 print "USER_BASE: %r (%s)" % (USER_BASE
,
572 "exists" if os
.path
.isdir(USER_BASE
) else "doesn't exist")
573 print "USER_SITE: %r (%s)" % (USER_SITE
,
574 "exists" if os
.path
.isdir(USER_SITE
) else "doesn't exist")
575 print "ENABLE_USER_SITE: %r" % ENABLE_USER_SITE
579 if '--user-base' in args
:
580 buffer.append(USER_BASE
)
581 if '--user-site' in args
:
582 buffer.append(USER_SITE
)
585 print os
.pathsep
.join(buffer)
588 elif ENABLE_USER_SITE
is False:
590 elif ENABLE_USER_SITE
is None:
596 print textwrap
.dedent(help % (sys
.argv
[0], os
.pathsep
))
599 if __name__
== '__main__':