blob: ee9fbcf529cb42a9b344a7ec100b703654ba4ee5 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001: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
Raymond Hettingera1993682011-01-27 01:20:32 +00008**Source code:** :source:`Lib/runpy.py`
9
10--------------
Georg Brandl116aa622007-08-15 14:28:22 +000011
Georg Brandl116aa622007-08-15 14:28:22 +000012The :mod:`runpy` module is used to locate and run Python modules without
Nick Coghlan260bd3e2009-11-16 06:49:25 +000013importing them first. Its main use is to implement the :option:`-m` command
14line switch that allows scripts to be located using the Python module
15namespace rather than the filesystem.
Georg Brandl116aa622007-08-15 14:28:22 +000016
Nick Coghlana3d1cac2012-07-15 00:36:39 +100017Note that this is *not* a sandbox module - all code is executed in the
18current process, and any side effects (such as cached imports of other
19modules) will remain in place after the functions have returned.
20
21Furthermore, any functions and classes defined by the executed code are not
22guaranteed to work correctly after a :mod:`runpy` function has returned.
23If that limitation is not acceptable for a given use case, :mod:`importlib`
24is likely to be a more suitable choice than this module.
25
Nick Coghlan260bd3e2009-11-16 06:49:25 +000026The :mod:`runpy` module provides two functions:
Georg Brandl116aa622007-08-15 14:28:22 +000027
28
Georg Brandl18244152009-09-02 20:34:52 +000029.. function:: run_module(mod_name, init_globals=None, run_name=None, alter_sys=False)
Georg Brandl116aa622007-08-15 14:28:22 +000030
Nick Coghlan260bd3e2009-11-16 06:49:25 +000031 Execute the code of the specified module and return the resulting module
32 globals dictionary. The module's code is first located using the standard
Victor Stinner766ad362010-05-14 14:36:18 +000033 import mechanism (refer to :pep:`302` for details) and then executed in a
Nick Coghlan260bd3e2009-11-16 06:49:25 +000034 fresh module namespace.
Georg Brandl116aa622007-08-15 14:28:22 +000035
Nick Coghlan260bd3e2009-11-16 06:49:25 +000036 If the supplied module name refers to a package rather than a normal
37 module, then that package is imported and the ``__main__`` submodule within
38 that package is then executed and the resulting module globals dictionary
39 returned.
Nick Coghlan3f48ae32009-02-08 01:58:26 +000040
Nick Coghlan260bd3e2009-11-16 06:49:25 +000041 The optional dictionary argument *init_globals* may be used to pre-populate
42 the module's globals dictionary before the code is executed. The supplied
43 dictionary will not be modified. If any of the special global variables
44 below are defined in the supplied dictionary, those definitions are
45 overridden by :func:`run_module`.
Georg Brandl116aa622007-08-15 14:28:22 +000046
Nick Coghlan720c7e22013-12-15 20:33:02 +100047 The special global variables ``__name__``, ``__spec__``, ``__file__``,
48 ``__cached__``, ``__loader__`` and ``__package__`` are set in the globals
49 dictionary before the module code is executed (Note that this is a
50 minimal set of variables - other variables may be set implicitly as an
51 interpreter implementation detail).
Georg Brandl116aa622007-08-15 14:28:22 +000052
Nick Coghlan260bd3e2009-11-16 06:49:25 +000053 ``__name__`` is set to *run_name* if this optional argument is not
54 :const:`None`, to ``mod_name + '.__main__'`` if the named module is a
55 package and to the *mod_name* argument otherwise.
Georg Brandl116aa622007-08-15 14:28:22 +000056
Nick Coghlan720c7e22013-12-15 20:33:02 +100057 ``__spec__`` will be set appropriately for the *actually* imported
58 module (that is, ``__spec__.name`` will always be *mod_name* or
59 ``mod_name + '.__main__``, never *run_name*).
Georg Brandl116aa622007-08-15 14:28:22 +000060
Nick Coghlan720c7e22013-12-15 20:33:02 +100061 ``__file__``, ``__cached__``, ``__loader__`` and ``__package__`` are
62 :ref:`set as normal <import-mod-attrs>` based on the module spec.
Georg Brandl116aa622007-08-15 14:28:22 +000063
Nick Coghlan260bd3e2009-11-16 06:49:25 +000064 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
Thomas Woutersed03b412007-08-28 21:37:11 +000066 ``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.
Georg Brandl116aa622007-08-15 14:28:22 +000069
Nick Coghlan260bd3e2009-11-16 06:49:25 +000070 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.
Georg Brandl116aa622007-08-15 14:28:22 +000074
75
Nick Coghlan3f48ae32009-02-08 01:58:26 +000076 .. versionchanged:: 3.1
Georg Brandl67b21b72010-08-17 15:07:14 +000077 Added ability to execute packages by looking for a ``__main__`` submodule.
Nick Coghlan3f48ae32009-02-08 01:58:26 +000078
Éric Araujo930df312010-12-16 06:28:48 +000079 .. versionchanged:: 3.2
Nick Coghlan720c7e22013-12-15 20:33:02 +100080 Added ``__cached__`` global variable (see :pep:`3147`).
Éric Araujo930df312010-12-16 06:28:48 +000081
Nick Coghlan720c7e22013-12-15 20:33:02 +100082 .. versionchanged:: 3.4
83 Updated to take advantage of the module spec feature added by
84 :pep:`451`. This allows ``__cached__`` to be set correctly for modules
85 run this way, as well as ensuring the real module name is always
86 accessible as ``__spec__.name``.
Nick Coghlan3f48ae32009-02-08 01:58:26 +000087
Nick Coghlan260bd3e2009-11-16 06:49:25 +000088.. function:: run_path(file_path, init_globals=None, run_name=None)
89
90 Execute the code at the named filesystem location and return the resulting
91 module globals dictionary. As with a script name supplied to the CPython
92 command line, the supplied path may refer to a Python source file, a
93 compiled bytecode file or a valid sys.path entry containing a ``__main__``
94 module (e.g. a zipfile containing a top-level ``__main__.py`` file).
95
96 For a simple script, the specified code is simply executed in a fresh
97 module namespace. For a valid sys.path entry (typically a zipfile or
98 directory), the entry is first added to the beginning of ``sys.path``. The
99 function then looks for and executes a :mod:`__main__` module using the
100 updated path. Note that there is no special protection against invoking
101 an existing :mod:`__main__` entry located elsewhere on ``sys.path`` if
102 there is no such module at the specified location.
103
104 The optional dictionary argument *init_globals* may be used to pre-populate
105 the module's globals dictionary before the code is executed. The supplied
106 dictionary will not be modified. If any of the special global variables
107 below are defined in the supplied dictionary, those definitions are
108 overridden by :func:`run_path`.
109
Nick Coghlan720c7e22013-12-15 20:33:02 +1000110 The special global variables ``__name__``, ``__spec__``, ``__file__``,
111 ``__cached__``, ``__loader__`` and ``__package__`` are set in the globals
112 dictionary before the module code is executed (Note that this is a
113 minimal set of variables - other variables may be set implicitly as an
114 interpreter implementation detail).
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000115
116 ``__name__`` is set to *run_name* if this optional argument is not
117 :const:`None` and to ``'<run_path>'`` otherwise.
118
Nick Coghlan720c7e22013-12-15 20:33:02 +1000119 If the supplied path directly references a script file (whether as source
120 or as precompiled byte code), then ``__file__`` will be set to the
121 supplied path, and ``__spec__``, ``__cached__``, ``__loader__`` and
122 ``__package__`` will all be set to :const:`None`.
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000123
Nick Coghlan720c7e22013-12-15 20:33:02 +1000124 ``__spec__`` will be set to :const:`None` if the supplied path is a
125 direct path to a script (as source or as precompiled bytecode).
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000126
Nick Coghlan720c7e22013-12-15 20:33:02 +1000127 If the supplied path is a reference to a valid sys.path entry, then
128 ``__spec__`` will be set appropriately for the imported ``__main__``
129 module (that is, ``__spec__.name`` will always be ``__main__``).
130 ``__file__``, ``__cached__``, ``__loader__`` and ``__package__`` will be
131 :ref:`set as normal <import-mod-attrs>` based on the module spec.
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000132
133 A number of alterations are also made to the :mod:`sys` module. Firstly,
134 ``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated
135 with the value of ``file_path`` and ``sys.modules[__name__]`` is updated
136 with a temporary module object for the module being executed. All
137 modifications to items in :mod:`sys` are reverted before the function
138 returns.
139
140 Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
141 are not optional in this function as these adjustments are essential to
Georg Brandlf285bcc2010-10-19 21:07:16 +0000142 allowing the execution of sys.path entries. As the thread-safety
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000143 limitations still apply, use of this function in threaded code should be
144 either serialised with the import lock or delegated to a separate process.
145
146 .. versionadded:: 3.2
147
Nick Coghlan720c7e22013-12-15 20:33:02 +1000148 .. versionchanged:: 3.4
149 Updated to take advantage of the module spec feature added by
150 :pep:`451`. This allows ``__cached__`` to be set correctly in the
151 case where ``__main__`` is imported from a valid sys.path entry rather
152 than being executed directly.
153
Georg Brandl116aa622007-08-15 14:28:22 +0000154.. seealso::
155
156 :pep:`338` - Executing modules as scripts
Nick Coghlan3f48ae32009-02-08 01:58:26 +0000157 PEP written and implemented by Nick Coghlan.
158
159 :pep:`366` - Main module explicit relative imports
160 PEP written and implemented by Nick Coghlan.
Georg Brandl116aa622007-08-15 14:28:22 +0000161
Nick Coghlan720c7e22013-12-15 20:33:02 +1000162 :pep:`451` - A ModuleSpec Type for the Import System
163 PEP written and implemented by Eric Snow
164
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000165 :ref:`using-on-general` - CPython command line details
Nick Coghlana3d1cac2012-07-15 00:36:39 +1000166
167 The :func:`importlib.import_module` function