• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1: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
11**Source code:** :source:`Lib/runpy.py`
12
13--------------
14
15The :mod:`runpy` module is used to locate and run Python modules without
16importing them first. Its main use is to implement the :option:`-m` command
17line switch that allows scripts to be located using the Python module
18namespace rather than the filesystem.
19
20The :mod:`runpy` module provides two functions:
21
22
23.. function:: run_module(mod_name, init_globals=None, run_name=None, alter_sys=False)
24
25   .. index::
26      module: __main__
27
28   Execute the code of the specified module and return the resulting module
29   globals dictionary. The module's code is first located using the standard
30   import mechanism (refer to :pep:`302` for details) and then executed in a
31   fresh module namespace.
32
33   If the supplied module name refers to a package rather than a normal
34   module, then that package is imported and the ``__main__`` submodule within
35   that package is then executed and the resulting module globals dictionary
36   returned.
37
38   The optional dictionary argument *init_globals* may be used to pre-populate
39   the module's globals dictionary before the code is executed. The supplied
40   dictionary will not be modified. If any of the special global variables
41   below are defined in the supplied dictionary, those definitions are
42   overridden by :func:`run_module`.
43
44   The special global variables ``__name__``, ``__file__``, ``__loader__``
45   and ``__package__`` are set in the globals dictionary before the module
46   code is executed (Note that this is a minimal set of variables - other
47   variables may be set implicitly as an interpreter implementation detail).
48
49   ``__name__`` is set to *run_name* if this optional argument is not
50   :const:`None`, to ``mod_name + '.__main__'`` if the named module is a
51   package and to the *mod_name* argument otherwise.
52
53   ``__file__`` is set to the name provided by the module loader. If the
54   loader does not make filename information available, this variable is set
55   to :const:`None`.
56
57   ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
58   code for the module (This loader may be a wrapper around the standard
59   import mechanism).
60
61   ``__package__`` is set to *mod_name* if the named module is a package and
62   to ``mod_name.rpartition('.')[0]`` otherwise.
63
64   If the argument *alter_sys* is supplied and evaluates to :const:`True`,
65   then ``sys.argv[0]`` is updated with the value of ``__file__`` and
66   ``sys.modules[__name__]`` is updated with a temporary module object for the
67   module being executed. Both ``sys.argv[0]`` and ``sys.modules[__name__]``
68   are restored to their original values before the function returns.
69
70   Note that this manipulation of :mod:`sys` is not thread-safe. Other threads
71   may see the partially initialised module, as well as the altered list of
72   arguments. It is recommended that the :mod:`sys` module be left alone when
73   invoking this function from threaded code.
74
75   .. seealso::
76      The :option:`-m` option offering equivalent functionality from the
77      command line.
78
79   .. versionchanged:: 2.7
80         Added ability to execute packages by looking for a ``__main__``
81         submodule
82
83
84.. function:: run_path(file_path, init_globals=None, run_name=None)
85
86   .. index::
87      module: __main__
88
89   Execute the code at the named filesystem location and return the resulting
90   module globals dictionary. As with a script name supplied to the CPython
91   command line, the supplied path may refer to a Python source file, a
92   compiled bytecode file or a valid sys.path entry containing a ``__main__``
93   module (e.g. a zipfile containing a top-level ``__main__.py`` file).
94
95   For a simple script, the specified code is simply executed in a fresh
96   module namespace. For a valid sys.path entry (typically a zipfile or
97   directory), the entry is first added to the beginning of ``sys.path``. The
98   function then looks for and executes a :mod:`__main__` module using the
99   updated path. Note that there is no special protection against invoking
100   an existing :mod:`__main__` entry located elsewhere on ``sys.path`` if
101   there is no such module at the specified location.
102
103   The optional dictionary argument *init_globals* may be used to pre-populate
104   the module's globals dictionary before the code is executed. The supplied
105   dictionary will not be modified. If any of the special global variables
106   below are defined in the supplied dictionary, those definitions are
107   overridden by :func:`run_path`.
108
109   The special global variables ``__name__``, ``__file__``, ``__loader__``
110   and ``__package__`` are set in the globals dictionary before the module
111   code is executed (Note that this is a minimal set of variables - other
112   variables may be set implicitly as an interpreter implementation detail).
113
114   ``__name__`` is set to *run_name* if this optional argument is not
115   :const:`None` and to ``'<run_path>'`` otherwise.
116
117   ``__file__`` is set to the name provided by the module loader. If the
118   loader does not make filename information available, this variable is set
119   to :const:`None`. For a simple script, this will be set to ``file_path``.
120
121   ``__loader__`` is set to the :pep:`302` module loader used to retrieve the
122   code for the module (This loader may be a wrapper around the standard
123   import mechanism). For a simple script, this will be set to :const:`None`.
124
125   ``__package__`` is set to ``__name__.rpartition('.')[0]``.
126
127   A number of alterations are also made to the :mod:`sys` module. Firstly,
128   ``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated
129   with the value of ``file_path`` and ``sys.modules[__name__]`` is updated
130   with a temporary module object for the module being executed. All
131   modifications to items in :mod:`sys` are reverted before the function
132   returns.
133
134   Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
135   are not optional in this function as these adjustments are essential to
136   allowing the execution of sys.path entries. As the thread-safety
137   limitations still apply, use of this function in threaded code should be
138   either serialised with the import lock or delegated to a separate process.
139
140   .. seealso::
141      :ref:`using-on-interface-options` for equivalent functionality on the
142      command line (``python path/to/script``).
143
144   .. versionadded:: 2.7
145
146.. seealso::
147
148   :pep:`338` -- Executing modules as scripts
149      PEP written and implemented by Nick Coghlan.
150
151   :pep:`366` -- Main module explicit relative imports
152      PEP written and implemented by Nick Coghlan.
153
154   :ref:`using-on-general` - CPython command line details
155