Home | History | Annotate | Download | only in library
      1 :mod:`runpy` --- Locating and executing Python modules
      2 ======================================================
      3 
      4 .. module:: runpy
      5    :synopsis: Locate and run Python modules without importing them first.
      6 .. moduleauthor:: Nick Coghlan <ncoghlan (a] gmail.com>
      7 
      8 
      9 .. versionadded:: 2.5
     10 
     11 **Source code:** :source:`Lib/runpy.py`
     12 
     13 --------------
     14 
     15 The :mod:`runpy` module is used to locate and run Python modules without
     16 importing them first. Its main use is to implement the :option:`-m` command
     17 line switch that allows scripts to be located using the Python module
     18 namespace rather than the filesystem.
     19 
     20 The :mod:`runpy` module provides two functions:
     21 
     22 
     23 .. function:: run_module(mod_name, init_globals=None, run_name=None, alter_sys=False)
     24 
     25    .. index::
     26       module: __main__
     27 
     28    Execute the code of the specified module and return the resulting module
     29    globals dictionary. The module's code is first located using the standard
     30    import mechanism (refer to :pep:`302` for details) and then executed in a
     31    fresh module namespace.
     32 
     33    If the supplied module name refers to a package rather than a normal
     34    module, then that package is imported and the ``__main__`` submodule within
     35    that package is then executed and the resulting module globals dictionary
     36    returned.
     37 
     38    The optional dictionary argument *init_globals* may be used to pre-populate
     39    the module's globals dictionary before the code is executed. The supplied
     40    dictionary will not be modified. If any of the special global variables
     41    below are defined in the supplied dictionary, those definitions are
     42    overridden by :func:`run_module`.
     43 
     44    The special global variables ``__name__``, ``__file__``, ``__loader__``
     45    and ``__package__`` are set in the globals dictionary before the module
     46    code is executed (Note that this is a minimal set of variables - other
     47    variables may be set implicitly as an interpreter implementation detail).
     48 
     49    ``__name__`` is set to *run_name* if this optional argument is not
     50    :const:`None`, to ``mod_name + '.__main__'`` if the named module is a
     51    package and to the *mod_name* argument otherwise.
     52 
     53    ``__file__`` is set to the name provided by the module loader. If the
     54    loader does not make filename information available, this variable is set
     55    to :const:`None`.
     56 
     57    ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
     58    code for the module (This loader may be a wrapper around the standard
     59    import mechanism).
     60 
     61    ``__package__`` is set to *mod_name* if the named module is a package and
     62    to ``mod_name.rpartition('.')[0]`` otherwise.
     63 
     64    If the argument *alter_sys* is supplied and evaluates to :const:`True`,
     65    then ``sys.argv[0]`` is updated with the value of ``__file__`` and
     66    ``sys.modules[__name__]`` is updated with a temporary module object for the
     67    module being executed. Both ``sys.argv[0]`` and ``sys.modules[__name__]``
     68    are restored to their original values before the function returns.
     69 
     70    Note that this manipulation of :mod:`sys` is not thread-safe. Other threads
     71    may see the partially initialised module, as well as the altered list of
     72    arguments. It is recommended that the :mod:`sys` module be left alone when
     73    invoking this function from threaded code.
     74 
     75    .. seealso::
     76       The :option:`-m` option offering equivalent functionality from the
     77       command line.
     78 
     79    .. versionchanged:: 2.7
     80          Added ability to execute packages by looking for a ``__main__``
     81          submodule
     82 
     83 
     84 .. function:: run_path(file_path, init_globals=None, run_name=None)
     85 
     86    .. index::
     87       module: __main__
     88 
     89    Execute the code at the named filesystem location and return the resulting
     90    module globals dictionary. As with a script name supplied to the CPython
     91    command line, the supplied path may refer to a Python source file, a
     92    compiled bytecode file or a valid sys.path entry containing a ``__main__``
     93    module (e.g. a zipfile containing a top-level ``__main__.py`` file).
     94 
     95    For a simple script, the specified code is simply executed in a fresh
     96    module namespace. For a valid sys.path entry (typically a zipfile or
     97    directory), the entry is first added to the beginning of ``sys.path``. The
     98    function then looks for and executes a :mod:`__main__` module using the
     99    updated path. Note that there is no special protection against invoking
    100    an existing :mod:`__main__` entry located elsewhere on ``sys.path`` if
    101    there is no such module at the specified location.
    102 
    103    The optional dictionary argument *init_globals* may be used to pre-populate
    104    the module's globals dictionary before the code is executed. The supplied
    105    dictionary will not be modified. If any of the special global variables
    106    below are defined in the supplied dictionary, those definitions are
    107    overridden by :func:`run_path`.
    108 
    109    The special global variables ``__name__``, ``__file__``, ``__loader__``
    110    and ``__package__`` are set in the globals dictionary before the module
    111    code is executed (Note that this is a minimal set of variables - other
    112    variables may be set implicitly as an interpreter implementation detail).
    113 
    114    ``__name__`` is set to *run_name* if this optional argument is not
    115    :const:`None` and to ``'<run_path>'`` otherwise.
    116 
    117    ``__file__`` is set to the name provided by the module loader. If the
    118    loader does not make filename information available, this variable is set
    119    to :const:`None`. For a simple script, this will be set to ``file_path``.
    120 
    121    ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
    122    code for the module (This loader may be a wrapper around the standard
    123    import mechanism). For a simple script, this will be set to :const:`None`.
    124 
    125    ``__package__`` is set to ``__name__.rpartition('.')[0]``.
    126 
    127    A number of alterations are also made to the :mod:`sys` module. Firstly,
    128    ``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated
    129    with the value of ``file_path`` and ``sys.modules[__name__]`` is updated
    130    with a temporary module object for the module being executed. All
    131    modifications to items in :mod:`sys` are reverted before the function
    132    returns.
    133 
    134    Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
    135    are not optional in this function as these adjustments are essential to
    136    allowing the execution of sys.path entries. As the thread-safety
    137    limitations still apply, use of this function in threaded code should be
    138    either serialised with the import lock or delegated to a separate process.
    139 
    140    .. seealso::
    141       :ref:`using-on-interface-options` for equivalent functionality on the
    142       command line (``python path/to/script``).
    143 
    144    .. versionadded:: 2.7
    145 
    146 .. seealso::
    147 
    148    :pep:`338` -- Executing modules as scripts
    149       PEP written and implemented by Nick Coghlan.
    150 
    151    :pep:`366` -- Main module explicit relative imports
    152       PEP written and implemented by Nick Coghlan.
    153 
    154    :ref:`using-on-general` - CPython command line details
    155