Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Doc/library/runpy.rst

    r2 r391  
    99.. versionadded:: 2.5
    1010
     11**Source code:** :source:`Lib/runpy.py`
     12
     13--------------
     14
    1115The :mod:`runpy` module is used to locate and run Python modules without
    12 importing them first. Its main use is to implement the :option:`-m` command line
    13 switch that allows scripts to be located using the Python module namespace
    14 rather than the filesystem.
     16importing them first. Its main use is to implement the :option:`-m` command
     17line switch that allows scripts to be located using the Python module
     18namespace rather than the filesystem.
    1519
    16 When executed as a script, the module effectively operates as follows::
    17 
    18    del sys.argv[0]  # Remove the runpy module from the arguments
    19    run_module(sys.argv[0], run_name="__main__", alter_sys=True)
    20 
    21 The :mod:`runpy` module provides a single function:
     20The :mod:`runpy` module provides two functions:
    2221
    2322
    24 .. function:: run_module(mod_name[, init_globals] [, run_name][, alter_sys])
     23.. function:: run_module(mod_name, init_globals=None, run_name=None, alter_sys=False)
    2524
    26    Execute the code of the specified module and return the resulting module globals
    27    dictionary. The module's code is first located using the standard import
    28    mechanism (refer to PEP 302 for details) and then executed in a fresh module
    29    namespace.
     25   Execute the code of the specified module and return the resulting module
     26   globals dictionary. The module's code is first located using the standard
     27   import mechanism (refer to :pep:`302` for details) and then executed in a
     28   fresh module namespace.
    3029
    31    The optional dictionary argument *init_globals* may be used to pre-populate the
    32    globals dictionary before the code is executed. The supplied dictionary will not
    33    be modified. If any of the special global variables below are defined in the
    34    supplied dictionary, those definitions are overridden by the ``run_module``
    35    function.
     30   If the supplied module name refers to a package rather than a normal
     31   module, then that package is imported and the ``__main__`` submodule within
     32   that package is then executed and the resulting module globals dictionary
     33   returned.
    3634
    37    The special global variables ``__name__``, ``__file__``, ``__loader__`` and
    38    ``__builtins__`` are set in the globals dictionary before the module code is
    39    executed.
     35   The optional dictionary argument *init_globals* may be used to pre-populate
     36   the module's globals dictionary before the code is executed. The supplied
     37   dictionary will not be modified. If any of the special global variables
     38   below are defined in the supplied dictionary, those definitions are
     39   overridden by :func:`run_module`.
    4040
    41    ``__name__`` is set to *run_name* if this optional argument is supplied, and the
    42    *mod_name* argument otherwise.
     41   The special global variables ``__name__``, ``__file__``, ``__loader__``
     42   and ``__package__`` are set in the globals dictionary before the module
     43   code is executed (Note that this is a minimal set of variables - other
     44   variables may be set implicitly as an interpreter implementation detail).
    4345
    44    ``__loader__`` is set to the PEP 302 module loader used to retrieve the code for
    45    the module (This loader may be a wrapper around the standard import mechanism).
     46   ``__name__`` is set to *run_name* if this optional argument is not
     47   :const:`None`, to ``mod_name + '.__main__'`` if the named module is a
     48   package and to the *mod_name* argument otherwise.
    4649
    47    ``__file__`` is set to the name provided by the module loader. If the loader
    48    does not make filename information available, this variable is set to ``None``.
     50   ``__file__`` is set to the name provided by the module loader. If the
     51   loader does not make filename information available, this variable is set
     52   to :const:`None`.
    4953
    50    ``__builtins__`` is automatically initialised with a reference to the top level
    51    namespace of the :mod:`__builtin__` module.
     54   ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
     55   code for the module (This loader may be a wrapper around the standard
     56   import mechanism).
    5257
    53    If the argument *alter_sys* is supplied and evaluates to ``True``, then
    54    ``sys.argv[0]`` is updated with the value of ``__file__`` and
     58   ``__package__`` is set to *mod_name* if the named module is a package and
     59   to ``mod_name.rpartition('.')[0]`` otherwise.
     60
     61   If the argument *alter_sys* is supplied and evaluates to :const:`True`,
     62   then ``sys.argv[0]`` is updated with the value of ``__file__`` and
    5563   ``sys.modules[__name__]`` is updated with a temporary module object for the
    5664   module being executed. Both ``sys.argv[0]`` and ``sys.modules[__name__]``
    5765   are restored to their original values before the function returns.
    5866
    59    Note that this manipulation of :mod:`sys` is not thread-safe. Other threads may
    60    see the partially initialised module, as well as the altered list of arguments.
    61    It is recommended that the :mod:`sys` module be left alone when invoking this
    62    function from threaded code.
     67   Note that this manipulation of :mod:`sys` is not thread-safe. Other threads
     68   may see the partially initialised module, as well as the altered list of
     69   arguments. It is recommended that the :mod:`sys` module be left alone when
     70   invoking this function from threaded code.
    6371
     72
     73   .. versionchanged:: 2.7
     74         Added ability to execute packages by looking for a ``__main__``
     75         submodule
     76
     77
     78.. function:: run_path(file_path, init_globals=None, run_name=None)
     79
     80   Execute the code at the named filesystem location and return the resulting
     81   module globals dictionary. As with a script name supplied to the CPython
     82   command line, the supplied path may refer to a Python source file, a
     83   compiled bytecode file or a valid sys.path entry containing a ``__main__``
     84   module (e.g. a zipfile containing a top-level ``__main__.py`` file).
     85
     86   For a simple script, the specified code is simply executed in a fresh
     87   module namespace. For a valid sys.path entry (typically a zipfile or
     88   directory), the entry is first added to the beginning of ``sys.path``. The
     89   function then looks for and executes a :mod:`__main__` module using the
     90   updated path. Note that there is no special protection against invoking
     91   an existing :mod:`__main__` entry located elsewhere on ``sys.path`` if
     92   there is no such module at the specified location.
     93
     94   The optional dictionary argument *init_globals* may be used to pre-populate
     95   the module's globals dictionary before the code is executed. The supplied
     96   dictionary will not be modified. If any of the special global variables
     97   below are defined in the supplied dictionary, those definitions are
     98   overridden by :func:`run_path`.
     99
     100   The special global variables ``__name__``, ``__file__``, ``__loader__``
     101   and ``__package__`` are set in the globals dictionary before the module
     102   code is executed (Note that this is a minimal set of variables - other
     103   variables may be set implicitly as an interpreter implementation detail).
     104
     105   ``__name__`` is set to *run_name* if this optional argument is not
     106   :const:`None` and to ``'<run_path>'`` otherwise.
     107
     108   ``__file__`` is set to the name provided by the module loader. If the
     109   loader does not make filename information available, this variable is set
     110   to :const:`None`. For a simple script, this will be set to ``file_path``.
     111
     112   ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
     113   code for the module (This loader may be a wrapper around the standard
     114   import mechanism). For a simple script, this will be set to :const:`None`.
     115
     116   ``__package__`` is set to ``__name__.rpartition('.')[0]``.
     117
     118   A number of alterations are also made to the :mod:`sys` module. Firstly,
     119   ``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated
     120   with the value of ``file_path`` and ``sys.modules[__name__]`` is updated
     121   with a temporary module object for the module being executed. All
     122   modifications to items in :mod:`sys` are reverted before the function
     123   returns.
     124
     125   Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
     126   are not optional in this function as these adjustments are essential to
     127   allowing the execution of sys.path entries. As the thread-safety
     128   limitations still apply, use of this function in threaded code should be
     129   either serialised with the import lock or delegated to a separate process.
     130
     131   .. versionadded:: 2.7
    64132
    65133.. seealso::
    66134
    67135   :pep:`338` - Executing modules as scripts
    68       PEP written and  implemented by Nick Coghlan.
     136      PEP written and implemented by Nick Coghlan.
    69137
     138   :pep:`366` - Main module explicit relative imports
     139      PEP written and implemented by Nick Coghlan.
     140
     141   :ref:`using-on-general` - CPython command line details
Note: See TracChangeset for help on using the changeset viewer.