Vega strike Python Modules doc  0.5.1
Documentation of the " Modules " folder of Vega strike
 All Data Structures Namespaces Files Functions Variables
site.py
Go to the documentation of this file.
1 """Append module search paths for third-party packages to sys.path.
2 
3 ****************************************************************
4 * This module is automatically imported during initialization. *
5 ****************************************************************
6 
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
11 works).
12 
13 This will append site-specific paths to to the module search path. On
14 Unix, it starts with sys.prefix and sys.exec_prefix (if different) and
15 appends lib/python<version>/site-packages as well as lib/site-python.
16 On other platforms (mainly Mac and Windows), it uses just sys.prefix
17 (and sys.exec_prefix, if different, but this is unlikely). The
18 resulting directories, if they exist, are appended to sys.path, and
19 also inspected for path configuration files.
20 
21 A path configuration file is a file whose name has the form
22 <package>.pth; its contents are additional directories (one per line)
23 to be added to sys.path. Non-existing directories (or
24 non-directories) are never added to sys.path; no directory is added to
25 sys.path more than once. Blank lines and lines beginning with
26 '#' are skipped. Lines starting with 'import' are executed.
27 
28 For example, suppose sys.prefix and sys.exec_prefix are set to
29 /usr/local and there is a directory /usr/local/lib/python1.5/site-packages
30 with three subdirectories, foo, bar and spam, and two path
31 configuration files, foo.pth and bar.pth. Assume foo.pth contains the
32 following:
33 
34  # foo package configuration
35  foo
36  bar
37  bletch
38 
39 and bar.pth contains:
40 
41  # bar package configuration
42  bar
43 
44 Then the following directories are added to sys.path, in this order:
45 
46  /usr/local/lib/python1.5/site-packages/bar
47  /usr/local/lib/python1.5/site-packages/foo
48 
49 Note that bletch is omitted because it doesn't exist; bar precedes foo
50 because bar.pth comes alphabetically before foo.pth; and spam is
51 omitted because it is not mentioned in either path configuration file.
52 
53 After these path manipulations, an attempt is made to import a module
54 named sitecustomize, which can perform arbitrary additional
55 site-specific customizations. If this import fails with an
56 ImportError exception, it is silently ignored.
57 
58 """
59 
60 import sys, os
61 
62 
63 def makepath(*paths):
64  dir = os.path.abspath(os.path.join(*paths))
65  return dir, os.path.normcase(dir)
66 
67 for m in sys.modules.values():
68  if hasattr(m, "__file__") and m.__file__:
69  m.__file__ = os.path.abspath(m.__file__)
70 del m
71 
72 # This ensures that the initial path provided by the interpreter contains
73 # only absolute pathnames, even if we're running from the build directory.
74 L = []
75 _dirs_in_sys_path = {}
76 for dir in sys.path:
77  # Filter out paths that don't exist, but leave in the empty string
78  # since it's a special case. We also need to special-case the Mac,
79  # as file names are allowed on sys.path there.
80  if sys.platform != 'mac':
81  if dir and not os.path.isdir(dir):
82  continue
83  else:
84  if dir and not os.path.exists(dir):
85  continue
86  dir, dircase = makepath(dir)
87  if not _dirs_in_sys_path.has_key(dircase):
88  L.append(dir)
89  _dirs_in_sys_path[dircase] = 1
90 sys.path[:] = L
91 del dir, L
92 
93 # Append ./build/lib.<platform> in case we're running in the build dir
94 # (especially for Guido :-)
95 if os.name == "posix" and os.path.basename(sys.path[-1]) == "Modules":
96  from distutils.util import get_platform
97  s = "build/lib.%s-%.3s" % (get_platform(), sys.version)
98  s = os.path.join(os.path.dirname(sys.path[-1]), s)
99  sys.path.append(s)
100  del get_platform, s
101 
102 def _init_pathinfo():
103  global _dirs_in_sys_path
104  _dirs_in_sys_path = d = {}
105  for dir in sys.path:
106  if dir and not os.path.isdir(dir):
107  continue
108  dir, dircase = makepath(dir)
109  d[dircase] = 1
110 
111 def addsitedir(sitedir):
112  global _dirs_in_sys_path
113  if _dirs_in_sys_path is None:
114  _init_pathinfo()
115  reset = 1
116  else:
117  reset = 0
118  sitedir, sitedircase = makepath(sitedir)
119  if not _dirs_in_sys_path.has_key(sitedircase):
120  sys.path.append(sitedir) # Add path component
121  try:
122  names = os.listdir(sitedir)
123  except os.error:
124  return
125  names.sort()
126  for name in names:
127  if name[-4:] == os.extsep + "pth":
128  addpackage(sitedir, name)
129  if reset:
130  _dirs_in_sys_path = None
131 
132 def addpackage(sitedir, name):
133  global _dirs_in_sys_path
134  if _dirs_in_sys_path is None:
135  _init_pathinfo()
136  reset = 1
137  else:
138  reset = 0
139  fullname = os.path.join(sitedir, name)
140  try:
141  f = open(fullname)
142  except IOError:
143  return
144  while 1:
145  dir = f.readline()
146  if not dir:
147  break
148  if dir[0] == '#':
149  continue
150  if dir.startswith("import"):
151  exec dir
152  continue
153  if dir[-1] == '\n':
154  dir = dir[:-1]
155  dir, dircase = makepath(sitedir, dir)
156  if not _dirs_in_sys_path.has_key(dircase) and os.path.exists(dir):
157  sys.path.append(dir)
158  _dirs_in_sys_path[dircase] = 1
159  if reset:
160  _dirs_in_sys_path = None
161 
162 prefixes = [sys.prefix]
163 if sys.exec_prefix != sys.prefix:
164  prefixes.append(sys.exec_prefix)
165 for prefix in prefixes:
166  if prefix:
167  if os.sep == '/':
168  sitedirs = [os.path.join(prefix,
169  "lib",
170  "python" + sys.version[:3],
171  "site-packages"),
172  os.path.join(prefix, "lib", "site-python")]
173  else:
174  sitedirs = [prefix, os.path.join(prefix, "lib", "site-packages")]
175  for sitedir in sitedirs:
176  if os.path.isdir(sitedir):
177  addsitedir(sitedir)
178 
179 _dirs_in_sys_path = None
180 
181 
182 # Define new built-ins 'quit' and 'exit'.
183 # These are simply strings that display a hint on how to exit.
184 if os.sep == ':':
185  exit = 'Use Cmd-Q to quit.'
186 elif os.sep == '\\':
187  exit = 'Use Ctrl-Z plus Return to exit.'
188 else:
189  exit = 'Use Ctrl-D (i.e. EOF) to exit.'
190 import __builtin__
191 __builtin__.quit = __builtin__.exit = exit
192 del exit
193 
194 # interactive prompt objects for printing the license text, a list of
195 # contributors and the copyright notice.
196 class _Printer:
197  MAXLINES = 23
198 
199  def __init__(self, name, data, files=(), dirs=()):
200  self.__name = name
201  self.__data = data
202  self.__files = files
203  self.__dirs = dirs
204  self.__lines = None
205 
206  def __setup(self):
207  if self.__lines:
208  return
209  data = None
210  for dir in self.__dirs:
211  for file in self.__files:
212  file = os.path.join(dir, file)
213  try:
214  fp = open(file)
215  data = fp.read()
216  fp.close()
217  break
218  except IOError:
219  pass
220  if data:
221  break
222  if not data:
223  data = self.__data
224  self.__lines = data.split('\n')
225  self.__linecnt = len(self.__lines)
226 
227  def __repr__(self):
228  self.__setup()
229  if len(self.__lines) <= self.MAXLINES:
230  return "\n".join(self.__lines)
231  else:
232  return "Type %s() to see the full %s text" % ((self.__name,)*2)
233 
234  def __call__(self):
235  self.__setup()
236  prompt = 'Hit Return for more, or q (and Return) to quit: '
237  lineno = 0
238  while 1:
239  try:
240  for i in range(lineno, lineno + self.MAXLINES):
241  print self.__lines[i]
242  except IndexError:
243  break
244  else:
245  lineno += self.MAXLINES
246  key = None
247  while key is None:
248  key = raw_input(prompt)
249  if key not in ('', 'q'):
250  key = None
251  if key == 'q':
252  break
253 
254 __builtin__.copyright = _Printer("copyright", sys.copyright)
255 if sys.platform[:4] == 'java':
256  __builtin__.credits = _Printer(
257  "credits",
258  "Jython is maintained by the Jython developers (www.jython.org).")
259 else:
260  __builtin__.credits = _Printer("credits", """\
261 Thanks to CWI, CNRI, BeOpen.com, Digital Creations and a cast of thousands
262 for supporting Python development. See www.python.org for more information.""")
263 here = os.path.dirname(os.__file__)
264 __builtin__.license = _Printer(
265  "license", "See http://www.python.org/%.3s/license.html" % sys.version,
266  ["LICENSE.txt", "LICENSE"],
267  [os.path.join(here, os.pardir), here, os.curdir])
268 
269 
270 # Define new built-in 'help'.
271 # This is a wrapper around pydoc.help (with a twist).
272 
273 class _Helper:
274  def __repr__(self):
275  return "Type help() for interactive help, " \
276  "or help(object) for help about object."
277  def __call__(self, *args, **kwds):
278  import pydoc
279  return pydoc.help(*args, **kwds)
280 
281 __builtin__.help = _Helper()
282 
283 
284 # Set the string encoding used by the Unicode implementation. The
285 # default is 'ascii', but if you're willing to experiment, you can
286 # change this.
287 
288 encoding = "ascii" # Default value set by _PyUnicode_Init()
289 
290 if 0:
291  # Enable to support locale aware default string encodings.
292  import locale
294  if loc[1]:
295  encoding = loc[1]
296 
297 if 0:
298  # Enable to switch off string to Unicode coercion and implicit
299  # Unicode to string conversion.
300  encoding = "undefined"
301 
302 if encoding != "ascii":
303  # On Non-Unicode builds this will raise an AttributeError...
304  sys.setdefaultencoding(encoding) # Needs Python Unicode build !
305 
306 #
307 # Run custom site specific code, if available.
308 #
309 try:
310  import sitecustomize
311 except ImportError:
312  pass
313 
314 #
315 # Remove sys.setdefaultencoding() so that users cannot change the
316 # encoding after initialization. The test for presence is needed when
317 # this module is run as a script, because this code is executed twice.
318 #
319 if hasattr(sys, "setdefaultencoding"):
320  del sys.setdefaultencoding
321 
322 def _test():
323  print "sys.path = ["
324  for dir in sys.path:
325  print " %s," % `dir`
326  print "]"
327 
328 if __name__ == '__main__':
329  _test()