blob: 23d0730e46b26a2301700c364df1712251a6c7c2 [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
11The :mod:`runpy` module is used to locate and run Python modules without
Nick Coghlan49868cb2009-11-15 07:30:34 +000012importing them first. Its main use is to implement the :option:`-m` command
13line switch that allows scripts to be located using the Python module
14namespace rather than the filesystem.
Georg Brandl8ec7f652007-08-15 14:28:01 +000015
Nick Coghlan49868cb2009-11-15 07:30:34 +000016The :mod:`runpy` module provides two functions:
Georg Brandl8ec7f652007-08-15 14:28:01 +000017
18
Nick Coghlan49868cb2009-11-15 07:30:34 +000019.. function:: run_module(mod_name, init_globals=None, run_name=None, alter_sys=False)
Georg Brandl8ec7f652007-08-15 14:28:01 +000020
Nick Coghlan49868cb2009-11-15 07:30:34 +000021 Execute the code of the specified module and return the resulting module
22 globals dictionary. The module's code is first located using the standard
Victor Stinner8ded4772010-05-14 14:20:07 +000023 import mechanism (refer to :pep:`302` for details) and then executed in a
Nick Coghlan49868cb2009-11-15 07:30:34 +000024 fresh module namespace.
Georg Brandl8ec7f652007-08-15 14:28:01 +000025
Nick Coghlan49868cb2009-11-15 07:30:34 +000026 If the supplied module name refers to a package rather than a normal
27 module, then that package is imported and the ``__main__`` submodule within
28 that package is then executed and the resulting module globals dictionary
29 returned.
Nick Coghland39600e2009-02-08 01:26:34 +000030
Nick Coghlan49868cb2009-11-15 07:30:34 +000031 The optional dictionary argument *init_globals* may be used to pre-populate
32 the module's globals dictionary before the code is executed. The supplied
33 dictionary will not be modified. If any of the special global variables
34 below are defined in the supplied dictionary, those definitions are
35 overridden by :func:`run_module`.
Georg Brandl8ec7f652007-08-15 14:28:01 +000036
Nick Coghlan49868cb2009-11-15 07:30:34 +000037 The special global variables ``__name__``, ``__file__``, ``__loader__``
38 and ``__package__`` are set in the globals dictionary before the module
39 code is executed (Note that this is a minimal set of variables - other
40 variables may be set implicitly as an interpreter implementation detail).
Georg Brandl8ec7f652007-08-15 14:28:01 +000041
Nick Coghlan49868cb2009-11-15 07:30:34 +000042 ``__name__`` is set to *run_name* if this optional argument is not
43 :const:`None`, to ``mod_name + '.__main__'`` if the named module is a
44 package and to the *mod_name* argument otherwise.
Georg Brandl8ec7f652007-08-15 14:28:01 +000045
Nick Coghlan49868cb2009-11-15 07:30:34 +000046 ``__file__`` is set to the name provided by the module loader. If the
47 loader does not make filename information available, this variable is set
Ezio Melotti81982562010-01-04 09:00:11 +000048 to :const:`None`.
Georg Brandl8ec7f652007-08-15 14:28:01 +000049
Victor Stinner8ded4772010-05-14 14:20:07 +000050 ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
Nick Coghlan49868cb2009-11-15 07:30:34 +000051 code for the module (This loader may be a wrapper around the standard
52 import mechanism).
Georg Brandl8ec7f652007-08-15 14:28:01 +000053
Nick Coghlan49868cb2009-11-15 07:30:34 +000054 ``__package__`` is set to *mod_name* if the named module is a package and
55 to ``mod_name.rpartition('.')[0]`` otherwise.
Georg Brandl8ec7f652007-08-15 14:28:01 +000056
Nick Coghlan49868cb2009-11-15 07:30:34 +000057 If the argument *alter_sys* is supplied and evaluates to :const:`True`,
58 then ``sys.argv[0]`` is updated with the value of ``__file__`` and
Nick Coghlan3af0e782007-08-25 04:32:07 +000059 ``sys.modules[__name__]`` is updated with a temporary module object for the
60 module being executed. Both ``sys.argv[0]`` and ``sys.modules[__name__]``
61 are restored to their original values before the function returns.
Georg Brandl8ec7f652007-08-15 14:28:01 +000062
Nick Coghlan49868cb2009-11-15 07:30:34 +000063 Note that this manipulation of :mod:`sys` is not thread-safe. Other threads
64 may see the partially initialised module, as well as the altered list of
65 arguments. It is recommended that the :mod:`sys` module be left alone when
66 invoking this function from threaded code.
Georg Brandl8ec7f652007-08-15 14:28:01 +000067
68
Nick Coghland39600e2009-02-08 01:26:34 +000069 .. versionchanged:: 2.7
Nick Coghlan49868cb2009-11-15 07:30:34 +000070 Added ability to execute packages by looking for a ``__main__``
71 submodule
Nick Coghland39600e2009-02-08 01:26:34 +000072
73
Nick Coghlan49868cb2009-11-15 07:30:34 +000074.. function:: run_path(file_path, init_globals=None, run_name=None)
75
76 Execute the code at the named filesystem location and return the resulting
77 module globals dictionary. As with a script name supplied to the CPython
78 command line, the supplied path may refer to a Python source file, a
79 compiled bytecode file or a valid sys.path entry containing a ``__main__``
80 module (e.g. a zipfile containing a top-level ``__main__.py`` file).
81
82 For a simple script, the specified code is simply executed in a fresh
83 module namespace. For a valid sys.path entry (typically a zipfile or
84 directory), the entry is first added to the beginning of ``sys.path``. The
85 function then looks for and executes a :mod:`__main__` module using the
86 updated path. Note that there is no special protection against invoking
87 an existing :mod:`__main__` entry located elsewhere on ``sys.path`` if
88 there is no such module at the specified location.
89
90 The optional dictionary argument *init_globals* may be used to pre-populate
91 the module's globals dictionary before the code is executed. The supplied
92 dictionary will not be modified. If any of the special global variables
93 below are defined in the supplied dictionary, those definitions are
94 overridden by :func:`run_path`.
95
96 The special global variables ``__name__``, ``__file__``, ``__loader__``
97 and ``__package__`` are set in the globals dictionary before the module
98 code is executed (Note that this is a minimal set of variables - other
99 variables may be set implicitly as an interpreter implementation detail).
100
101 ``__name__`` is set to *run_name* if this optional argument is not
102 :const:`None` and to ``'<run_path>'`` otherwise.
103
104 ``__file__`` is set to the name provided by the module loader. If the
105 loader does not make filename information available, this variable is set
106 to :const:`None`. For a simple script, this will be set to ``file_path``.
107
Victor Stinner8ded4772010-05-14 14:20:07 +0000108 ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
Nick Coghlan49868cb2009-11-15 07:30:34 +0000109 code for the module (This loader may be a wrapper around the standard
110 import mechanism). For a simple script, this will be set to :const:`None`.
111
112 ``__package__`` is set to ``__name__.rpartition('.')[0]``.
113
114 A number of alterations are also made to the :mod:`sys` module. Firstly,
115 ``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated
116 with the value of ``file_path`` and ``sys.modules[__name__]`` is updated
117 with a temporary module object for the module being executed. All
118 modifications to items in :mod:`sys` are reverted before the function
119 returns.
120
121 Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
122 are not optional in this function as these adjustments are essential to
123 allowing the execution of sys.path entries. As the thread safety
124 limitations still apply, use of this function in threaded code should be
125 either serialised with the import lock or delegated to a separate process.
126
127 .. versionadded:: 2.7
128
Georg Brandl8ec7f652007-08-15 14:28:01 +0000129.. seealso::
130
131 :pep:`338` - Executing modules as scripts
Nick Coghland39600e2009-02-08 01:26:34 +0000132 PEP written and implemented by Nick Coghlan.
133
134 :pep:`366` - Main module explicit relative imports
135 PEP written and implemented by Nick Coghlan.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000136
Nick Coghlan49868cb2009-11-15 07:30:34 +0000137 :ref:`using-on-general` - CPython command line details