[2] | 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@gmail.com>
|
---|
| 7 |
|
---|
| 8 |
|
---|
| 9 | .. versionadded:: 2.5
|
---|
| 10 |
|
---|
[391] | 11 | **Source code:** :source:`Lib/runpy.py`
|
---|
| 12 |
|
---|
| 13 | --------------
|
---|
| 14 |
|
---|
[2] | 15 | The :mod:`runpy` module is used to locate and run Python modules without
|
---|
[391] | 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.
|
---|
[2] | 19 |
|
---|
[391] | 20 | The :mod:`runpy` module provides two functions:
|
---|
[2] | 21 |
|
---|
| 22 |
|
---|
[391] | 23 | .. function:: run_module(mod_name, init_globals=None, run_name=None, alter_sys=False)
|
---|
[2] | 24 |
|
---|
[391] | 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.
|
---|
[2] | 29 |
|
---|
[391] | 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.
|
---|
[2] | 34 |
|
---|
[391] | 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`.
|
---|
[2] | 40 |
|
---|
[391] | 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).
|
---|
[2] | 45 |
|
---|
[391] | 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.
|
---|
[2] | 49 |
|
---|
[391] | 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`.
|
---|
[2] | 53 |
|
---|
[391] | 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).
|
---|
[2] | 57 |
|
---|
[391] | 58 | ``__package__`` is set to *mod_name* if the named module is a package and
|
---|
| 59 | to ``mod_name.rpartition('.')[0]`` otherwise.
|
---|
[2] | 60 |
|
---|
[391] | 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
|
---|
[2] | 63 | ``sys.modules[__name__]`` is updated with a temporary module object for the
|
---|
| 64 | module being executed. Both ``sys.argv[0]`` and ``sys.modules[__name__]``
|
---|
| 65 | are restored to their original values before the function returns.
|
---|
| 66 |
|
---|
[391] | 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.
|
---|
[2] | 71 |
|
---|
| 72 |
|
---|
[391] | 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
|
---|
| 132 |
|
---|
[2] | 133 | .. seealso::
|
---|
| 134 |
|
---|
| 135 | :pep:`338` - Executing modules as scripts
|
---|
[391] | 136 | PEP written and implemented by Nick Coghlan.
|
---|
[2] | 137 |
|
---|
[391] | 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
|
---|