blob: 907ce2af13fd97bf5c7f0fe8330a844c02c2f0e4 [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
Nick Coghlan260bd3e2009-11-16 06:49:25 +000071 Added ability to execute packages by looking for a ``__main__``
72 submodule
Nick Coghlan3f48ae32009-02-08 01:58:26 +000073
74
Nick Coghlan260bd3e2009-11-16 06:49:25 +000075.. function:: run_path(file_path, init_globals=None, run_name=None)
76
77 Execute the code at the named filesystem location and return the resulting
78 module globals dictionary. As with a script name supplied to the CPython
79 command line, the supplied path may refer to a Python source file, a
80 compiled bytecode file or a valid sys.path entry containing a ``__main__``
81 module (e.g. a zipfile containing a top-level ``__main__.py`` file).
82
83 For a simple script, the specified code is simply executed in a fresh
84 module namespace. For a valid sys.path entry (typically a zipfile or
85 directory), the entry is first added to the beginning of ``sys.path``. The
86 function then looks for and executes a :mod:`__main__` module using the
87 updated path. Note that there is no special protection against invoking
88 an existing :mod:`__main__` entry located elsewhere on ``sys.path`` if
89 there is no such module at the specified location.
90
91 The optional dictionary argument *init_globals* may be used to pre-populate
92 the module's globals dictionary before the code is executed. The supplied
93 dictionary will not be modified. If any of the special global variables
94 below are defined in the supplied dictionary, those definitions are
95 overridden by :func:`run_path`.
96
97 The special global variables ``__name__``, ``__file__``, ``__loader__``
98 and ``__package__`` are set in the globals dictionary before the module
99 code is executed (Note that this is a minimal set of variables - other
100 variables may be set implicitly as an interpreter implementation detail).
101
102 ``__name__`` is set to *run_name* if this optional argument is not
103 :const:`None` and to ``'<run_path>'`` otherwise.
104
105 ``__file__`` is set to the name provided by the module loader. If the
106 loader does not make filename information available, this variable is set
107 to :const:`None`. For a simple script, this will be set to ``file_path``.
108
Victor Stinner766ad362010-05-14 14:36:18 +0000109 ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000110 code for the module (This loader may be a wrapper around the standard
111 import mechanism). For a simple script, this will be set to :const:`None`.
112
113 ``__package__`` is set to ``__name__.rpartition('.')[0]``.
114
115 A number of alterations are also made to the :mod:`sys` module. Firstly,
116 ``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated
117 with the value of ``file_path`` and ``sys.modules[__name__]`` is updated
118 with a temporary module object for the module being executed. All
119 modifications to items in :mod:`sys` are reverted before the function
120 returns.
121
122 Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
123 are not optional in this function as these adjustments are essential to
124 allowing the execution of sys.path entries. As the thread safety
125 limitations still apply, use of this function in threaded code should be
126 either serialised with the import lock or delegated to a separate process.
127
128 .. versionadded:: 3.2
129
Georg Brandl116aa622007-08-15 14:28:22 +0000130.. seealso::
131
132 :pep:`338` - Executing modules as scripts
Nick Coghlan3f48ae32009-02-08 01:58:26 +0000133 PEP written and implemented by Nick Coghlan.
134
135 :pep:`366` - Main module explicit relative imports
136 PEP written and implemented by Nick Coghlan.
Georg Brandl116aa622007-08-15 14:28:22 +0000137
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000138 :ref:`using-on-general` - CPython command line details