1.. highlight:: sh 2 3.. ATTENTION: You probably should update Misc/python.man, too, if you modify 4 this file. 5 6.. _using-on-general: 7 8Command line and environment 9============================ 10 11The CPython interpreter scans the command line and the environment for various 12settings. 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 22Command line 23------------ 24 25When invoking Python, you may specify any of these options:: 26 27 python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args] 28 29The 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 36Interface options 37~~~~~~~~~~~~~~~~~ 38 39The interpreter interface resembles that of the UNIX shell, but provides some 40additional 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 55In non-interactive mode, the entire input is parsed before it is executed. 56 57An interface option terminates the list of options consumed by the interpreter, 58all consecutive arguments will end up in :data:`sys.argv` -- note that the first 59element, subscript zero (``sys.argv[0]``), is a string reflecting the program's 60source. 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 .. audit-event:: cpython.run_command command cmdoption-c 74 75.. cmdoption:: -m <module-name> 76 77 Search :data:`sys.path` for the named module and execute its contents as 78 the :mod:`__main__` module. 79 80 Since the argument is a *module* name, you must not give a file extension 81 (``.py``). The module name should be a valid absolute Python module name, but 82 the implementation may not always enforce this (e.g. it may allow you to 83 use a name that includes a hyphen). 84 85 Package names (including namespace packages) are also permitted. When a 86 package name is supplied instead 87 of a normal module, the interpreter will execute ``<pkg>.__main__`` as 88 the main module. This behaviour is deliberately similar to the handling 89 of directories and zipfiles that are passed to the interpreter as the 90 script argument. 91 92 .. note:: 93 94 This option cannot be used with built-in modules and extension modules 95 written in C, since they do not have Python module files. However, it 96 can still be used for precompiled modules, even if the original source 97 file is not available. 98 99 If this option is given, the first element of :data:`sys.argv` will be the 100 full path to the module file (while the module file is being located, the 101 first element will be set to ``"-m"``). As with the :option:`-c` option, 102 the current directory will be added to the start of :data:`sys.path`. 103 104 :option:`-I` option can be used to run the script in isolated mode where 105 :data:`sys.path` contains neither the current directory nor the user's 106 site-packages directory. All :envvar:`PYTHON*` environment variables are 107 ignored, too. 108 109 Many standard library modules contain code that is invoked on their execution 110 as a script. An example is the :mod:`timeit` module:: 111 112 python -m timeit -s 'setup here' 'benchmarked code here' 113 python -m timeit -h # for details 114 115 .. audit-event:: cpython.run_module module-name cmdoption-m 116 117 .. seealso:: 118 :func:`runpy.run_module` 119 Equivalent functionality directly available to Python code 120 121 :pep:`338` -- Executing modules as scripts 122 123 .. versionchanged:: 3.1 124 Supply the package name to run a ``__main__`` submodule. 125 126 .. versionchanged:: 3.4 127 namespace packages are also supported 128 129.. _cmdarg-dash: 130 131.. describe:: - 132 133 Read commands from standard input (:data:`sys.stdin`). If standard input is 134 a terminal, :option:`-i` is implied. 135 136 If this option is given, the first element of :data:`sys.argv` will be 137 ``"-"`` and the current directory will be added to the start of 138 :data:`sys.path`. 139 140 .. audit-event:: cpython.run_stdin "" "" 141 142.. _cmdarg-script: 143 144.. describe:: <script> 145 146 Execute the Python code contained in *script*, which must be a filesystem 147 path (absolute or relative) referring to either a Python file, a directory 148 containing a ``__main__.py`` file, or a zipfile containing a 149 ``__main__.py`` file. 150 151 If this option is given, the first element of :data:`sys.argv` will be the 152 script name as given on the command line. 153 154 If the script name refers directly to a Python file, the directory 155 containing that file is added to the start of :data:`sys.path`, and the 156 file is executed as the :mod:`__main__` module. 157 158 If the script name refers to a directory or zipfile, the script name is 159 added to the start of :data:`sys.path` and the ``__main__.py`` file in 160 that location is executed as the :mod:`__main__` module. 161 162 :option:`-I` option can be used to run the script in isolated mode where 163 :data:`sys.path` contains neither the script's directory nor the user's 164 site-packages directory. All :envvar:`PYTHON*` environment variables are 165 ignored, too. 166 167 .. audit-event:: cpython.run_file filename 168 169 .. seealso:: 170 :func:`runpy.run_path` 171 Equivalent functionality directly available to Python code 172 173 174If no interface option is given, :option:`-i` is implied, ``sys.argv[0]`` is 175an empty string (``""``) and the current directory will be added to the 176start of :data:`sys.path`. Also, tab-completion and history editing is 177automatically enabled, if available on your platform (see 178:ref:`rlcompleter-config`). 179 180.. seealso:: :ref:`tut-invoking` 181 182.. versionchanged:: 3.4 183 Automatic enabling of tab-completion and history editing. 184 185 186Generic options 187~~~~~~~~~~~~~~~ 188 189.. cmdoption:: -? 190 -h 191 --help 192 193 Print a short description of all command line options. 194 195 196.. cmdoption:: -V 197 --version 198 199 Print the Python version number and exit. Example output could be: 200 201 .. code-block:: none 202 203 Python 3.8.0b2+ 204 205 When given twice, print more information about the build, like: 206 207 .. code-block:: none 208 209 Python 3.8.0b2+ (3.8:0c076caaa8, Apr 20 2019, 21:55:00) 210 [GCC 6.2.0 20161005] 211 212 .. versionadded:: 3.6 213 The ``-VV`` option. 214 215.. _using-on-misc-options: 216 217Miscellaneous options 218~~~~~~~~~~~~~~~~~~~~~ 219 220.. cmdoption:: -b 221 222 Issue a warning when comparing :class:`bytes` or :class:`bytearray` with 223 :class:`str` or :class:`bytes` with :class:`int`. Issue an error when the 224 option is given twice (:option:`!-bb`). 225 226 .. versionchanged:: 3.5 227 Affects comparisons of :class:`bytes` with :class:`int`. 228 229.. cmdoption:: -B 230 231 If given, Python won't try to write ``.pyc`` files on the 232 import of source modules. See also :envvar:`PYTHONDONTWRITEBYTECODE`. 233 234 235.. cmdoption:: --check-hash-based-pycs default|always|never 236 237 Control the validation behavior of hash-based ``.pyc`` files. See 238 :ref:`pyc-invalidation`. When set to ``default``, checked and unchecked 239 hash-based bytecode cache files are validated according to their default 240 semantics. When set to ``always``, all hash-based ``.pyc`` files, whether 241 checked or unchecked, are validated against their corresponding source 242 file. When set to ``never``, hash-based ``.pyc`` files are not validated 243 against their corresponding source files. 244 245 The semantics of timestamp-based ``.pyc`` files are unaffected by this 246 option. 247 248 249.. cmdoption:: -d 250 251 Turn on parser debugging output (for expert only, depending on compilation 252 options). See also :envvar:`PYTHONDEBUG`. 253 254 255.. cmdoption:: -E 256 257 Ignore all :envvar:`PYTHON*` environment variables, e.g. 258 :envvar:`PYTHONPATH` and :envvar:`PYTHONHOME`, that might be set. 259 260 261.. cmdoption:: -i 262 263 When a script is passed as first argument or the :option:`-c` option is used, 264 enter interactive mode after executing the script or the command, even when 265 :data:`sys.stdin` does not appear to be a terminal. The 266 :envvar:`PYTHONSTARTUP` file is not read. 267 268 This can be useful to inspect global variables or a stack trace when a script 269 raises an exception. See also :envvar:`PYTHONINSPECT`. 270 271 272.. cmdoption:: -I 273 274 Run Python in isolated mode. This also implies -E and -s. 275 In isolated mode :data:`sys.path` contains neither the script's directory nor 276 the user's site-packages directory. All :envvar:`PYTHON*` environment 277 variables are ignored, too. Further restrictions may be imposed to prevent 278 the user from injecting malicious code. 279 280 .. versionadded:: 3.4 281 282 283.. cmdoption:: -O 284 285 Remove assert statements and any code conditional on the value of 286 :const:`__debug__`. Augment the filename for compiled 287 (:term:`bytecode`) files by adding ``.opt-1`` before the ``.pyc`` 288 extension (see :pep:`488`). See also :envvar:`PYTHONOPTIMIZE`. 289 290 .. versionchanged:: 3.5 291 Modify ``.pyc`` filenames according to :pep:`488`. 292 293 294.. cmdoption:: -OO 295 296 Do :option:`-O` and also discard docstrings. Augment the filename 297 for compiled (:term:`bytecode`) files by adding ``.opt-2`` before the 298 ``.pyc`` extension (see :pep:`488`). 299 300 .. versionchanged:: 3.5 301 Modify ``.pyc`` filenames according to :pep:`488`. 302 303 304.. cmdoption:: -q 305 306 Don't display the copyright and version messages even in interactive mode. 307 308 .. versionadded:: 3.2 309 310 311.. cmdoption:: -R 312 313 Turn on hash randomization. This option only has an effect if the 314 :envvar:`PYTHONHASHSEED` environment variable is set to ``0``, since hash 315 randomization is enabled by default. 316 317 On previous versions of Python, this option turns on hash randomization, 318 so that the :meth:`__hash__` values of str and bytes objects 319 are "salted" with an unpredictable random value. Although they remain 320 constant within an individual Python process, they are not predictable 321 between repeated invocations of Python. 322 323 Hash randomization is intended to provide protection against a 324 denial-of-service caused by carefully-chosen inputs that exploit the worst 325 case performance of a dict construction, O(n^2) complexity. See 326 http://www.ocert.org/advisories/ocert-2011-003.html for details. 327 328 :envvar:`PYTHONHASHSEED` allows you to set a fixed value for the hash 329 seed secret. 330 331 .. versionchanged:: 3.7 332 The option is no longer ignored. 333 334 .. versionadded:: 3.2.3 335 336 337.. cmdoption:: -s 338 339 Don't add the :data:`user site-packages directory <site.USER_SITE>` to 340 :data:`sys.path`. 341 342 .. seealso:: 343 344 :pep:`370` -- Per user site-packages directory 345 346 347.. cmdoption:: -S 348 349 Disable the import of the module :mod:`site` and the site-dependent 350 manipulations of :data:`sys.path` that it entails. Also disable these 351 manipulations if :mod:`site` is explicitly imported later (call 352 :func:`site.main` if you want them to be triggered). 353 354 355.. cmdoption:: -u 356 357 Force the stdout and stderr streams to be unbuffered. This option has no 358 effect on the stdin stream. 359 360 See also :envvar:`PYTHONUNBUFFERED`. 361 362 .. versionchanged:: 3.7 363 The text layer of the stdout and stderr streams now is unbuffered. 364 365 366.. cmdoption:: -v 367 368 Print a message each time a module is initialized, showing the place 369 (filename or built-in module) from which it is loaded. When given twice 370 (:option:`!-vv`), print a message for each file that is checked for when 371 searching for a module. Also provides information on module cleanup at exit. 372 See also :envvar:`PYTHONVERBOSE`. 373 374 375.. _using-on-warnings: 376.. cmdoption:: -W arg 377 378 Warning control. Python's warning machinery by default prints warning 379 messages to :data:`sys.stderr`. A typical warning message has the following 380 form: 381 382 .. code-block:: none 383 384 file:line: category: message 385 386 By default, each warning is printed once for each source line where it 387 occurs. This option controls how often warnings are printed. 388 389 Multiple :option:`-W` options may be given; when a warning matches more than 390 one option, the action for the last matching option is performed. Invalid 391 :option:`-W` options are ignored (though, a warning message is printed about 392 invalid options when the first warning is issued). 393 394 Warnings can also be controlled using the :envvar:`PYTHONWARNINGS` 395 environment variable and from within a Python program using the 396 :mod:`warnings` module. 397 398 The simplest settings apply a particular action unconditionally to all 399 warnings emitted by a process (even those that are otherwise ignored by 400 default):: 401 402 -Wdefault # Warn once per call location 403 -Werror # Convert to exceptions 404 -Walways # Warn every time 405 -Wmodule # Warn once per calling module 406 -Wonce # Warn once per Python process 407 -Wignore # Never warn 408 409 The action names can be abbreviated as desired (e.g. ``-Wi``, ``-Wd``, 410 ``-Wa``, ``-We``) and the interpreter will resolve them to the appropriate 411 action name. 412 413 See :ref:`warning-filter` and :ref:`describing-warning-filters` for more 414 details. 415 416 417.. cmdoption:: -x 418 419 Skip the first line of the source, allowing use of non-Unix forms of 420 ``#!cmd``. This is intended for a DOS specific hack only. 421 422 423.. cmdoption:: -X 424 425 Reserved for various implementation-specific options. CPython currently 426 defines the following possible values: 427 428 * ``-X faulthandler`` to enable :mod:`faulthandler`; 429 * ``-X oldparser``: enable the traditional LL(1) parser. See also 430 :envvar:`PYTHONOLDPARSER` and :pep:`617`. 431 * ``-X showrefcount`` to output the total reference count and number of used 432 memory blocks when the program finishes or after each statement in the 433 interactive interpreter. This only works on debug builds. 434 * ``-X tracemalloc`` to start tracing Python memory allocations using the 435 :mod:`tracemalloc` module. By default, only the most recent frame is 436 stored in a traceback of a trace. Use ``-X tracemalloc=NFRAME`` to start 437 tracing with a traceback limit of *NFRAME* frames. See the 438 :func:`tracemalloc.start` for more information. 439 * ``-X importtime`` to show how long each import takes. It shows module 440 name, cumulative time (including nested imports) and self time (excluding 441 nested imports). Note that its output may be broken in multi-threaded 442 application. Typical usage is ``python3 -X importtime -c 'import 443 asyncio'``. See also :envvar:`PYTHONPROFILEIMPORTTIME`. 444 * ``-X dev``: enable :ref:`Python Development Mode <devmode>`, introducing 445 additional runtime checks that are too expensive to be enabled by 446 default. 447 * ``-X utf8`` enables UTF-8 mode for operating system interfaces, overriding 448 the default locale-aware mode. ``-X utf8=0`` explicitly disables UTF-8 449 mode (even when it would otherwise activate automatically). 450 See :envvar:`PYTHONUTF8` for more details. 451 * ``-X pycache_prefix=PATH`` enables writing ``.pyc`` files to a parallel 452 tree rooted at the given directory instead of to the code tree. See also 453 :envvar:`PYTHONPYCACHEPREFIX`. 454 455 It also allows passing arbitrary values and retrieving them through the 456 :data:`sys._xoptions` dictionary. 457 458 .. versionchanged:: 3.2 459 The :option:`-X` option was added. 460 461 .. versionadded:: 3.3 462 The ``-X faulthandler`` option. 463 464 .. versionadded:: 3.4 465 The ``-X showrefcount`` and ``-X tracemalloc`` options. 466 467 .. versionadded:: 3.6 468 The ``-X showalloccount`` option. 469 470 .. versionadded:: 3.7 471 The ``-X importtime``, ``-X dev`` and ``-X utf8`` options. 472 473 .. versionadded:: 3.8 474 The ``-X pycache_prefix`` option. The ``-X dev`` option now logs 475 ``close()`` exceptions in :class:`io.IOBase` destructor. 476 477 .. versionchanged:: 3.9 478 Using ``-X dev`` option, check *encoding* and *errors* arguments on 479 string encoding and decoding operations. 480 481 The ``-X showalloccount`` option has been removed. 482 483 .. deprecated-removed:: 3.9 3.10 484 The ``-X oldparser`` option. 485 486 487Options you shouldn't use 488~~~~~~~~~~~~~~~~~~~~~~~~~ 489 490.. cmdoption:: -J 491 492 Reserved for use by Jython_. 493 494.. _Jython: http://www.jython.org/ 495 496 497.. _using-on-envvars: 498 499Environment variables 500--------------------- 501 502These environment variables influence Python's behavior, they are processed 503before the command-line switches other than -E or -I. It is customary that 504command-line switches override environmental variables where there is a 505conflict. 506 507.. envvar:: PYTHONHOME 508 509 Change the location of the standard Python libraries. By default, the 510 libraries are searched in :file:`{prefix}/lib/python{version}` and 511 :file:`{exec_prefix}/lib/python{version}`, where :file:`{prefix}` and 512 :file:`{exec_prefix}` are installation-dependent directories, both defaulting 513 to :file:`/usr/local`. 514 515 When :envvar:`PYTHONHOME` is set to a single directory, its value replaces 516 both :file:`{prefix}` and :file:`{exec_prefix}`. To specify different values 517 for these, set :envvar:`PYTHONHOME` to :file:`{prefix}:{exec_prefix}`. 518 519 520.. envvar:: PYTHONPATH 521 522 Augment the default search path for module files. The format is the same as 523 the shell's :envvar:`PATH`: one or more directory pathnames separated by 524 :data:`os.pathsep` (e.g. colons on Unix or semicolons on Windows). 525 Non-existent directories are silently ignored. 526 527 In addition to normal directories, individual :envvar:`PYTHONPATH` entries 528 may refer to zipfiles containing pure Python modules (in either source or 529 compiled form). Extension modules cannot be imported from zipfiles. 530 531 The default search path is installation dependent, but generally begins with 532 :file:`{prefix}/lib/python{version}` (see :envvar:`PYTHONHOME` above). It 533 is *always* appended to :envvar:`PYTHONPATH`. 534 535 An additional directory will be inserted in the search path in front of 536 :envvar:`PYTHONPATH` as described above under 537 :ref:`using-on-interface-options`. The search path can be manipulated from 538 within a Python program as the variable :data:`sys.path`. 539 540 541.. envvar:: PYTHONPLATLIBDIR 542 543 If this is set to a non-empty string, it overrides the :data:`sys.platlibdir` 544 value. 545 546 .. versionadded:: 3.9 547 548 549.. envvar:: PYTHONSTARTUP 550 551 If this is the name of a readable file, the Python commands in that file are 552 executed before the first prompt is displayed in interactive mode. The file 553 is executed in the same namespace where interactive commands are executed so 554 that objects defined or imported in it can be used without qualification in 555 the interactive session. You can also change the prompts :data:`sys.ps1` and 556 :data:`sys.ps2` and the hook :data:`sys.__interactivehook__` in this file. 557 558 .. audit-event:: cpython.run_startup filename envvar-PYTHONSTARTUP 559 560 Raises an :ref:`auditing event <auditing>` ``cpython.run_startup`` with 561 the filename as the argument when called on startup. 562 563 564.. envvar:: PYTHONOPTIMIZE 565 566 If this is set to a non-empty string it is equivalent to specifying the 567 :option:`-O` option. If set to an integer, it is equivalent to specifying 568 :option:`-O` multiple times. 569 570 571.. envvar:: PYTHONBREAKPOINT 572 573 If this is set, it names a callable using dotted-path notation. The module 574 containing the callable will be imported and then the callable will be run 575 by the default implementation of :func:`sys.breakpointhook` which itself is 576 called by built-in :func:`breakpoint`. If not set, or set to the empty 577 string, it is equivalent to the value "pdb.set_trace". Setting this to the 578 string "0" causes the default implementation of :func:`sys.breakpointhook` 579 to do nothing but return immediately. 580 581 .. versionadded:: 3.7 582 583.. envvar:: PYTHONDEBUG 584 585 If this is set to a non-empty string it is equivalent to specifying the 586 :option:`-d` option. If set to an integer, it is equivalent to specifying 587 :option:`-d` multiple times. 588 589 590.. envvar:: PYTHONOLDPARSER 591 592 If this is set to a non-empty string, enable the traditional LL(1) parser. 593 594 See also the :option:`-X` ``oldparser`` option and :pep:`617`. 595 596 .. deprecated-removed:: 3.9 3.10 597 598 599.. envvar:: PYTHONINSPECT 600 601 If this is set to a non-empty string it is equivalent to specifying the 602 :option:`-i` option. 603 604 This variable can also be modified by Python code using :data:`os.environ` 605 to force inspect mode on program termination. 606 607 608.. envvar:: PYTHONUNBUFFERED 609 610 If this is set to a non-empty string it is equivalent to specifying the 611 :option:`-u` option. 612 613 614.. envvar:: PYTHONVERBOSE 615 616 If this is set to a non-empty string it is equivalent to specifying the 617 :option:`-v` option. If set to an integer, it is equivalent to specifying 618 :option:`-v` multiple times. 619 620 621.. envvar:: PYTHONCASEOK 622 623 If this is set, Python ignores case in :keyword:`import` statements. This 624 only works on Windows and OS X. 625 626 627.. envvar:: PYTHONDONTWRITEBYTECODE 628 629 If this is set to a non-empty string, Python won't try to write ``.pyc`` 630 files on the import of source modules. This is equivalent to 631 specifying the :option:`-B` option. 632 633 634.. envvar:: PYTHONPYCACHEPREFIX 635 636 If this is set, Python will write ``.pyc`` files in a mirror directory tree 637 at this path, instead of in ``__pycache__`` directories within the source 638 tree. This is equivalent to specifying the :option:`-X` 639 ``pycache_prefix=PATH`` option. 640 641 .. versionadded:: 3.8 642 643 644.. envvar:: PYTHONHASHSEED 645 646 If this variable is not set or set to ``random``, a random value is used 647 to seed the hashes of str and bytes objects. 648 649 If :envvar:`PYTHONHASHSEED` is set to an integer value, it is used as a fixed 650 seed for generating the hash() of the types covered by the hash 651 randomization. 652 653 Its purpose is to allow repeatable hashing, such as for selftests for the 654 interpreter itself, or to allow a cluster of python processes to share hash 655 values. 656 657 The integer must be a decimal number in the range [0,4294967295]. Specifying 658 the value 0 will disable hash randomization. 659 660 .. versionadded:: 3.2.3 661 662 663.. envvar:: PYTHONIOENCODING 664 665 If this is set before running the interpreter, it overrides the encoding used 666 for stdin/stdout/stderr, in the syntax ``encodingname:errorhandler``. Both 667 the ``encodingname`` and the ``:errorhandler`` parts are optional and have 668 the same meaning as in :func:`str.encode`. 669 670 For stderr, the ``:errorhandler`` part is ignored; the handler will always be 671 ``'backslashreplace'``. 672 673 .. versionchanged:: 3.4 674 The ``encodingname`` part is now optional. 675 676 .. versionchanged:: 3.6 677 On Windows, the encoding specified by this variable is ignored for interactive 678 console buffers unless :envvar:`PYTHONLEGACYWINDOWSSTDIO` is also specified. 679 Files and pipes redirected through the standard streams are not affected. 680 681.. envvar:: PYTHONNOUSERSITE 682 683 If this is set, Python won't add the :data:`user site-packages directory 684 <site.USER_SITE>` to :data:`sys.path`. 685 686 .. seealso:: 687 688 :pep:`370` -- Per user site-packages directory 689 690 691.. envvar:: PYTHONUSERBASE 692 693 Defines the :data:`user base directory <site.USER_BASE>`, which is used to 694 compute the path of the :data:`user site-packages directory <site.USER_SITE>` 695 and :ref:`Distutils installation paths <inst-alt-install-user>` for 696 ``python setup.py install --user``. 697 698 .. seealso:: 699 700 :pep:`370` -- Per user site-packages directory 701 702 703.. envvar:: PYTHONEXECUTABLE 704 705 If this environment variable is set, ``sys.argv[0]`` will be set to its 706 value instead of the value got through the C runtime. Only works on 707 Mac OS X. 708 709.. envvar:: PYTHONWARNINGS 710 711 This is equivalent to the :option:`-W` option. If set to a comma 712 separated string, it is equivalent to specifying :option:`-W` multiple 713 times, with filters later in the list taking precedence over those earlier 714 in the list. 715 716 The simplest settings apply a particular action unconditionally to all 717 warnings emitted by a process (even those that are otherwise ignored by 718 default):: 719 720 PYTHONWARNINGS=default # Warn once per call location 721 PYTHONWARNINGS=error # Convert to exceptions 722 PYTHONWARNINGS=always # Warn every time 723 PYTHONWARNINGS=module # Warn once per calling module 724 PYTHONWARNINGS=once # Warn once per Python process 725 PYTHONWARNINGS=ignore # Never warn 726 727 See :ref:`warning-filter` and :ref:`describing-warning-filters` for more 728 details. 729 730 731.. envvar:: PYTHONFAULTHANDLER 732 733 If this environment variable is set to a non-empty string, 734 :func:`faulthandler.enable` is called at startup: install a handler for 735 :const:`SIGSEGV`, :const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` and 736 :const:`SIGILL` signals to dump the Python traceback. This is equivalent to 737 :option:`-X` ``faulthandler`` option. 738 739 .. versionadded:: 3.3 740 741 742.. envvar:: PYTHONTRACEMALLOC 743 744 If this environment variable is set to a non-empty string, start tracing 745 Python memory allocations using the :mod:`tracemalloc` module. The value of 746 the variable is the maximum number of frames stored in a traceback of a 747 trace. For example, ``PYTHONTRACEMALLOC=1`` stores only the most recent 748 frame. See the :func:`tracemalloc.start` for more information. 749 750 .. versionadded:: 3.4 751 752 753.. envvar:: PYTHONPROFILEIMPORTTIME 754 755 If this environment variable is set to a non-empty string, Python will 756 show how long each import takes. This is exactly equivalent to setting 757 ``-X importtime`` on the command line. 758 759 .. versionadded:: 3.7 760 761 762.. envvar:: PYTHONASYNCIODEBUG 763 764 If this environment variable is set to a non-empty string, enable the 765 :ref:`debug mode <asyncio-debug-mode>` of the :mod:`asyncio` module. 766 767 .. versionadded:: 3.4 768 769 770.. envvar:: PYTHONMALLOC 771 772 Set the Python memory allocators and/or install debug hooks. 773 774 Set the family of memory allocators used by Python: 775 776 * ``default``: use the :ref:`default memory allocators 777 <default-memory-allocators>`. 778 * ``malloc``: use the :c:func:`malloc` function of the C library 779 for all domains (:c:data:`PYMEM_DOMAIN_RAW`, :c:data:`PYMEM_DOMAIN_MEM`, 780 :c:data:`PYMEM_DOMAIN_OBJ`). 781 * ``pymalloc``: use the :ref:`pymalloc allocator <pymalloc>` for 782 :c:data:`PYMEM_DOMAIN_MEM` and :c:data:`PYMEM_DOMAIN_OBJ` domains and use 783 the :c:func:`malloc` function for the :c:data:`PYMEM_DOMAIN_RAW` domain. 784 785 Install debug hooks: 786 787 * ``debug``: install debug hooks on top of the :ref:`default memory 788 allocators <default-memory-allocators>`. 789 * ``malloc_debug``: same as ``malloc`` but also install debug hooks. 790 * ``pymalloc_debug``: same as ``pymalloc`` but also install debug hooks. 791 792 See the :ref:`default memory allocators <default-memory-allocators>` and the 793 :c:func:`PyMem_SetupDebugHooks` function (install debug hooks on Python 794 memory allocators). 795 796 .. versionchanged:: 3.7 797 Added the ``"default"`` allocator. 798 799 .. versionadded:: 3.6 800 801 802.. envvar:: PYTHONMALLOCSTATS 803 804 If set to a non-empty string, Python will print statistics of the 805 :ref:`pymalloc memory allocator <pymalloc>` every time a new pymalloc object 806 arena is created, and on shutdown. 807 808 This variable is ignored if the :envvar:`PYTHONMALLOC` environment variable 809 is used to force the :c:func:`malloc` allocator of the C library, or if 810 Python is configured without ``pymalloc`` support. 811 812 .. versionchanged:: 3.6 813 This variable can now also be used on Python compiled in release mode. 814 It now has no effect if set to an empty string. 815 816 817.. envvar:: PYTHONLEGACYWINDOWSFSENCODING 818 819 If set to a non-empty string, the default filesystem encoding and errors mode 820 will revert to their pre-3.6 values of 'mbcs' and 'replace', respectively. 821 Otherwise, the new defaults 'utf-8' and 'surrogatepass' are used. 822 823 This may also be enabled at runtime with 824 :func:`sys._enablelegacywindowsfsencoding()`. 825 826 .. availability:: Windows. 827 828 .. versionadded:: 3.6 829 See :pep:`529` for more details. 830 831.. envvar:: PYTHONLEGACYWINDOWSSTDIO 832 833 If set to a non-empty string, does not use the new console reader and 834 writer. This means that Unicode characters will be encoded according to 835 the active console code page, rather than using utf-8. 836 837 This variable is ignored if the standard streams are redirected (to files 838 or pipes) rather than referring to console buffers. 839 840 .. availability:: Windows. 841 842 .. versionadded:: 3.6 843 844 845.. envvar:: PYTHONCOERCECLOCALE 846 847 If set to the value ``0``, causes the main Python command line application 848 to skip coercing the legacy ASCII-based C and POSIX locales to a more 849 capable UTF-8 based alternative. 850 851 If this variable is *not* set (or is set to a value other than ``0``), the 852 ``LC_ALL`` locale override environment variable is also not set, and the 853 current locale reported for the ``LC_CTYPE`` category is either the default 854 ``C`` locale, or else the explicitly ASCII-based ``POSIX`` locale, then the 855 Python CLI will attempt to configure the following locales for the 856 ``LC_CTYPE`` category in the order listed before loading the interpreter 857 runtime: 858 859 * ``C.UTF-8`` 860 * ``C.utf8`` 861 * ``UTF-8`` 862 863 If setting one of these locale categories succeeds, then the ``LC_CTYPE`` 864 environment variable will also be set accordingly in the current process 865 environment before the Python runtime is initialized. This ensures that in 866 addition to being seen by both the interpreter itself and other locale-aware 867 components running in the same process (such as the GNU ``readline`` 868 library), the updated setting is also seen in subprocesses (regardless of 869 whether or not those processes are running a Python interpreter), as well as 870 in operations that query the environment rather than the current C locale 871 (such as Python's own :func:`locale.getdefaultlocale`). 872 873 Configuring one of these locales (either explicitly or via the above 874 implicit locale coercion) automatically enables the ``surrogateescape`` 875 :ref:`error handler <error-handlers>` for :data:`sys.stdin` and 876 :data:`sys.stdout` (:data:`sys.stderr` continues to use ``backslashreplace`` 877 as it does in any other locale). This stream handling behavior can be 878 overridden using :envvar:`PYTHONIOENCODING` as usual. 879 880 For debugging purposes, setting ``PYTHONCOERCECLOCALE=warn`` will cause 881 Python to emit warning messages on ``stderr`` if either the locale coercion 882 activates, or else if a locale that *would* have triggered coercion is 883 still active when the Python runtime is initialized. 884 885 Also note that even when locale coercion is disabled, or when it fails to 886 find a suitable target locale, :envvar:`PYTHONUTF8` will still activate by 887 default in legacy ASCII-based locales. Both features must be disabled in 888 order to force the interpreter to use ``ASCII`` instead of ``UTF-8`` for 889 system interfaces. 890 891 .. availability:: \*nix. 892 893 .. versionadded:: 3.7 894 See :pep:`538` for more details. 895 896 897.. envvar:: PYTHONDEVMODE 898 899 If this environment variable is set to a non-empty string, enable 900 :ref:`Python Development Mode <devmode>`, introducing additional runtime 901 checks that are too expensive to be enabled by default. 902 903 .. versionadded:: 3.7 904 905.. envvar:: PYTHONUTF8 906 907 If set to ``1``, enables the interpreter's UTF-8 mode, where ``UTF-8`` is 908 used as the text encoding for system interfaces, regardless of the 909 current locale setting. 910 911 This means that: 912 913 * :func:`sys.getfilesystemencoding()` returns ``'UTF-8'`` (the locale 914 encoding is ignored). 915 * :func:`locale.getpreferredencoding()` returns ``'UTF-8'`` (the locale 916 encoding is ignored, and the function's ``do_setlocale`` parameter has no 917 effect). 918 * :data:`sys.stdin`, :data:`sys.stdout`, and :data:`sys.stderr` all use 919 UTF-8 as their text encoding, with the ``surrogateescape`` 920 :ref:`error handler <error-handlers>` being enabled for :data:`sys.stdin` 921 and :data:`sys.stdout` (:data:`sys.stderr` continues to use 922 ``backslashreplace`` as it does in the default locale-aware mode) 923 924 As a consequence of the changes in those lower level APIs, other higher 925 level APIs also exhibit different default behaviours: 926 927 * Command line arguments, environment variables and filenames are decoded 928 to text using the UTF-8 encoding. 929 * :func:`os.fsdecode()` and :func:`os.fsencode()` use the UTF-8 encoding. 930 * :func:`open()`, :func:`io.open()`, and :func:`codecs.open()` use the UTF-8 931 encoding by default. However, they still use the strict error handler by 932 default so that attempting to open a binary file in text mode is likely 933 to raise an exception rather than producing nonsense data. 934 935 Note that the standard stream settings in UTF-8 mode can be overridden by 936 :envvar:`PYTHONIOENCODING` (just as they can be in the default locale-aware 937 mode). 938 939 If set to ``0``, the interpreter runs in its default locale-aware mode. 940 941 Setting any other non-empty string causes an error during interpreter 942 initialisation. 943 944 If this environment variable is not set at all, then the interpreter defaults 945 to using the current locale settings, *unless* the current locale is 946 identified as a legacy ASCII-based locale 947 (as described for :envvar:`PYTHONCOERCECLOCALE`), and locale coercion is 948 either disabled or fails. In such legacy locales, the interpreter will 949 default to enabling UTF-8 mode unless explicitly instructed not to do so. 950 951 Also available as the :option:`-X` ``utf8`` option. 952 953 .. versionadded:: 3.7 954 See :pep:`540` for more details. 955 956 957Debug-mode variables 958~~~~~~~~~~~~~~~~~~~~ 959 960Setting these variables only has an effect in a debug build of Python. 961 962.. envvar:: PYTHONTHREADDEBUG 963 964 If set, Python will print threading debug info. 965 966 Need Python configured with the ``--with-pydebug`` build option. 967 968 969.. envvar:: PYTHONDUMPREFS 970 971 If set, Python will dump objects and reference counts still alive after 972 shutting down the interpreter. 973 974 Need Python configured with the ``--with-trace-refs`` build option. 975