blob: 10e5ebcec2da4801ad968fdecf97eb45a59708d6 [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
8
Georg Brandl116aa622007-08-15 14:28:22 +00009The :mod:`runpy` module is used to locate and run Python modules without
Nick Coghlan260bd3e2009-11-16 06:49:25 +000010importing them first. Its main use is to implement the :option:`-m` command
11line switch that allows scripts to be located using the Python module
12namespace rather than the filesystem.
Georg Brandl116aa622007-08-15 14:28:22 +000013
Nick Coghlan260bd3e2009-11-16 06:49:25 +000014The :mod:`runpy` module provides two functions:
Georg Brandl116aa622007-08-15 14:28:22 +000015
16
Georg Brandl18244152009-09-02 20:34:52 +000017.. function:: run_module(mod_name, init_globals=None, run_name=None, alter_sys=False)
Georg Brandl116aa622007-08-15 14:28:22 +000018
Nick Coghlan260bd3e2009-11-16 06:49:25 +000019 Execute the code of the specified module and return the resulting module
20 globals dictionary. The module's code is first located using the standard
Victor Stinner766ad362010-05-14 14:36:18 +000021 import mechanism (refer to :pep:`302` for details) and then executed in a
Nick Coghlan260bd3e2009-11-16 06:49:25 +000022 fresh module namespace.
Georg Brandl116aa622007-08-15 14:28:22 +000023
Nick Coghlan260bd3e2009-11-16 06:49:25 +000024 If the supplied module name refers to a package rather than a normal
25 module, then that package is imported and the ``__main__`` submodule within
26 that package is then executed and the resulting module globals dictionary
27 returned.
Nick Coghlan3f48ae32009-02-08 01:58:26 +000028
Nick Coghlan260bd3e2009-11-16 06:49:25 +000029 The optional dictionary argument *init_globals* may be used to pre-populate
30 the module's globals dictionary before the code is executed. The supplied
31 dictionary will not be modified. If any of the special global variables
32 below are defined in the supplied dictionary, those definitions are
33 overridden by :func:`run_module`.
Georg Brandl116aa622007-08-15 14:28:22 +000034
Barry Warsaw28a691b2010-04-17 00:19:56 +000035 The special global variables ``__name__``, ``__file__``, ``__cached__``,
36 ``__loader__``
Nick Coghlan260bd3e2009-11-16 06:49:25 +000037 and ``__package__`` are set in the globals dictionary before the module
38 code is executed (Note that this is a minimal set of variables - other
39 variables may be set implicitly as an interpreter implementation detail).
Georg Brandl116aa622007-08-15 14:28:22 +000040
Nick Coghlan260bd3e2009-11-16 06:49:25 +000041 ``__name__`` is set to *run_name* if this optional argument is not
42 :const:`None`, to ``mod_name + '.__main__'`` if the named module is a
43 package and to the *mod_name* argument otherwise.
Georg Brandl116aa622007-08-15 14:28:22 +000044
Nick Coghlan260bd3e2009-11-16 06:49:25 +000045 ``__file__`` is set to the name provided by the module loader. If the
46 loader does not make filename information available, this variable is set
Ezio Melotti6e40e272010-01-04 09:29:10 +000047 to :const:`None`.
Georg Brandl116aa622007-08-15 14:28:22 +000048
Barry Warsaw28a691b2010-04-17 00:19:56 +000049 ``__cached__`` will be set to ``None``.
50
Victor Stinner766ad362010-05-14 14:36:18 +000051 ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
Nick Coghlan260bd3e2009-11-16 06:49:25 +000052 code for the module (This loader may be a wrapper around the standard
53 import mechanism).
Georg Brandl116aa622007-08-15 14:28:22 +000054
Nick Coghlan260bd3e2009-11-16 06:49:25 +000055 ``__package__`` is set to *mod_name* if the named module is a package and
56 to ``mod_name.rpartition('.')[0]`` otherwise.
Georg Brandl116aa622007-08-15 14:28:22 +000057
Nick Coghlan260bd3e2009-11-16 06:49:25 +000058 If the argument *alter_sys* is supplied and evaluates to :const:`True`,
59 then ``sys.argv[0]`` is updated with the value of ``__file__`` and
Thomas Woutersed03b412007-08-28 21:37:11 +000060 ``sys.modules[__name__]`` is updated with a temporary module object for the
61 module being executed. Both ``sys.argv[0]`` and ``sys.modules[__name__]``
62 are restored to their original values before the function returns.
Georg Brandl116aa622007-08-15 14:28:22 +000063
Nick Coghlan260bd3e2009-11-16 06:49:25 +000064 Note that this manipulation of :mod:`sys` is not thread-safe. Other threads
65 may see the partially initialised module, as well as the altered list of
66 arguments. It is recommended that the :mod:`sys` module be left alone when
67 invoking this function from threaded code.
Georg Brandl116aa622007-08-15 14:28:22 +000068
69
Nick Coghlan3f48ae32009-02-08 01:58:26 +000070 .. versionchanged:: 3.1
Georg Brandl67b21b72010-08-17 15:07:14 +000071 Added ability to execute packages by looking for a ``__main__`` submodule.
Nick Coghlan3f48ae32009-02-08 01:58:26 +000072
Éric Araujo930df312010-12-16 06:28:48 +000073 .. versionchanged:: 3.2
74 Added ``__cached__`` global variable (see :PEP:`3147`).
75
Nick Coghlan3f48ae32009-02-08 01:58:26 +000076
Nick Coghlan260bd3e2009-11-16 06:49:25 +000077.. function:: run_path(file_path, init_globals=None, run_name=None)
78
79 Execute the code at the named filesystem location and return the resulting
80 module globals dictionary. As with a script name supplied to the CPython
81 command line, the supplied path may refer to a Python source file, a
82 compiled bytecode file or a valid sys.path entry containing a ``__main__``
83 module (e.g. a zipfile containing a top-level ``__main__.py`` file).
84
85 For a simple script, the specified code is simply executed in a fresh
86 module namespace. For a valid sys.path entry (typically a zipfile or
87 directory), the entry is first added to the beginning of ``sys.path``. The
88 function then looks for and executes a :mod:`__main__` module using the
89 updated path. Note that there is no special protection against invoking
90 an existing :mod:`__main__` entry located elsewhere on ``sys.path`` if
91 there is no such module at the specified location.
92
93 The optional dictionary argument *init_globals* may be used to pre-populate
94 the module's globals dictionary before the code is executed. The supplied
95 dictionary will not be modified. If any of the special global variables
96 below are defined in the supplied dictionary, those definitions are
97 overridden by :func:`run_path`.
98
99 The special global variables ``__name__``, ``__file__``, ``__loader__``
100 and ``__package__`` are set in the globals dictionary before the module
101 code is executed (Note that this is a minimal set of variables - other
102 variables may be set implicitly as an interpreter implementation detail).
103
104 ``__name__`` is set to *run_name* if this optional argument is not
105 :const:`None` and to ``'<run_path>'`` otherwise.
106
107 ``__file__`` is set to the name provided by the module loader. If the
108 loader does not make filename information available, this variable is set
109 to :const:`None`. For a simple script, this will be set to ``file_path``.
110
Victor Stinner766ad362010-05-14 14:36:18 +0000111 ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000112 code for the module (This loader may be a wrapper around the standard
113 import mechanism). For a simple script, this will be set to :const:`None`.
114
115 ``__package__`` is set to ``__name__.rpartition('.')[0]``.
116
117 A number of alterations are also made to the :mod:`sys` module. Firstly,
118 ``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated
119 with the value of ``file_path`` and ``sys.modules[__name__]`` is updated
120 with a temporary module object for the module being executed. All
121 modifications to items in :mod:`sys` are reverted before the function
122 returns.
123
124 Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
125 are not optional in this function as these adjustments are essential to
Georg Brandlf285bcc2010-10-19 21:07:16 +0000126 allowing the execution of sys.path entries. As the thread-safety
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000127 limitations still apply, use of this function in threaded code should be
128 either serialised with the import lock or delegated to a separate process.
129
130 .. versionadded:: 3.2
131
Georg Brandl116aa622007-08-15 14:28:22 +0000132.. seealso::
133
134 :pep:`338` - Executing modules as scripts
Nick Coghlan3f48ae32009-02-08 01:58:26 +0000135 PEP written and implemented by Nick Coghlan.
136
137 :pep:`366` - Main module explicit relative imports
138 PEP written and implemented by Nick Coghlan.
Georg Brandl116aa622007-08-15 14:28:22 +0000139
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000140 :ref:`using-on-general` - CPython command line details