Home | History | Annotate | Download | only in using
      1 .. highlightlang:: sh
      2 
      3 .. ATTENTION: You probably should update Misc/python.man, too, if you modify
      4    this file.
      5 
      6 .. _using-on-general:
      7 
      8 Command line and environment
      9 ============================
     10 
     11 The CPython interpreter scans the command line and the environment for various
     12 settings.
     13 
     14 .. impl-detail::
     15 
     16    Other implementations' command line schemes may differ.  See
     17    :ref:`implementations` for further resources.
     18 
     19 
     20 .. _using-on-cmdline:
     21 
     22 Command line
     23 ------------
     24 
     25 When invoking Python, you may specify any of these options::
     26 
     27     python [-bBdEiOQsRStuUvVWxX3?] [-c command | -m module-name | script | - ] [args]
     28 
     29 The most common use case is, of course, a simple invocation of a script::
     30 
     31     python myscript.py
     32 
     33 
     34 .. _using-on-interface-options:
     35 
     36 Interface options
     37 ~~~~~~~~~~~~~~~~~
     38 
     39 The interpreter interface resembles that of the UNIX shell, but provides some
     40 additional methods of invocation:
     41 
     42 * When called with standard input connected to a tty device, it prompts for
     43   commands and executes them until an EOF (an end-of-file character, you can
     44   produce that with :kbd:`Ctrl-D` on UNIX or :kbd:`Ctrl-Z, Enter` on Windows) is read.
     45 * When called with a file name argument or with a file as standard input, it
     46   reads and executes a script from that file.
     47 * When called with a directory name argument, it reads and executes an
     48   appropriately named script from that directory.
     49 * When called with ``-c command``, it executes the Python statement(s) given as
     50   *command*.  Here *command* may contain multiple statements separated by
     51   newlines. Leading whitespace is significant in Python statements!
     52 * When called with ``-m module-name``, the given module is located on the
     53   Python module path and executed as a script.
     54 
     55 In non-interactive mode, the entire input is parsed before it is executed.
     56 
     57 An interface option terminates the list of options consumed by the interpreter,
     58 all consecutive arguments will end up in :data:`sys.argv` -- note that the first
     59 element, subscript zero (``sys.argv[0]``), is a string reflecting the program's
     60 source.
     61 
     62 .. cmdoption:: -c <command>
     63 
     64    Execute the Python code in *command*.  *command* can be one or more
     65    statements separated by newlines, with significant leading whitespace as in
     66    normal module code.
     67 
     68    If this option is given, the first element of :data:`sys.argv` will be
     69    ``"-c"`` and the current directory will be added to the start of
     70    :data:`sys.path` (allowing modules in that directory to be imported as top
     71    level modules).
     72 
     73 
     74 .. cmdoption:: -m <module-name>
     75 
     76    Search :data:`sys.path` for the named module and execute its contents as
     77    the :mod:`__main__` module.
     78 
     79    Since the argument is a *module* name, you must not give a file extension
     80    (``.py``).  The ``module-name`` should be a valid Python module name, but
     81    the implementation may not always enforce this (e.g. it may allow you to
     82    use a name that includes a hyphen).
     83 
     84    Package names are also permitted. When a package name is supplied instead
     85    of a normal module, the interpreter will execute ``<pkg>.__main__`` as
     86    the main module. This behaviour is deliberately similar to the handling
     87    of directories and zipfiles that are passed to the interpreter as the
     88    script argument.
     89 
     90    .. note::
     91 
     92       This option cannot be used with built-in modules and extension modules
     93       written in C, since they do not have Python module files. However, it
     94       can still be used for precompiled modules, even if the original source
     95       file is not available.
     96 
     97    If this option is given, the first element of :data:`sys.argv` will be the
     98    full path to the module file. As with the :option:`-c` option, the current
     99    directory will be added to the start of :data:`sys.path`.
    100 
    101    Many standard library modules contain code that is invoked on their execution
    102    as a script.  An example is the :mod:`timeit` module::
    103 
    104        python -mtimeit -s 'setup here' 'benchmarked code here'
    105        python -mtimeit -h # for details
    106 
    107    .. seealso::
    108       :func:`runpy.run_module`
    109          Equivalent functionality directly available to Python code
    110 
    111       :pep:`338` -- Executing modules as scripts
    112 
    113    .. versionadded:: 2.4
    114 
    115    .. versionchanged:: 2.5
    116       The named module can now be located inside a package.
    117 
    118    .. versionchanged:: 2.7
    119       Supply the package name to run a ``__main__`` submodule.
    120       sys.argv[0] is now set to ``"-m"`` while searching for the module
    121       (it was previously incorrectly set to ``"-c"``)
    122 
    123 
    124 .. describe:: -
    125 
    126    Read commands from standard input (:data:`sys.stdin`).  If standard input is
    127    a terminal, :option:`-i` is implied.
    128 
    129    If this option is given, the first element of :data:`sys.argv` will be
    130    ``"-"`` and the current directory will be added to the start of
    131    :data:`sys.path`.
    132 
    133    .. seealso::
    134       :func:`runpy.run_path`
    135          Equivalent functionality directly available to Python code
    136 
    137 
    138 .. describe:: <script>
    139 
    140    Execute the Python code contained in *script*, which must be a filesystem
    141    path (absolute or relative) referring to either a Python file, a directory
    142    containing a ``__main__.py`` file, or a zipfile containing a
    143    ``__main__.py`` file.
    144 
    145    If this option is given, the first element of :data:`sys.argv` will be the
    146    script name as given on the command line.
    147 
    148    If the script name refers directly to a Python file, the directory
    149    containing that file is added to the start of :data:`sys.path`, and the
    150    file is executed as the :mod:`__main__` module.
    151 
    152    If the script name refers to a directory or zipfile, the script name is
    153    added to the start of :data:`sys.path` and the ``__main__.py`` file in
    154    that location is executed as the :mod:`__main__` module.
    155 
    156    .. versionchanged:: 2.5
    157       Directories and zipfiles containing a ``__main__.py`` file at the top
    158       level are now considered valid Python scripts.
    159 
    160 If no interface option is given, :option:`-i` is implied, ``sys.argv[0]`` is
    161 an empty string (``""``) and the current directory will be added to the
    162 start of :data:`sys.path`.
    163 
    164 .. seealso::  :ref:`tut-invoking`
    165 
    166 
    167 Generic options
    168 ~~~~~~~~~~~~~~~
    169 
    170 .. cmdoption:: -?
    171                -h
    172                --help
    173 
    174    Print a short description of all command line options.
    175 
    176    .. versionchanged:: 2.5
    177       The ``--help`` variant.
    178 
    179 
    180 .. cmdoption:: -V
    181                --version
    182 
    183    Print the Python version number and exit.  Example output could be::
    184 
    185        Python 2.5.1
    186 
    187    .. versionchanged:: 2.5
    188       The ``--version`` variant.
    189 
    190 
    191 Miscellaneous options
    192 ~~~~~~~~~~~~~~~~~~~~~
    193 
    194 .. cmdoption:: -b
    195 
    196    Issue a warning when comparing :class:`unicode` with :class:`bytearray`.
    197    Issue an error when the option is given twice (:option:`!-bb`).
    198 
    199    Note that, unlike the corresponding Python 3.x flag, this will **not** emit
    200    warnings for comparisons between :class:`str` and :class:`unicode`.
    201    Instead, the ``str`` instance will be implicitly decoded to ``unicode`` and
    202    Unicode comparison used.
    203 
    204    .. versionadded:: 2.6
    205 
    206 
    207 .. cmdoption:: -B
    208 
    209    If given, Python won't try to write ``.pyc`` or ``.pyo`` files on the
    210    import of source modules.  See also :envvar:`PYTHONDONTWRITEBYTECODE`.
    211 
    212    .. versionadded:: 2.6
    213 
    214 
    215 .. cmdoption:: -d
    216 
    217    Turn on parser debugging output (for wizards only, depending on compilation
    218    options).  See also :envvar:`PYTHONDEBUG`.
    219 
    220 
    221 .. cmdoption:: -E
    222 
    223    Ignore all :envvar:`PYTHON*` environment variables, e.g.
    224    :envvar:`PYTHONPATH` and :envvar:`PYTHONHOME`, that might be set.
    225 
    226    .. versionadded:: 2.2
    227 
    228 
    229 .. cmdoption:: -i
    230 
    231    When a script is passed as first argument or the :option:`-c` option is used,
    232    enter interactive mode after executing the script or the command, even when
    233    :data:`sys.stdin` does not appear to be a terminal.  The
    234    :envvar:`PYTHONSTARTUP` file is not read.
    235 
    236    This can be useful to inspect global variables or a stack trace when a script
    237    raises an exception.  See also :envvar:`PYTHONINSPECT`.
    238 
    239 
    240 .. _using-on-optimizations:
    241 .. cmdoption:: -O
    242 
    243    Turn on basic optimizations.  This changes the filename extension for
    244    compiled (:term:`bytecode`) files from ``.pyc`` to ``.pyo``.  See also
    245    :envvar:`PYTHONOPTIMIZE`.
    246 
    247 
    248 .. cmdoption:: -OO
    249 
    250    Discard docstrings in addition to the :option:`-O` optimizations.
    251 
    252 
    253 .. cmdoption:: -Q <arg>
    254 
    255    Division control. The argument must be one of the following:
    256 
    257    ``old``
    258      division of int/int and long/long return an int or long (*default*)
    259    ``new``
    260      new division semantics, i.e. division of int/int and long/long returns a
    261      float
    262    ``warn``
    263      old division semantics with a warning for int/int and long/long
    264    ``warnall``
    265      old division semantics with a warning for all uses of the division operator
    266 
    267    .. seealso::
    268       :file:`Tools/scripts/fixdiv.py`
    269          for a use of ``warnall``
    270 
    271       :pep:`238` -- Changing the division operator
    272 
    273 
    274 .. cmdoption:: -R
    275 
    276    Turn on hash randomization, so that the :meth:`__hash__` values of str,
    277    bytes and datetime objects are "salted" with an unpredictable random value.
    278    Although they remain constant within an individual Python process, they are
    279    not predictable between repeated invocations of Python.
    280 
    281    This is intended to provide protection against a denial-of-service caused by
    282    carefully-chosen inputs that exploit the worst case performance of a dict
    283    construction, O(n^2) complexity.  See
    284    http://www.ocert.org/advisories/ocert-2011-003.html for details.
    285 
    286    Changing hash values affects the order in which keys are retrieved from a
    287    dict.  Although Python has never made guarantees about this ordering (and it
    288    typically varies between 32-bit and 64-bit builds), enough real-world code
    289    implicitly relies on this non-guaranteed behavior that the randomization is
    290    disabled by default.
    291 
    292    See also :envvar:`PYTHONHASHSEED`.
    293 
    294    .. versionadded:: 2.6.8
    295 
    296 
    297 .. cmdoption:: -s
    298 
    299    Don't add the :data:`user site-packages directory <site.USER_SITE>` to
    300    :data:`sys.path`.
    301 
    302    .. versionadded:: 2.6
    303 
    304    .. seealso::
    305 
    306       :pep:`370` -- Per user site-packages directory
    307 
    308 
    309 .. cmdoption:: -S
    310 
    311    Disable the import of the module :mod:`site` and the site-dependent
    312    manipulations of :data:`sys.path` that it entails.
    313 
    314 
    315 .. cmdoption:: -t
    316 
    317    Issue a warning when a source file mixes tabs and spaces for indentation in a
    318    way that makes it depend on the worth of a tab expressed in spaces.  Issue an
    319    error when the option is given twice (:option:`!-tt`).
    320 
    321 
    322 .. cmdoption:: -u
    323 
    324    Force stdin, stdout and stderr to be totally unbuffered.  On systems where it
    325    matters, also put stdin, stdout and stderr in binary mode.
    326 
    327    Note that there is internal buffering in :meth:`file.readlines` and
    328    :ref:`bltin-file-objects` (``for line in sys.stdin``) which is not influenced
    329    by this option.  To work around this, you will want to use
    330    :meth:`file.readline` inside a ``while 1:`` loop.
    331 
    332    See also :envvar:`PYTHONUNBUFFERED`.
    333 
    334 
    335 .. cmdoption:: -v
    336 
    337    Print a message each time a module is initialized, showing the place
    338    (filename or built-in module) from which it is loaded.  When given twice
    339    (:option:`!-vv`), print a message for each file that is checked for when
    340    searching for a module.  Also provides information on module cleanup at exit.
    341    See also :envvar:`PYTHONVERBOSE`.
    342 
    343 
    344 .. cmdoption:: -W arg
    345 
    346    Warning control.  Python's warning machinery by default prints warning
    347    messages to :data:`sys.stderr`.  A typical warning message has the following
    348    form::
    349 
    350        file:line: category: message
    351 
    352    By default, each warning is printed once for each source line where it
    353    occurs.  This option controls how often warnings are printed.
    354 
    355    Multiple :option:`-W` options may be given; when a warning matches more than
    356    one option, the action for the last matching option is performed.  Invalid
    357    :option:`-W` options are ignored (though, a warning message is printed about
    358    invalid options when the first warning is issued).
    359 
    360    Starting from Python 2.7, :exc:`DeprecationWarning` and its descendants
    361    are ignored by default.  The :option:`!-Wd` option can be used to re-enable
    362    them.
    363 
    364    Warnings can also be controlled from within a Python program using the
    365    :mod:`warnings` module.
    366 
    367    The simplest form of argument is one of the following action strings (or a
    368    unique abbreviation) by themselves:
    369 
    370    ``ignore``
    371       Ignore all warnings.
    372    ``default``
    373       Explicitly request the default behavior (printing each warning once per
    374       source line).
    375    ``all``
    376       Print a warning each time it occurs (this may generate many messages if a
    377       warning is triggered repeatedly for the same source line, such as inside a
    378       loop).
    379    ``module``
    380       Print each warning only the first time it occurs in each module.
    381    ``once``
    382       Print each warning only the first time it occurs in the program.
    383    ``error``
    384       Raise an exception instead of printing a warning message.
    385 
    386    The full form of argument is::
    387 
    388        action:message:category:module:line
    389 
    390    Here, *action* is as explained above but only applies to messages that match
    391    the remaining fields.  Empty fields match all values; trailing empty fields
    392    may be omitted.  The *message* field matches the start of the warning message
    393    printed; this match is case-insensitive.  The *category* field matches the
    394    warning category.  This must be a class name; the match tests whether the
    395    actual warning category of the message is a subclass of the specified warning
    396    category.  The full class name must be given.  The *module* field matches the
    397    (fully-qualified) module name; this match is case-sensitive.  The *line*
    398    field matches the line number, where zero matches all line numbers and is
    399    thus equivalent to an omitted line number.
    400 
    401    .. seealso::
    402       :mod:`warnings` -- the warnings module
    403 
    404       :pep:`230` -- Warning framework
    405 
    406       :envvar:`PYTHONWARNINGS`
    407 
    408 
    409 .. cmdoption:: -x
    410 
    411    Skip the first line of the source, allowing use of non-Unix forms of
    412    ``#!cmd``.  This is intended for a DOS specific hack only.
    413 
    414 .. cmdoption:: -3
    415 
    416    Warn about Python 3.x possible incompatibilities by emitting a
    417    :exc:`DeprecationWarning` for features that are removed or significantly
    418    changed in Python 3 and can't be detected using static code analysis.
    419 
    420    .. versionadded:: 2.6
    421 
    422    See :doc:`/howto/pyporting` for more details.
    423 
    424 Options you shouldn't use
    425 ~~~~~~~~~~~~~~~~~~~~~~~~~
    426 
    427 .. cmdoption:: -J
    428 
    429    Reserved for use by Jython_.
    430 
    431 .. _Jython: http://www.jython.org/
    432 
    433 .. cmdoption:: -U
    434 
    435    Turns all string literals into unicodes globally.  Do not be tempted to use
    436    this option as it will probably break your world.  It also produces
    437    ``.pyc`` files with a different magic number than normal.  Instead, you can
    438    enable unicode literals on a per-module basis by using::
    439 
    440         from __future__ import unicode_literals
    441 
    442    at the top of the file.  See :mod:`__future__` for details.
    443 
    444 .. cmdoption:: -X
    445 
    446     Reserved for alternative implementations of Python to use for their own
    447     purposes.
    448 
    449 .. _using-on-envvars:
    450 
    451 Environment variables
    452 ---------------------
    453 
    454 These environment variables influence Python's behavior, they are processed
    455 before the command-line switches other than -E.  It is customary that
    456 command-line switches override environmental variables where there is a
    457 conflict.
    458 
    459 .. envvar:: PYTHONHOME
    460 
    461    Change the location of the standard Python libraries.  By default, the
    462    libraries are searched in :file:`{prefix}/lib/python{version}` and
    463    :file:`{exec_prefix}/lib/python{version}`, where :file:`{prefix}` and
    464    :file:`{exec_prefix}` are installation-dependent directories, both defaulting
    465    to :file:`/usr/local`.
    466 
    467    When :envvar:`PYTHONHOME` is set to a single directory, its value replaces
    468    both :file:`{prefix}` and :file:`{exec_prefix}`.  To specify different values
    469    for these, set :envvar:`PYTHONHOME` to :file:`{prefix}:{exec_prefix}`.
    470 
    471 
    472 .. envvar:: PYTHONPATH
    473 
    474    Augment the default search path for module files.  The format is the same as
    475    the shell's :envvar:`PATH`: one or more directory pathnames separated by
    476    :data:`os.pathsep` (e.g. colons on Unix or semicolons on Windows).
    477    Non-existent directories are silently ignored.
    478 
    479    In addition to normal directories, individual :envvar:`PYTHONPATH` entries
    480    may refer to zipfiles containing pure Python modules (in either source or
    481    compiled form). Extension modules cannot be imported from zipfiles.
    482 
    483    The default search path is installation dependent, but generally begins with
    484    :file:`{prefix}/lib/python{version}` (see :envvar:`PYTHONHOME` above).  It
    485    is *always* appended to :envvar:`PYTHONPATH`.
    486 
    487    An additional directory will be inserted in the search path in front of
    488    :envvar:`PYTHONPATH` as described above under
    489    :ref:`using-on-interface-options`. The search path can be manipulated from
    490    within a Python program as the variable :data:`sys.path`.
    491 
    492 
    493 .. envvar:: PYTHONSTARTUP
    494 
    495    If this is the name of a readable file, the Python commands in that file are
    496    executed before the first prompt is displayed in interactive mode.  The file
    497    is executed in the same namespace where interactive commands are executed so
    498    that objects defined or imported in it can be used without qualification in
    499    the interactive session.  You can also change the prompts :data:`sys.ps1` and
    500    :data:`sys.ps2` in this file.
    501 
    502 
    503 .. envvar:: PYTHONY2K
    504 
    505    Set this to a non-empty string to cause the :mod:`time` module to require
    506    dates specified as strings to include 4-digit years, otherwise 2-digit years
    507    are converted based on rules described in the :mod:`time` module
    508    documentation.
    509 
    510 
    511 .. envvar:: PYTHONOPTIMIZE
    512 
    513    If this is set to a non-empty string it is equivalent to specifying the
    514    :option:`-O` option.  If set to an integer, it is equivalent to specifying
    515    :option:`-O` multiple times.
    516 
    517 
    518 .. envvar:: PYTHONDEBUG
    519 
    520    If this is set to a non-empty string it is equivalent to specifying the
    521    :option:`-d` option.  If set to an integer, it is equivalent to specifying
    522    :option:`-d` multiple times.
    523 
    524 
    525 .. envvar:: PYTHONINSPECT
    526 
    527    If this is set to a non-empty string it is equivalent to specifying the
    528    :option:`-i` option.
    529 
    530    This variable can also be modified by Python code using :data:`os.environ`
    531    to force inspect mode on program termination.
    532 
    533 
    534 .. envvar:: PYTHONUNBUFFERED
    535 
    536    If this is set to a non-empty string it is equivalent to specifying the
    537    :option:`-u` option.
    538 
    539 
    540 .. envvar:: PYTHONVERBOSE
    541 
    542    If this is set to a non-empty string it is equivalent to specifying the
    543    :option:`-v` option.  If set to an integer, it is equivalent to specifying
    544    :option:`-v` multiple times.
    545 
    546 
    547 .. envvar:: PYTHONCASEOK
    548 
    549    If this is set, Python ignores case in :keyword:`import` statements.  This
    550    only works on Windows, OS X, OS/2, and RiscOS.
    551 
    552 
    553 .. envvar:: PYTHONDONTWRITEBYTECODE
    554 
    555    If this is set, Python won't try to write ``.pyc`` or ``.pyo`` files on the
    556    import of source modules.  This is equivalent to specifying the :option:`-B`
    557    option.
    558 
    559    .. versionadded:: 2.6
    560 
    561 .. envvar:: PYTHONHASHSEED
    562 
    563    If this variable is set to ``random``, the effect is the same as specifying
    564    the :option:`-R` option: a random value is used to seed the hashes of str,
    565    bytes and datetime objects.
    566 
    567    If :envvar:`PYTHONHASHSEED` is set to an integer value, it is used as a
    568    fixed seed for generating the hash() of the types covered by the hash
    569    randomization.
    570 
    571    Its purpose is to allow repeatable hashing, such as for selftests for the
    572    interpreter itself, or to allow a cluster of python processes to share hash
    573    values.
    574 
    575    The integer must be a decimal number in the range [0,4294967295].
    576    Specifying the value 0 will lead to the same hash values as when hash
    577    randomization is disabled.
    578 
    579    .. versionadded:: 2.6.8
    580 
    581 
    582 .. envvar:: PYTHONIOENCODING
    583 
    584    Overrides the encoding used for stdin/stdout/stderr, in the syntax
    585    ``encodingname:errorhandler``.  The ``:errorhandler`` part is optional and
    586    has the same meaning as in :func:`str.encode`.
    587 
    588    .. versionadded:: 2.6
    589 
    590 
    591 .. envvar:: PYTHONNOUSERSITE
    592 
    593    If this is set, Python won't add the :data:`user site-packages directory
    594    <site.USER_SITE>` to :data:`sys.path`.
    595 
    596    .. versionadded:: 2.6
    597 
    598    .. seealso::
    599 
    600       :pep:`370` -- Per user site-packages directory
    601 
    602 
    603 .. envvar:: PYTHONUSERBASE
    604 
    605    Defines the :data:`user base directory <site.USER_BASE>`, which is used to
    606    compute the path of the :data:`user site-packages directory <site.USER_SITE>`
    607    and :ref:`Distutils installation paths <inst-alt-install-user>` for ``python
    608    setup.py install --user``.
    609 
    610    .. versionadded:: 2.6
    611 
    612    .. seealso::
    613 
    614       :pep:`370` -- Per user site-packages directory
    615 
    616 
    617 .. envvar:: PYTHONEXECUTABLE
    618 
    619    If this environment variable is set, ``sys.argv[0]`` will be set to its
    620    value instead of the value got through the C runtime.  Only works on
    621    Mac OS X.
    622 
    623 .. envvar:: PYTHONWARNINGS
    624 
    625    This is equivalent to the :option:`-W` option. If set to a comma
    626    separated string, it is equivalent to specifying :option:`-W` multiple
    627    times.
    628 
    629 
    630 .. envvar:: PYTHONHTTPSVERIFY
    631 
    632    If this environment variable is set specifically to ``0``, then it is
    633    equivalent to implicitly calling :func:`ssl._https_verify_certificates` with
    634    ``enable=False`` when :mod:`ssl` is first imported.
    635 
    636    Refer to the documentation of :func:`ssl._https_verify_certificates` for
    637    details.
    638 
    639    .. versionadded:: 2.7.12
    640 
    641 Debug-mode variables
    642 ~~~~~~~~~~~~~~~~~~~~
    643 
    644 Setting these variables only has an effect in a debug build of Python, that is,
    645 if Python was configured with the ``--with-pydebug`` build option.
    646 
    647 .. envvar:: PYTHONTHREADDEBUG
    648 
    649    If set, Python will print threading debug info.
    650 
    651    .. versionchanged:: 2.6
    652       Previously, this variable was called ``THREADDEBUG``.
    653 
    654 .. envvar:: PYTHONDUMPREFS
    655 
    656    If set, Python will dump objects and reference counts still alive after
    657    shutting down the interpreter.
    658 
    659 
    660 .. envvar:: PYTHONMALLOCSTATS
    661 
    662    If set, Python will print memory allocation statistics every time a new
    663    object arena is created, and on shutdown.
    664 
    665 .. envvar:: PYTHONSHOWALLOCCOUNT
    666 
    667    If set and Python was compiled with ``COUNT_ALLOCS`` defined, Python will
    668    dump allocations counts into stderr on shutdown.
    669 
    670    .. versionadded:: 2.7.15
    671 
    672 .. envvar:: PYTHONSHOWREFCOUNT
    673 
    674    If set, Python will print the total reference count when the program
    675    finishes or after each statement in the interactive interpreter.
    676 
    677    .. versionadded:: 2.7.15
    678