blob: 4df622cb1f882e60e5a999994f42e227cdd55a38 [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 Coghlan260bd3e2009-11-16 06:49:25 +000017The :mod:`runpy` module provides two functions:
Georg Brandl116aa622007-08-15 14:28:22 +000018
19
Georg Brandl18244152009-09-02 20:34:52 +000020.. function:: run_module(mod_name, init_globals=None, run_name=None, alter_sys=False)
Georg Brandl116aa622007-08-15 14:28:22 +000021
Nick Coghlan260bd3e2009-11-16 06:49:25 +000022 Execute the code of the specified module and return the resulting module
23 globals dictionary. The module's code is first located using the standard
Victor Stinner766ad362010-05-14 14:36:18 +000024 import mechanism (refer to :pep:`302` for details) and then executed in a
Nick Coghlan260bd3e2009-11-16 06:49:25 +000025 fresh module namespace.
Georg Brandl116aa622007-08-15 14:28:22 +000026
Nick Coghlan260bd3e2009-11-16 06:49:25 +000027 If the supplied module name refers to a package rather than a normal
28 module, then that package is imported and the ``__main__`` submodule within
29 that package is then executed and the resulting module globals dictionary
30 returned.
Nick Coghlan3f48ae32009-02-08 01:58:26 +000031
Nick Coghlan260bd3e2009-11-16 06:49:25 +000032 The optional dictionary argument *init_globals* may be used to pre-populate
33 the module's globals dictionary before the code is executed. The supplied
34 dictionary will not be modified. If any of the special global variables
35 below are defined in the supplied dictionary, those definitions are
36 overridden by :func:`run_module`.
Georg Brandl116aa622007-08-15 14:28:22 +000037
Barry Warsaw28a691b2010-04-17 00:19:56 +000038 The special global variables ``__name__``, ``__file__``, ``__cached__``,
39 ``__loader__``
Nick Coghlan260bd3e2009-11-16 06:49:25 +000040 and ``__package__`` are set in the globals dictionary before the module
41 code is executed (Note that this is a minimal set of variables - other
42 variables may be set implicitly as an interpreter implementation detail).
Georg Brandl116aa622007-08-15 14:28:22 +000043
Nick Coghlan260bd3e2009-11-16 06:49:25 +000044 ``__name__`` is set to *run_name* if this optional argument is not
45 :const:`None`, to ``mod_name + '.__main__'`` if the named module is a
46 package and to the *mod_name* argument otherwise.
Georg Brandl116aa622007-08-15 14:28:22 +000047
Nick Coghlan260bd3e2009-11-16 06:49:25 +000048 ``__file__`` is set to the name provided by the module loader. If the
49 loader does not make filename information available, this variable is set
Ezio Melotti6e40e272010-01-04 09:29:10 +000050 to :const:`None`.
Georg Brandl116aa622007-08-15 14:28:22 +000051
Éric Araujob5471482011-04-24 02:44:39 +020052 ``__cached__`` will be set to ``None``.
Barry Warsaw28a691b2010-04-17 00:19:56 +000053
Victor Stinner766ad362010-05-14 14:36:18 +000054 ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
Nick Coghlan260bd3e2009-11-16 06:49:25 +000055 code for the module (This loader may be a wrapper around the standard
56 import mechanism).
Georg Brandl116aa622007-08-15 14:28:22 +000057
Nick Coghlan260bd3e2009-11-16 06:49:25 +000058 ``__package__`` is set to *mod_name* if the named module is a package and
59 to ``mod_name.rpartition('.')[0]`` otherwise.
Georg Brandl116aa622007-08-15 14:28:22 +000060
Nick Coghlan260bd3e2009-11-16 06:49:25 +000061 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
Thomas Woutersed03b412007-08-28 21:37:11 +000063 ``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.
Georg Brandl116aa622007-08-15 14:28:22 +000066
Nick Coghlan260bd3e2009-11-16 06:49:25 +000067 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.
Georg Brandl116aa622007-08-15 14:28:22 +000071
72
Nick Coghlan3f48ae32009-02-08 01:58:26 +000073 .. versionchanged:: 3.1
Georg Brandl67b21b72010-08-17 15:07:14 +000074 Added ability to execute packages by looking for a ``__main__`` submodule.
Nick Coghlan3f48ae32009-02-08 01:58:26 +000075
Éric Araujo930df312010-12-16 06:28:48 +000076 .. versionchanged:: 3.2
77 Added ``__cached__`` global variable (see :PEP:`3147`).
78
Nick Coghlan3f48ae32009-02-08 01:58:26 +000079
Nick Coghlan260bd3e2009-11-16 06:49:25 +000080.. function:: run_path(file_path, init_globals=None, run_name=None)
81
82 Execute the code at the named filesystem location and return the resulting
83 module globals dictionary. As with a script name supplied to the CPython
84 command line, the supplied path may refer to a Python source file, a
85 compiled bytecode file or a valid sys.path entry containing a ``__main__``
86 module (e.g. a zipfile containing a top-level ``__main__.py`` file).
87
88 For a simple script, the specified code is simply executed in a fresh
89 module namespace. For a valid sys.path entry (typically a zipfile or
90 directory), the entry is first added to the beginning of ``sys.path``. The
91 function then looks for and executes a :mod:`__main__` module using the
92 updated path. Note that there is no special protection against invoking
93 an existing :mod:`__main__` entry located elsewhere on ``sys.path`` if
94 there is no such module at the specified location.
95
96 The optional dictionary argument *init_globals* may be used to pre-populate
97 the module's globals dictionary before the code is executed. The supplied
98 dictionary will not be modified. If any of the special global variables
99 below are defined in the supplied dictionary, those definitions are
100 overridden by :func:`run_path`.
101
102 The special global variables ``__name__``, ``__file__``, ``__loader__``
103 and ``__package__`` are set in the globals dictionary before the module
104 code is executed (Note that this is a minimal set of variables - other
105 variables may be set implicitly as an interpreter implementation detail).
106
107 ``__name__`` is set to *run_name* if this optional argument is not
108 :const:`None` and to ``'<run_path>'`` otherwise.
109
110 ``__file__`` is set to the name provided by the module loader. If the
111 loader does not make filename information available, this variable is set
112 to :const:`None`. For a simple script, this will be set to ``file_path``.
113
Victor Stinner766ad362010-05-14 14:36:18 +0000114 ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000115 code for the module (This loader may be a wrapper around the standard
116 import mechanism). For a simple script, this will be set to :const:`None`.
117
118 ``__package__`` is set to ``__name__.rpartition('.')[0]``.
119
120 A number of alterations are also made to the :mod:`sys` module. Firstly,
121 ``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated
122 with the value of ``file_path`` and ``sys.modules[__name__]`` is updated
123 with a temporary module object for the module being executed. All
124 modifications to items in :mod:`sys` are reverted before the function
125 returns.
126
127 Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
128 are not optional in this function as these adjustments are essential to
Georg Brandlf285bcc2010-10-19 21:07:16 +0000129 allowing the execution of sys.path entries. As the thread-safety
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000130 limitations still apply, use of this function in threaded code should be
131 either serialised with the import lock or delegated to a separate process.
132
133 .. versionadded:: 3.2
134
Georg Brandl116aa622007-08-15 14:28:22 +0000135.. seealso::
136
137 :pep:`338` - Executing modules as scripts
Nick Coghlan3f48ae32009-02-08 01:58:26 +0000138 PEP written and implemented by Nick Coghlan.
139
140 :pep:`366` - Main module explicit relative imports
141 PEP written and implemented by Nick Coghlan.
Georg Brandl116aa622007-08-15 14:28:22 +0000142
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000143 :ref:`using-on-general` - CPython command line details