blob: 7278b7a0dfdfa7f0ba4c6438fa4837507e104aef [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
21 import mechanism (refer to PEP 302 for details) and then executed in a
22 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
Nick Coghlan260bd3e2009-11-16 06:49:25 +000035 The special global variables ``__name__``, ``__file__``, ``__loader__``
36 and ``__package__`` are set in the globals dictionary before the module
37 code is executed (Note that this is a minimal set of variables - other
38 variables may be set implicitly as an interpreter implementation detail).
Georg Brandl116aa622007-08-15 14:28:22 +000039
Nick Coghlan260bd3e2009-11-16 06:49:25 +000040 ``__name__`` is set to *run_name* if this optional argument is not
41 :const:`None`, to ``mod_name + '.__main__'`` if the named module is a
42 package and to the *mod_name* argument otherwise.
Georg Brandl116aa622007-08-15 14:28:22 +000043
Nick Coghlan260bd3e2009-11-16 06:49:25 +000044 ``__file__`` is set to the name provided by the module loader. If the
45 loader does not make filename information available, this variable is set
Ezio Melotti6e40e272010-01-04 09:29:10 +000046 to :const:`None`.
Georg Brandl116aa622007-08-15 14:28:22 +000047
Nick Coghlan260bd3e2009-11-16 06:49:25 +000048 ``__loader__`` is set to the PEP 302 module loader used to retrieve the
49 code for the module (This loader may be a wrapper around the standard
50 import mechanism).
Georg Brandl116aa622007-08-15 14:28:22 +000051
Nick Coghlan260bd3e2009-11-16 06:49:25 +000052 ``__package__`` is set to *mod_name* if the named module is a package and
53 to ``mod_name.rpartition('.')[0]`` otherwise.
Georg Brandl116aa622007-08-15 14:28:22 +000054
Nick Coghlan260bd3e2009-11-16 06:49:25 +000055 If the argument *alter_sys* is supplied and evaluates to :const:`True`,
56 then ``sys.argv[0]`` is updated with the value of ``__file__`` and
Thomas Woutersed03b412007-08-28 21:37:11 +000057 ``sys.modules[__name__]`` is updated with a temporary module object for the
58 module being executed. Both ``sys.argv[0]`` and ``sys.modules[__name__]``
59 are restored to their original values before the function returns.
Georg Brandl116aa622007-08-15 14:28:22 +000060
Nick Coghlan260bd3e2009-11-16 06:49:25 +000061 Note that this manipulation of :mod:`sys` is not thread-safe. Other threads
62 may see the partially initialised module, as well as the altered list of
63 arguments. It is recommended that the :mod:`sys` module be left alone when
64 invoking this function from threaded code.
Georg Brandl116aa622007-08-15 14:28:22 +000065
66
Nick Coghlan3f48ae32009-02-08 01:58:26 +000067 .. versionchanged:: 3.1
Nick Coghlan260bd3e2009-11-16 06:49:25 +000068 Added ability to execute packages by looking for a ``__main__``
69 submodule
Nick Coghlan3f48ae32009-02-08 01:58:26 +000070
71
Nick Coghlan260bd3e2009-11-16 06:49:25 +000072.. function:: run_path(file_path, init_globals=None, run_name=None)
73
74 Execute the code at the named filesystem location and return the resulting
75 module globals dictionary. As with a script name supplied to the CPython
76 command line, the supplied path may refer to a Python source file, a
77 compiled bytecode file or a valid sys.path entry containing a ``__main__``
78 module (e.g. a zipfile containing a top-level ``__main__.py`` file).
79
80 For a simple script, the specified code is simply executed in a fresh
81 module namespace. For a valid sys.path entry (typically a zipfile or
82 directory), the entry is first added to the beginning of ``sys.path``. The
83 function then looks for and executes a :mod:`__main__` module using the
84 updated path. Note that there is no special protection against invoking
85 an existing :mod:`__main__` entry located elsewhere on ``sys.path`` if
86 there is no such module at the specified location.
87
88 The optional dictionary argument *init_globals* may be used to pre-populate
89 the module's globals dictionary before the code is executed. The supplied
90 dictionary will not be modified. If any of the special global variables
91 below are defined in the supplied dictionary, those definitions are
92 overridden by :func:`run_path`.
93
94 The special global variables ``__name__``, ``__file__``, ``__loader__``
95 and ``__package__`` are set in the globals dictionary before the module
96 code is executed (Note that this is a minimal set of variables - other
97 variables may be set implicitly as an interpreter implementation detail).
98
99 ``__name__`` is set to *run_name* if this optional argument is not
100 :const:`None` and to ``'<run_path>'`` otherwise.
101
102 ``__file__`` is set to the name provided by the module loader. If the
103 loader does not make filename information available, this variable is set
104 to :const:`None`. For a simple script, this will be set to ``file_path``.
105
106 ``__loader__`` is set to the PEP 302 module loader used to retrieve the
107 code for the module (This loader may be a wrapper around the standard
108 import mechanism). For a simple script, this will be set to :const:`None`.
109
110 ``__package__`` is set to ``__name__.rpartition('.')[0]``.
111
112 A number of alterations are also made to the :mod:`sys` module. Firstly,
113 ``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated
114 with the value of ``file_path`` and ``sys.modules[__name__]`` is updated
115 with a temporary module object for the module being executed. All
116 modifications to items in :mod:`sys` are reverted before the function
117 returns.
118
119 Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
120 are not optional in this function as these adjustments are essential to
121 allowing the execution of sys.path entries. As the thread safety
122 limitations still apply, use of this function in threaded code should be
123 either serialised with the import lock or delegated to a separate process.
124
125 .. versionadded:: 3.2
126
Georg Brandl116aa622007-08-15 14:28:22 +0000127.. seealso::
128
129 :pep:`338` - Executing modules as scripts
Nick Coghlan3f48ae32009-02-08 01:58:26 +0000130 PEP written and implemented by Nick Coghlan.
131
132 :pep:`366` - Main module explicit relative imports
133 PEP written and implemented by Nick Coghlan.
Georg Brandl116aa622007-08-15 14:28:22 +0000134
Nick Coghlan260bd3e2009-11-16 06:49:25 +0000135 :ref:`using-on-general` - CPython command line details