blob: 7293f159e09ad69e0eea176391d0bda95360c5aa [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
Senthil Kumaran4932e142014-06-20 01:37:53 -070031 .. index::
32 module: __main__
33
Nick Coghlan260bd3e2009-11-16 06:49:25 +000034 Execute the code of the specified module and return the resulting module
35 globals dictionary. The module's code is first located using the standard
Victor Stinner766ad362010-05-14 14:36:18 +000036 import mechanism (refer to :pep:`302` for details) and then executed in a
Nick Coghlan260bd3e2009-11-16 06:49:25 +000037 fresh module namespace.
Georg Brandl116aa622007-08-15 14:28:22 +000038
Nick Coghlan260bd3e2009-11-16 06:49:25 +000039 If the supplied module name refers to a package rather than a normal
40 module, then that package is imported and the ``__main__`` submodule within
41 that package is then executed and the resulting module globals dictionary
42 returned.
Nick Coghlan3f48ae32009-02-08 01:58:26 +000043
Nick Coghlan260bd3e2009-11-16 06:49:25 +000044 The optional dictionary argument *init_globals* may be used to pre-populate
45 the module's globals dictionary before the code is executed. The supplied
46 dictionary will not be modified. If any of the special global variables
47 below are defined in the supplied dictionary, those definitions are
48 overridden by :func:`run_module`.
Georg Brandl116aa622007-08-15 14:28:22 +000049
Nick Coghlan720c7e22013-12-15 20:33:02 +100050 The special global variables ``__name__``, ``__spec__``, ``__file__``,
51 ``__cached__``, ``__loader__`` and ``__package__`` are set in the globals
52 dictionary before the module code is executed (Note that this is a
53 minimal set of variables - other variables may be set implicitly as an
54 interpreter implementation detail).
Georg Brandl116aa622007-08-15 14:28:22 +000055
Nick Coghlan260bd3e2009-11-16 06:49:25 +000056 ``__name__`` is set to *run_name* if this optional argument is not
57 :const:`None`, to ``mod_name + '.__main__'`` if the named module is a
58 package and to the *mod_name* argument otherwise.
Georg Brandl116aa622007-08-15 14:28:22 +000059
Nick Coghlan720c7e22013-12-15 20:33:02 +100060 ``__spec__`` will be set appropriately for the *actually* imported
61 module (that is, ``__spec__.name`` will always be *mod_name* or
62 ``mod_name + '.__main__``, never *run_name*).
Georg Brandl116aa622007-08-15 14:28:22 +000063
Nick Coghlan720c7e22013-12-15 20:33:02 +100064 ``__file__``, ``__cached__``, ``__loader__`` and ``__package__`` are
65 :ref:`set as normal <import-mod-attrs>` based on the module spec.
Georg Brandl116aa622007-08-15 14:28:22 +000066
Nick Coghlan260bd3e2009-11-16 06:49:25 +000067 If the argument *alter_sys* is supplied and evaluates to :const:`True`,
68 then ``sys.argv[0]`` is updated with the value of ``__file__`` and
Thomas Woutersed03b412007-08-28 21:37:11 +000069 ``sys.modules[__name__]`` is updated with a temporary module object for the
70 module being executed. Both ``sys.argv[0]`` and ``sys.modules[__name__]``
71 are restored to their original values before the function returns.
Georg Brandl116aa622007-08-15 14:28:22 +000072
Nick Coghlan260bd3e2009-11-16 06:49:25 +000073 Note that this manipulation of :mod:`sys` is not thread-safe. Other threads
74 may see the partially initialised module, as well as the altered list of
75 arguments. It is recommended that the :mod:`sys` module be left alone when
76 invoking this function from threaded code.
Georg Brandl116aa622007-08-15 14:28:22 +000077
Berker Peksag8b1cbd22014-12-10 01:47:02 +020078 .. seealso::
79 The :option:`-m` option offering equivalent functionality from the
80 command line.
Georg Brandl116aa622007-08-15 14:28:22 +000081
Nick Coghlan3f48ae32009-02-08 01:58:26 +000082 .. versionchanged:: 3.1
Georg Brandl67b21b72010-08-17 15:07:14 +000083 Added ability to execute packages by looking for a ``__main__`` submodule.
Nick Coghlan3f48ae32009-02-08 01:58:26 +000084
Éric Araujo930df312010-12-16 06:28:48 +000085 .. versionchanged:: 3.2
Nick Coghlan720c7e22013-12-15 20:33:02 +100086 Added ``__cached__`` global variable (see :pep:`3147`).
Éric Araujo930df312010-12-16 06:28:48 +000087
Nick Coghlan720c7e22013-12-15 20:33:02 +100088 .. versionchanged:: 3.4
89 Updated to take advantage of the module spec feature added by
90 :pep:`451`. This allows ``__cached__`` to be set correctly for modules
91 run this way, as well as ensuring the real module name is always
92 accessible as ``__spec__.name``.
Nick Coghlan3f48ae32009-02-08 01:58:26 +000093
Nick Coghlan260bd3e2009-11-16 06:49:25 +000094.. function:: run_path(file_path, init_globals=None, run_name=None)
95
Senthil Kumaran4932e142014-06-20 01:37:53 -070096 .. index::
97 module: __main__
98
Nick Coghlan260bd3e2009-11-16 06:49:25 +000099 Execute the code at the named filesystem location and return the resulting
100 module globals dictionary. As with a script name supplied to the CPython
101 command line, the supplied path may refer to a Python source file, a
102 compiled bytecode file or a valid sys.path entry containing a ``__main__``
103 module (e.g. a zipfile containing a top-level ``__main__.py`` file).
104
105 For a simple script, the specified code is simply executed in a fresh
106 module namespace. For a valid sys.path entry (typically a zipfile or
107 directory), the entry is first added to the beginning of ``sys.path``. The
108 function then looks for and executes a :mod:`__main__` module using the
109 updated path. Note that there is no special protection against invoking
110 an existing :mod:`__main__` entry located elsewhere on ``sys.path`` if
111 there is no such module at the specified location.
112
113 The optional dictionary argument *init_globals* may be used to pre-populate
114 the module's globals dictionary before the code is executed. The supplied
115 dictionary will not be modified. If any of the special global variables
116 below are defined in the supplied dictionary, those definitions are
117 overridden by :func:`run_path`.
118
Nick Coghlan720c7e22013-12-15 20:33:02 +1000119 The special global variables ``__name__``, ``__spec__``, ``__file__``,
120 ``__cached__``, ``__loader__`` and ``__package__`` are set in the globals
121 dictionary before the module code is executed (Note that this is a
122 minimal set of variables - other variables may be set implicitly as an
123 interpreter implementation detail).
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000124
125 ``__name__`` is set to *run_name* if this optional argument is not
126 :const:`None` and to ``'<run_path>'`` otherwise.
127
Nick Coghlan720c7e22013-12-15 20:33:02 +1000128 If the supplied path directly references a script file (whether as source
129 or as precompiled byte code), then ``__file__`` will be set to the
130 supplied path, and ``__spec__``, ``__cached__``, ``__loader__`` and
131 ``__package__`` will all be set to :const:`None`.
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000132
Nick Coghlan720c7e22013-12-15 20:33:02 +1000133 If the supplied path is a reference to a valid sys.path entry, then
134 ``__spec__`` will be set appropriately for the imported ``__main__``
135 module (that is, ``__spec__.name`` will always be ``__main__``).
136 ``__file__``, ``__cached__``, ``__loader__`` and ``__package__`` will be
137 :ref:`set as normal <import-mod-attrs>` based on the module spec.
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000138
139 A number of alterations are also made to the :mod:`sys` module. Firstly,
140 ``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated
141 with the value of ``file_path`` and ``sys.modules[__name__]`` is updated
142 with a temporary module object for the module being executed. All
143 modifications to items in :mod:`sys` are reverted before the function
144 returns.
145
146 Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
147 are not optional in this function as these adjustments are essential to
Georg Brandlf285bcc2010-10-19 21:07:16 +0000148 allowing the execution of sys.path entries. As the thread-safety
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000149 limitations still apply, use of this function in threaded code should be
150 either serialised with the import lock or delegated to a separate process.
151
Berker Peksag8b1cbd22014-12-10 01:47:02 +0200152 .. seealso::
153 :ref:`using-on-interface-options` for equivalent functionality on the
154 command line (``python path/to/script``).
155
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000156 .. versionadded:: 3.2
157
Nick Coghlan720c7e22013-12-15 20:33:02 +1000158 .. versionchanged:: 3.4
159 Updated to take advantage of the module spec feature added by
160 :pep:`451`. This allows ``__cached__`` to be set correctly in the
161 case where ``__main__`` is imported from a valid sys.path entry rather
162 than being executed directly.
163
Georg Brandl116aa622007-08-15 14:28:22 +0000164.. seealso::
165
Berker Peksag8b1cbd22014-12-10 01:47:02 +0200166 :pep:`338` -- Executing modules as scripts
Nick Coghlan3f48ae32009-02-08 01:58:26 +0000167 PEP written and implemented by Nick Coghlan.
168
Berker Peksag8b1cbd22014-12-10 01:47:02 +0200169 :pep:`366` -- Main module explicit relative imports
Nick Coghlan3f48ae32009-02-08 01:58:26 +0000170 PEP written and implemented by Nick Coghlan.
Georg Brandl116aa622007-08-15 14:28:22 +0000171
Berker Peksag8b1cbd22014-12-10 01:47:02 +0200172 :pep:`451` -- A ModuleSpec Type for the Import System
Nick Coghlan720c7e22013-12-15 20:33:02 +1000173 PEP written and implemented by Eric Snow
174
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000175 :ref:`using-on-general` - CPython command line details
Nick Coghlana3d1cac2012-07-15 00:36:39 +1000176
177 The :func:`importlib.import_module` function