blob: a08bc940e758cff7ae73e51a3cce2989ec6a7ba1 [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +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
8
9.. versionadded:: 2.5
10
Éric Araujo29a0b572011-08-19 02:14:03 +020011**Source code:** :source:`Lib/runpy.py`
12
13--------------
14
Georg Brandl8ec7f652007-08-15 14:28:01 +000015The :mod:`runpy` module is used to locate and run Python modules without
Nick Coghlan49868cb2009-11-15 07:30:34 +000016importing 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.
Georg Brandl8ec7f652007-08-15 14:28:01 +000019
Nick Coghlan49868cb2009-11-15 07:30:34 +000020The :mod:`runpy` module provides two functions:
Georg Brandl8ec7f652007-08-15 14:28:01 +000021
22
Nick Coghlan49868cb2009-11-15 07:30:34 +000023.. function:: run_module(mod_name, init_globals=None, run_name=None, alter_sys=False)
Georg Brandl8ec7f652007-08-15 14:28:01 +000024
Senthil Kumaran454a5152014-06-20 01:36:58 -070025 .. index::
26 module: __main__
27
Nick Coghlan49868cb2009-11-15 07:30:34 +000028 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
Victor Stinner8ded4772010-05-14 14:20:07 +000030 import mechanism (refer to :pep:`302` for details) and then executed in a
Nick Coghlan49868cb2009-11-15 07:30:34 +000031 fresh module namespace.
Georg Brandl8ec7f652007-08-15 14:28:01 +000032
Nick Coghlan49868cb2009-11-15 07:30:34 +000033 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.
Nick Coghland39600e2009-02-08 01:26:34 +000037
Nick Coghlan49868cb2009-11-15 07:30:34 +000038 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`.
Georg Brandl8ec7f652007-08-15 14:28:01 +000043
Nick Coghlan49868cb2009-11-15 07:30:34 +000044 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).
Georg Brandl8ec7f652007-08-15 14:28:01 +000048
Nick Coghlan49868cb2009-11-15 07:30:34 +000049 ``__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.
Georg Brandl8ec7f652007-08-15 14:28:01 +000052
Nick Coghlan49868cb2009-11-15 07:30:34 +000053 ``__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
Ezio Melotti81982562010-01-04 09:00:11 +000055 to :const:`None`.
Georg Brandl8ec7f652007-08-15 14:28:01 +000056
Victor Stinner8ded4772010-05-14 14:20:07 +000057 ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
Nick Coghlan49868cb2009-11-15 07:30:34 +000058 code for the module (This loader may be a wrapper around the standard
59 import mechanism).
Georg Brandl8ec7f652007-08-15 14:28:01 +000060
Nick Coghlan49868cb2009-11-15 07:30:34 +000061 ``__package__`` is set to *mod_name* if the named module is a package and
62 to ``mod_name.rpartition('.')[0]`` otherwise.
Georg Brandl8ec7f652007-08-15 14:28:01 +000063
Nick Coghlan49868cb2009-11-15 07:30:34 +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
Nick Coghlan3af0e782007-08-25 04:32:07 +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 Brandl8ec7f652007-08-15 14:28:01 +000069
Nick Coghlan49868cb2009-11-15 07:30:34 +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 Brandl8ec7f652007-08-15 14:28:01 +000074
Berker Peksag3e1c8232014-12-10 02:07:08 +020075 .. seealso::
76 The :option:`-m` option offering equivalent functionality from the
77 command line.
Georg Brandl8ec7f652007-08-15 14:28:01 +000078
Nick Coghland39600e2009-02-08 01:26:34 +000079 .. versionchanged:: 2.7
Nick Coghlan49868cb2009-11-15 07:30:34 +000080 Added ability to execute packages by looking for a ``__main__``
81 submodule
Nick Coghland39600e2009-02-08 01:26:34 +000082
83
Nick Coghlan49868cb2009-11-15 07:30:34 +000084.. function:: run_path(file_path, init_globals=None, run_name=None)
85
Senthil Kumaran454a5152014-06-20 01:36:58 -070086 .. index::
87 module: __main__
88
Nick Coghlan49868cb2009-11-15 07:30:34 +000089 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
Victor Stinner8ded4772010-05-14 14:20:07 +0000121 ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
Nick Coghlan49868cb2009-11-15 07:30:34 +0000122 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
Georg Brandl837fbb02010-11-26 07:58:55 +0000136 allowing the execution of sys.path entries. As the thread-safety
Nick Coghlan49868cb2009-11-15 07:30:34 +0000137 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
Berker Peksag3e1c8232014-12-10 02:07:08 +0200140 .. seealso::
141 :ref:`using-on-interface-options` for equivalent functionality on the
142 command line (``python path/to/script``).
143
Nick Coghlan49868cb2009-11-15 07:30:34 +0000144 .. versionadded:: 2.7
145
Georg Brandl8ec7f652007-08-15 14:28:01 +0000146.. seealso::
147
Berker Peksag3e1c8232014-12-10 02:07:08 +0200148 :pep:`338` -- Executing modules as scripts
Nick Coghland39600e2009-02-08 01:26:34 +0000149 PEP written and implemented by Nick Coghlan.
150
Berker Peksag3e1c8232014-12-10 02:07:08 +0200151 :pep:`366` -- Main module explicit relative imports
Nick Coghland39600e2009-02-08 01:26:34 +0000152 PEP written and implemented by Nick Coghlan.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000153
Nick Coghlan49868cb2009-11-15 07:30:34 +0000154 :ref:`using-on-general` - CPython command line details