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