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
186.. _using-on-generic-options:
187
188Generic options
189~~~~~~~~~~~~~~~
190
191.. cmdoption:: -?
192               -h
193               --help
194
195   Print a short description of all command line options and corresponding
196   environment variables and exit.
197
198.. cmdoption:: --help-env
199
200   Print a short description of Python-specific environment variables
201   and exit.
202
203   .. versionadded:: 3.11
204
205.. cmdoption:: --help-xoptions
206
207   Print a description of implementation-specific :option:`-X` options
208   and exit.
209
210   .. versionadded:: 3.11
211
212.. cmdoption:: --help-all
213
214   Print complete usage information and exit.
215
216   .. versionadded:: 3.11
217
218.. cmdoption:: -V
219               --version
220
221   Print the Python version number and exit.  Example output could be:
222
223   .. code-block:: none
224
225       Python 3.8.0b2+
226
227   When given twice, print more information about the build, like:
228
229   .. code-block:: none
230
231       Python 3.8.0b2+ (3.8:0c076caaa8, Apr 20 2019, 21:55:00)
232       [GCC 6.2.0 20161005]
233
234   .. versionadded:: 3.6
235      The ``-VV`` option.
236
237
238.. _using-on-misc-options:
239
240Miscellaneous options
241~~~~~~~~~~~~~~~~~~~~~
242
243.. cmdoption:: -b
244
245   Issue a warning when comparing :class:`bytes` or :class:`bytearray` with
246   :class:`str` or :class:`bytes` with :class:`int`.  Issue an error when the
247   option is given twice (:option:`!-bb`).
248
249   .. versionchanged:: 3.5
250      Affects comparisons of :class:`bytes` with :class:`int`.
251
252.. cmdoption:: -B
253
254   If given, Python won't try to write ``.pyc`` files on the
255   import of source modules.  See also :envvar:`PYTHONDONTWRITEBYTECODE`.
256
257
258.. cmdoption:: --check-hash-based-pycs default|always|never
259
260   Control the validation behavior of hash-based ``.pyc`` files. See
261   :ref:`pyc-invalidation`. When set to ``default``, checked and unchecked
262   hash-based bytecode cache files are validated according to their default
263   semantics. When set to ``always``, all hash-based ``.pyc`` files, whether
264   checked or unchecked, are validated against their corresponding source
265   file. When set to ``never``, hash-based ``.pyc`` files are not validated
266   against their corresponding source files.
267
268   The semantics of timestamp-based ``.pyc`` files are unaffected by this
269   option.
270
271
272.. cmdoption:: -d
273
274   Turn on parser debugging output (for expert only, depending on compilation
275   options).  See also :envvar:`PYTHONDEBUG`.
276
277
278.. cmdoption:: -E
279
280   Ignore all :envvar:`PYTHON*` environment variables, e.g.
281   :envvar:`PYTHONPATH` and :envvar:`PYTHONHOME`, that might be set.
282
283   See also the :option:`-P` and :option:`-I` (isolated) options.
284
285
286.. cmdoption:: -i
287
288   When a script is passed as first argument or the :option:`-c` option is used,
289   enter interactive mode after executing the script or the command, even when
290   :data:`sys.stdin` does not appear to be a terminal.  The
291   :envvar:`PYTHONSTARTUP` file is not read.
292
293   This can be useful to inspect global variables or a stack trace when a script
294   raises an exception.  See also :envvar:`PYTHONINSPECT`.
295
296
297.. cmdoption:: -I
298
299   Run Python in isolated mode. This also implies :option:`-E`, :option:`-P`
300   and :option:`-s` options.
301
302   In isolated mode :data:`sys.path` contains neither the script's directory nor
303   the user's site-packages directory. All :envvar:`PYTHON*` environment
304   variables are ignored, too. Further restrictions may be imposed to prevent
305   the user from injecting malicious code.
306
307   .. versionadded:: 3.4
308
309
310.. cmdoption:: -O
311
312   Remove assert statements and any code conditional on the value of
313   :const:`__debug__`.  Augment the filename for compiled
314   (:term:`bytecode`) files by adding ``.opt-1`` before the ``.pyc``
315   extension (see :pep:`488`).  See also :envvar:`PYTHONOPTIMIZE`.
316
317   .. versionchanged:: 3.5
318      Modify ``.pyc`` filenames according to :pep:`488`.
319
320
321.. cmdoption:: -OO
322
323   Do :option:`-O` and also discard docstrings.  Augment the filename
324   for compiled (:term:`bytecode`) files by adding ``.opt-2`` before the
325   ``.pyc`` extension (see :pep:`488`).
326
327   .. versionchanged:: 3.5
328      Modify ``.pyc`` filenames according to :pep:`488`.
329
330
331.. cmdoption:: -P
332
333   Don't prepend a potentially unsafe path to :data:`sys.path`:
334
335   * ``python -m module`` command line: Don't prepend the current working
336     directory.
337   * ``python script.py`` command line: Don't prepend the script's directory.
338     If it's a symbolic link, resolve symbolic links.
339   * ``python -c code`` and ``python`` (REPL) command lines: Don't prepend an
340     empty string, which means the current working directory.
341
342   See also the :envvar:`PYTHONSAFEPATH` environment variable, and :option:`-E`
343   and :option:`-I` (isolated) options.
344
345   .. versionadded:: 3.11
346
347
348.. cmdoption:: -q
349
350   Don't display the copyright and version messages even in interactive mode.
351
352   .. versionadded:: 3.2
353
354
355.. cmdoption:: -R
356
357   Turn on hash randomization. This option only has an effect if the
358   :envvar:`PYTHONHASHSEED` environment variable is set to ``0``, since hash
359   randomization is enabled by default.
360
361   On previous versions of Python, this option turns on hash randomization,
362   so that the :meth:`__hash__` values of str and bytes objects
363   are "salted" with an unpredictable random value.  Although they remain
364   constant within an individual Python process, they are not predictable
365   between repeated invocations of Python.
366
367   Hash randomization is intended to provide protection against a
368   denial-of-service caused by carefully chosen inputs that exploit the worst
369   case performance of a dict construction, O(n\ :sup:`2`) complexity.  See
370   http://ocert.org/advisories/ocert-2011-003.html for details.
371
372   :envvar:`PYTHONHASHSEED` allows you to set a fixed value for the hash
373   seed secret.
374
375   .. versionchanged:: 3.7
376      The option is no longer ignored.
377
378   .. versionadded:: 3.2.3
379
380
381.. cmdoption:: -s
382
383   Don't add the :data:`user site-packages directory <site.USER_SITE>` to
384   :data:`sys.path`.
385
386   .. seealso::
387
388      :pep:`370` -- Per user site-packages directory
389
390
391.. cmdoption:: -S
392
393   Disable the import of the module :mod:`site` and the site-dependent
394   manipulations of :data:`sys.path` that it entails.  Also disable these
395   manipulations if :mod:`site` is explicitly imported later (call
396   :func:`site.main` if you want them to be triggered).
397
398
399.. cmdoption:: -u
400
401   Force the stdout and stderr streams to be unbuffered.  This option has no
402   effect on the stdin stream.
403
404   See also :envvar:`PYTHONUNBUFFERED`.
405
406   .. versionchanged:: 3.7
407      The text layer of the stdout and stderr streams now is unbuffered.
408
409
410.. cmdoption:: -v
411
412   Print a message each time a module is initialized, showing the place
413   (filename or built-in module) from which it is loaded.  When given twice
414   (:option:`!-vv`), print a message for each file that is checked for when
415   searching for a module.  Also provides information on module cleanup at exit.
416
417   .. versionchanged:: 3.10
418      The :mod:`site` module reports the site-specific paths
419      and :file:`.pth` files being processed.
420
421   See also :envvar:`PYTHONVERBOSE`.
422
423
424.. _using-on-warnings:
425.. cmdoption:: -W arg
426
427   Warning control. Python's warning machinery by default prints warning
428   messages to :data:`sys.stderr`.
429
430   The simplest settings apply a particular action unconditionally to all
431   warnings emitted by a process (even those that are otherwise ignored by
432   default)::
433
434       -Wdefault  # Warn once per call location
435       -Werror    # Convert to exceptions
436       -Walways   # Warn every time
437       -Wmodule   # Warn once per calling module
438       -Wonce     # Warn once per Python process
439       -Wignore   # Never warn
440
441   The action names can be abbreviated as desired and the interpreter will
442   resolve them to the appropriate action name. For example, ``-Wi`` is the
443   same as ``-Wignore``.
444
445   The full form of argument is::
446
447       action:message:category:module:lineno
448
449   Empty fields match all values; trailing empty fields may be omitted. For
450   example ``-W ignore::DeprecationWarning`` ignores all DeprecationWarning
451   warnings.
452
453   The *action* field is as explained above but only applies to warnings that
454   match the remaining fields.
455
456   The *message* field must match the whole warning message; this match is
457   case-insensitive.
458
459   The *category* field matches the warning category
460   (ex: ``DeprecationWarning``). This must be a class name; the match test
461   whether the actual warning category of the message is a subclass of the
462   specified warning category.
463
464   The *module* field matches the (fully qualified) module name; this match is
465   case-sensitive.
466
467   The *lineno* field matches the line number, where zero matches all line
468   numbers and is thus equivalent to an omitted line number.
469
470   Multiple :option:`-W` options can be given; when a warning matches more than
471   one option, the action for the last matching option is performed. Invalid
472   :option:`-W` options are ignored (though, a warning message is printed about
473   invalid options when the first warning is issued).
474
475   Warnings can also be controlled using the :envvar:`PYTHONWARNINGS`
476   environment variable and from within a Python program using the
477   :mod:`warnings` module. For example, the :func:`warnings.filterwarnings`
478   function can be used to use a regular expression on the warning message.
479
480   See :ref:`warning-filter` and :ref:`describing-warning-filters` for more
481   details.
482
483
484.. cmdoption:: -x
485
486   Skip the first line of the source, allowing use of non-Unix forms of
487   ``#!cmd``.  This is intended for a DOS specific hack only.
488
489
490.. cmdoption:: -X
491
492   Reserved for various implementation-specific options.  CPython currently
493   defines the following possible values:
494
495   * ``-X faulthandler`` to enable :mod:`faulthandler`.
496     See also :envvar:`PYTHONFAULTHANDLER`.
497   * ``-X showrefcount`` to output the total reference count and number of used
498     memory blocks when the program finishes or after each statement in the
499     interactive interpreter. This only works on :ref:`debug builds
500     <debug-build>`.
501   * ``-X tracemalloc`` to start tracing Python memory allocations using the
502     :mod:`tracemalloc` module. By default, only the most recent frame is
503     stored in a traceback of a trace. Use ``-X tracemalloc=NFRAME`` to start
504     tracing with a traceback limit of *NFRAME* frames.
505     See :func:`tracemalloc.start` and :envvar:`PYTHONTRACEMALLOC`
506     for more information.
507   * ``-X int_max_str_digits`` configures the :ref:`integer string conversion
508     length limitation <int_max_str_digits>`.  See also
509     :envvar:`PYTHONINTMAXSTRDIGITS`.
510   * ``-X importtime`` to show how long each import takes. It shows module
511     name, cumulative time (including nested imports) and self time (excluding
512     nested imports).  Note that its output may be broken in multi-threaded
513     application.  Typical usage is ``python3 -X importtime -c 'import
514     asyncio'``.  See also :envvar:`PYTHONPROFILEIMPORTTIME`.
515   * ``-X dev``: enable :ref:`Python Development Mode <devmode>`, introducing
516     additional runtime checks that are too expensive to be enabled by
517     default.
518   * ``-X utf8`` enables the :ref:`Python UTF-8 Mode <utf8-mode>`.
519     ``-X utf8=0`` explicitly disables :ref:`Python UTF-8 Mode <utf8-mode>`
520     (even when it would otherwise activate automatically).
521     See also :envvar:`PYTHONUTF8`.
522   * ``-X pycache_prefix=PATH`` enables writing ``.pyc`` files to a parallel
523     tree rooted at the given directory instead of to the code tree. See also
524     :envvar:`PYTHONPYCACHEPREFIX`.
525   * ``-X warn_default_encoding`` issues a :class:`EncodingWarning` when the
526     locale-specific default encoding is used for opening files.
527     See also :envvar:`PYTHONWARNDEFAULTENCODING`.
528   * ``-X no_debug_ranges`` disables the inclusion of the tables mapping extra
529     location information (end line, start column offset and end column offset)
530     to every instruction in code objects. This is useful when smaller code
531     objects and pyc files are desired as well as suppressing the extra visual
532     location indicators when the interpreter displays tracebacks. See also
533     :envvar:`PYTHONNODEBUGRANGES`.
534   * ``-X frozen_modules`` determines whether or not frozen modules are
535     ignored by the import machinery.  A value of "on" means they get
536     imported and "off" means they are ignored.  The default is "on"
537     if this is an installed Python (the normal case).  If it's under
538     development (running from the source tree) then the default is "off".
539     Note that the "importlib_bootstrap" and "importlib_bootstrap_external"
540     frozen modules are always used, even if this flag is set to "off".
541
542   It also allows passing arbitrary values and retrieving them through the
543   :data:`sys._xoptions` dictionary.
544
545   .. versionchanged:: 3.2
546      The :option:`-X` option was added.
547
548   .. versionadded:: 3.3
549      The ``-X faulthandler`` option.
550
551   .. versionadded:: 3.4
552      The ``-X showrefcount`` and ``-X tracemalloc`` options.
553
554   .. versionadded:: 3.6
555      The ``-X showalloccount`` option.
556
557   .. versionadded:: 3.7
558      The ``-X importtime``, ``-X dev`` and ``-X utf8`` options.
559
560   .. versionadded:: 3.8
561      The ``-X pycache_prefix`` option. The ``-X dev`` option now logs
562      ``close()`` exceptions in :class:`io.IOBase` destructor.
563
564   .. versionchanged:: 3.9
565      Using ``-X dev`` option, check *encoding* and *errors* arguments on
566      string encoding and decoding operations.
567
568      The ``-X showalloccount`` option has been removed.
569
570   .. versionadded:: 3.10
571      The ``-X warn_default_encoding`` option.
572
573   .. deprecated-removed:: 3.9 3.10
574      The ``-X oldparser`` option.
575
576   .. versionadded:: 3.11
577      The ``-X no_debug_ranges`` option.
578
579   .. versionadded:: 3.11
580      The ``-X frozen_modules`` option.
581
582   .. versionadded:: 3.11
583      The ``-X int_max_str_digits`` option.
584
585
586Options you shouldn't use
587~~~~~~~~~~~~~~~~~~~~~~~~~
588
589.. cmdoption:: -J
590
591   Reserved for use by Jython_.
592
593.. _Jython: https://www.jython.org/
594
595
596.. _using-on-envvars:
597
598Environment variables
599---------------------
600
601These environment variables influence Python's behavior, they are processed
602before the command-line switches other than -E or -I.  It is customary that
603command-line switches override environmental variables where there is a
604conflict.
605
606.. envvar:: PYTHONHOME
607
608   Change the location of the standard Python libraries.  By default, the
609   libraries are searched in :file:`{prefix}/lib/python{version}` and
610   :file:`{exec_prefix}/lib/python{version}`, where :file:`{prefix}` and
611   :file:`{exec_prefix}` are installation-dependent directories, both defaulting
612   to :file:`/usr/local`.
613
614   When :envvar:`PYTHONHOME` is set to a single directory, its value replaces
615   both :file:`{prefix}` and :file:`{exec_prefix}`.  To specify different values
616   for these, set :envvar:`PYTHONHOME` to :file:`{prefix}:{exec_prefix}`.
617
618
619.. envvar:: PYTHONPATH
620
621   Augment the default search path for module files.  The format is the same as
622   the shell's :envvar:`PATH`: one or more directory pathnames separated by
623   :data:`os.pathsep` (e.g. colons on Unix or semicolons on Windows).
624   Non-existent directories are silently ignored.
625
626   In addition to normal directories, individual :envvar:`PYTHONPATH` entries
627   may refer to zipfiles containing pure Python modules (in either source or
628   compiled form). Extension modules cannot be imported from zipfiles.
629
630   The default search path is installation dependent, but generally begins with
631   :file:`{prefix}/lib/python{version}` (see :envvar:`PYTHONHOME` above).  It
632   is *always* appended to :envvar:`PYTHONPATH`.
633
634   An additional directory will be inserted in the search path in front of
635   :envvar:`PYTHONPATH` as described above under
636   :ref:`using-on-interface-options`. The search path can be manipulated from
637   within a Python program as the variable :data:`sys.path`.
638
639
640.. envvar:: PYTHONSAFEPATH
641
642   If this is set to a non-empty string, don't prepend a potentially unsafe
643   path to :data:`sys.path`: see the :option:`-P` option for details.
644
645   .. versionadded:: 3.11
646
647
648.. envvar:: PYTHONPLATLIBDIR
649
650   If this is set to a non-empty string, it overrides the :data:`sys.platlibdir`
651   value.
652
653   .. versionadded:: 3.9
654
655
656.. envvar:: PYTHONSTARTUP
657
658   If this is the name of a readable file, the Python commands in that file are
659   executed before the first prompt is displayed in interactive mode.  The file
660   is executed in the same namespace where interactive commands are executed so
661   that objects defined or imported in it can be used without qualification in
662   the interactive session.  You can also change the prompts :data:`sys.ps1` and
663   :data:`sys.ps2` and the hook :data:`sys.__interactivehook__` in this file.
664
665   .. audit-event:: cpython.run_startup filename envvar-PYTHONSTARTUP
666
667      Raises an :ref:`auditing event <auditing>` ``cpython.run_startup`` with
668      the filename as the argument when called on startup.
669
670
671.. envvar:: PYTHONOPTIMIZE
672
673   If this is set to a non-empty string it is equivalent to specifying the
674   :option:`-O` option.  If set to an integer, it is equivalent to specifying
675   :option:`-O` multiple times.
676
677
678.. envvar:: PYTHONBREAKPOINT
679
680   If this is set, it names a callable using dotted-path notation.  The module
681   containing the callable will be imported and then the callable will be run
682   by the default implementation of :func:`sys.breakpointhook` which itself is
683   called by built-in :func:`breakpoint`.  If not set, or set to the empty
684   string, it is equivalent to the value "pdb.set_trace".  Setting this to the
685   string "0" causes the default implementation of :func:`sys.breakpointhook`
686   to do nothing but return immediately.
687
688   .. versionadded:: 3.7
689
690.. envvar:: PYTHONDEBUG
691
692   If this is set to a non-empty string it is equivalent to specifying the
693   :option:`-d` option.  If set to an integer, it is equivalent to specifying
694   :option:`-d` multiple times.
695
696
697.. envvar:: PYTHONINSPECT
698
699   If this is set to a non-empty string it is equivalent to specifying the
700   :option:`-i` option.
701
702   This variable can also be modified by Python code using :data:`os.environ`
703   to force inspect mode on program termination.
704
705
706.. envvar:: PYTHONUNBUFFERED
707
708   If this is set to a non-empty string it is equivalent to specifying the
709   :option:`-u` option.
710
711
712.. envvar:: PYTHONVERBOSE
713
714   If this is set to a non-empty string it is equivalent to specifying the
715   :option:`-v` option.  If set to an integer, it is equivalent to specifying
716   :option:`-v` multiple times.
717
718
719.. envvar:: PYTHONCASEOK
720
721   If this is set, Python ignores case in :keyword:`import` statements.  This
722   only works on Windows and macOS.
723
724
725.. envvar:: PYTHONDONTWRITEBYTECODE
726
727   If this is set to a non-empty string, Python won't try to write ``.pyc``
728   files on the import of source modules.  This is equivalent to
729   specifying the :option:`-B` option.
730
731
732.. envvar:: PYTHONPYCACHEPREFIX
733
734   If this is set, Python will write ``.pyc`` files in a mirror directory tree
735   at this path, instead of in ``__pycache__`` directories within the source
736   tree. This is equivalent to specifying the :option:`-X`
737   ``pycache_prefix=PATH`` option.
738
739   .. versionadded:: 3.8
740
741
742.. envvar:: PYTHONHASHSEED
743
744   If this variable is not set or set to ``random``, a random value is used
745   to seed the hashes of str and bytes objects.
746
747   If :envvar:`PYTHONHASHSEED` is set to an integer value, it is used as a fixed
748   seed for generating the hash() of the types covered by the hash
749   randomization.
750
751   Its purpose is to allow repeatable hashing, such as for selftests for the
752   interpreter itself, or to allow a cluster of python processes to share hash
753   values.
754
755   The integer must be a decimal number in the range [0,4294967295].  Specifying
756   the value 0 will disable hash randomization.
757
758   .. versionadded:: 3.2.3
759
760.. envvar:: PYTHONINTMAXSTRDIGITS
761
762   If this variable is set to an integer, it is used to configure the
763   interpreter's global :ref:`integer string conversion length limitation
764   <int_max_str_digits>`.
765
766   .. versionadded:: 3.11
767
768.. envvar:: PYTHONIOENCODING
769
770   If this is set before running the interpreter, it overrides the encoding used
771   for stdin/stdout/stderr, in the syntax ``encodingname:errorhandler``.  Both
772   the ``encodingname`` and the ``:errorhandler`` parts are optional and have
773   the same meaning as in :func:`str.encode`.
774
775   For stderr, the ``:errorhandler`` part is ignored; the handler will always be
776   ``'backslashreplace'``.
777
778   .. versionchanged:: 3.4
779      The ``encodingname`` part is now optional.
780
781   .. versionchanged:: 3.6
782      On Windows, the encoding specified by this variable is ignored for interactive
783      console buffers unless :envvar:`PYTHONLEGACYWINDOWSSTDIO` is also specified.
784      Files and pipes redirected through the standard streams are not affected.
785
786.. envvar:: PYTHONNOUSERSITE
787
788   If this is set, Python won't add the :data:`user site-packages directory
789   <site.USER_SITE>` to :data:`sys.path`.
790
791   .. seealso::
792
793      :pep:`370` -- Per user site-packages directory
794
795
796.. envvar:: PYTHONUSERBASE
797
798   Defines the :data:`user base directory <site.USER_BASE>`, which is used to
799   compute the path of the :data:`user site-packages directory <site.USER_SITE>`
800   and :ref:`Distutils installation paths <inst-alt-install-user>` for
801   ``python setup.py install --user``.
802
803   .. seealso::
804
805      :pep:`370` -- Per user site-packages directory
806
807
808.. envvar:: PYTHONEXECUTABLE
809
810   If this environment variable is set, ``sys.argv[0]`` will be set to its
811   value instead of the value got through the C runtime.  Only works on
812   macOS.
813
814.. envvar:: PYTHONWARNINGS
815
816   This is equivalent to the :option:`-W` option. If set to a comma
817   separated string, it is equivalent to specifying :option:`-W` multiple
818   times, with filters later in the list taking precedence over those earlier
819   in the list.
820
821   The simplest settings apply a particular action unconditionally to all
822   warnings emitted by a process (even those that are otherwise ignored by
823   default)::
824
825       PYTHONWARNINGS=default  # Warn once per call location
826       PYTHONWARNINGS=error    # Convert to exceptions
827       PYTHONWARNINGS=always   # Warn every time
828       PYTHONWARNINGS=module   # Warn once per calling module
829       PYTHONWARNINGS=once     # Warn once per Python process
830       PYTHONWARNINGS=ignore   # Never warn
831
832   See :ref:`warning-filter` and :ref:`describing-warning-filters` for more
833   details.
834
835
836.. envvar:: PYTHONFAULTHANDLER
837
838   If this environment variable is set to a non-empty string,
839   :func:`faulthandler.enable` is called at startup: install a handler for
840   :const:`SIGSEGV`, :const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` and
841   :const:`SIGILL` signals to dump the Python traceback.  This is equivalent to
842   :option:`-X` ``faulthandler`` option.
843
844   .. versionadded:: 3.3
845
846
847.. envvar:: PYTHONTRACEMALLOC
848
849   If this environment variable is set to a non-empty string, start tracing
850   Python memory allocations using the :mod:`tracemalloc` module. The value of
851   the variable is the maximum number of frames stored in a traceback of a
852   trace. For example, ``PYTHONTRACEMALLOC=1`` stores only the most recent
853   frame.
854   See the :func:`tracemalloc.start` function for more information.
855   This is equivalent to setting the :option:`-X` ``tracemalloc`` option.
856
857   .. versionadded:: 3.4
858
859
860.. envvar:: PYTHONPROFILEIMPORTTIME
861
862   If this environment variable is set to a non-empty string, Python will
863   show how long each import takes.
864   This is equivalent to setting the :option:`-X` ``importtime`` option.
865
866   .. versionadded:: 3.7
867
868
869.. envvar:: PYTHONASYNCIODEBUG
870
871   If this environment variable is set to a non-empty string, enable the
872   :ref:`debug mode <asyncio-debug-mode>` of the :mod:`asyncio` module.
873
874   .. versionadded:: 3.4
875
876
877.. envvar:: PYTHONMALLOC
878
879   Set the Python memory allocators and/or install debug hooks.
880
881   Set the family of memory allocators used by Python:
882
883   * ``default``: use the :ref:`default memory allocators
884     <default-memory-allocators>`.
885   * ``malloc``: use the :c:func:`malloc` function of the C library
886     for all domains (:c:data:`PYMEM_DOMAIN_RAW`, :c:data:`PYMEM_DOMAIN_MEM`,
887     :c:data:`PYMEM_DOMAIN_OBJ`).
888   * ``pymalloc``: use the :ref:`pymalloc allocator <pymalloc>` for
889     :c:data:`PYMEM_DOMAIN_MEM` and :c:data:`PYMEM_DOMAIN_OBJ` domains and use
890     the :c:func:`malloc` function for the :c:data:`PYMEM_DOMAIN_RAW` domain.
891
892   Install :ref:`debug hooks <pymem-debug-hooks>`:
893
894   * ``debug``: install debug hooks on top of the :ref:`default memory
895     allocators <default-memory-allocators>`.
896   * ``malloc_debug``: same as ``malloc`` but also install debug hooks.
897   * ``pymalloc_debug``: same as ``pymalloc`` but also install debug hooks.
898
899   .. versionchanged:: 3.7
900      Added the ``"default"`` allocator.
901
902   .. versionadded:: 3.6
903
904
905.. envvar:: PYTHONMALLOCSTATS
906
907   If set to a non-empty string, Python will print statistics of the
908   :ref:`pymalloc memory allocator <pymalloc>` every time a new pymalloc object
909   arena is created, and on shutdown.
910
911   This variable is ignored if the :envvar:`PYTHONMALLOC` environment variable
912   is used to force the :c:func:`malloc` allocator of the C library, or if
913   Python is configured without ``pymalloc`` support.
914
915   .. versionchanged:: 3.6
916      This variable can now also be used on Python compiled in release mode.
917      It now has no effect if set to an empty string.
918
919
920.. envvar:: PYTHONLEGACYWINDOWSFSENCODING
921
922   If set to a non-empty string, the default :term:`filesystem encoding and
923   error handler` mode will revert to their pre-3.6 values of 'mbcs' and
924   'replace', respectively.  Otherwise, the new defaults 'utf-8' and
925   'surrogatepass' are used.
926
927   This may also be enabled at runtime with
928   :func:`sys._enablelegacywindowsfsencoding()`.
929
930   .. availability:: Windows.
931
932   .. versionadded:: 3.6
933      See :pep:`529` for more details.
934
935.. envvar:: PYTHONLEGACYWINDOWSSTDIO
936
937   If set to a non-empty string, does not use the new console reader and
938   writer. This means that Unicode characters will be encoded according to
939   the active console code page, rather than using utf-8.
940
941   This variable is ignored if the standard streams are redirected (to files
942   or pipes) rather than referring to console buffers.
943
944   .. availability:: Windows.
945
946   .. versionadded:: 3.6
947
948
949.. envvar:: PYTHONCOERCECLOCALE
950
951   If set to the value ``0``, causes the main Python command line application
952   to skip coercing the legacy ASCII-based C and POSIX locales to a more
953   capable UTF-8 based alternative.
954
955   If this variable is *not* set (or is set to a value other than ``0``), the
956   ``LC_ALL`` locale override environment variable is also not set, and the
957   current locale reported for the ``LC_CTYPE`` category is either the default
958   ``C`` locale, or else the explicitly ASCII-based ``POSIX`` locale, then the
959   Python CLI will attempt to configure the following locales for the
960   ``LC_CTYPE`` category in the order listed before loading the interpreter
961   runtime:
962
963   * ``C.UTF-8``
964   * ``C.utf8``
965   * ``UTF-8``
966
967   If setting one of these locale categories succeeds, then the ``LC_CTYPE``
968   environment variable will also be set accordingly in the current process
969   environment before the Python runtime is initialized. This ensures that in
970   addition to being seen by both the interpreter itself and other locale-aware
971   components running in the same process (such as the GNU ``readline``
972   library), the updated setting is also seen in subprocesses (regardless of
973   whether or not those processes are running a Python interpreter), as well as
974   in operations that query the environment rather than the current C locale
975   (such as Python's own :func:`locale.getdefaultlocale`).
976
977   Configuring one of these locales (either explicitly or via the above
978   implicit locale coercion) automatically enables the ``surrogateescape``
979   :ref:`error handler <error-handlers>` for :data:`sys.stdin` and
980   :data:`sys.stdout` (:data:`sys.stderr` continues to use ``backslashreplace``
981   as it does in any other locale). This stream handling behavior can be
982   overridden using :envvar:`PYTHONIOENCODING` as usual.
983
984   For debugging purposes, setting ``PYTHONCOERCECLOCALE=warn`` will cause
985   Python to emit warning messages on ``stderr`` if either the locale coercion
986   activates, or else if a locale that *would* have triggered coercion is
987   still active when the Python runtime is initialized.
988
989   Also note that even when locale coercion is disabled, or when it fails to
990   find a suitable target locale, :envvar:`PYTHONUTF8` will still activate by
991   default in legacy ASCII-based locales. Both features must be disabled in
992   order to force the interpreter to use ``ASCII`` instead of ``UTF-8`` for
993   system interfaces.
994
995   .. availability:: Unix.
996
997   .. versionadded:: 3.7
998      See :pep:`538` for more details.
999
1000
1001.. envvar:: PYTHONDEVMODE
1002
1003   If this environment variable is set to a non-empty string, enable
1004   :ref:`Python Development Mode <devmode>`, introducing additional runtime
1005   checks that are too expensive to be enabled by default.
1006   This is equivalent to setting the :option:`-X` ``dev`` option.
1007
1008   .. versionadded:: 3.7
1009
1010.. envvar:: PYTHONUTF8
1011
1012   If set to ``1``, enable the :ref:`Python UTF-8 Mode <utf8-mode>`.
1013
1014   If set to ``0``, disable the :ref:`Python UTF-8 Mode <utf8-mode>`.
1015
1016   Setting any other non-empty string causes an error during interpreter
1017   initialisation.
1018
1019   .. versionadded:: 3.7
1020
1021.. envvar:: PYTHONWARNDEFAULTENCODING
1022
1023   If this environment variable is set to a non-empty string, issue a
1024   :class:`EncodingWarning` when the locale-specific default encoding is used.
1025
1026   See :ref:`io-encoding-warning` for details.
1027
1028   .. versionadded:: 3.10
1029
1030.. envvar:: PYTHONNODEBUGRANGES
1031
1032   If this variable is set, it disables the inclusion of the tables mapping
1033   extra location information (end line, start column offset and end column
1034   offset) to every instruction in code objects. This is useful when smaller
1035   code objects and pyc files are desired as well as suppressing the extra visual
1036   location indicators when the interpreter displays tracebacks.
1037
1038   .. versionadded:: 3.11
1039
1040
1041
1042Debug-mode variables
1043~~~~~~~~~~~~~~~~~~~~
1044
1045.. envvar:: PYTHONTHREADDEBUG
1046
1047   If set, Python will print threading debug info into stdout.
1048
1049   Need a :ref:`debug build of Python <debug-build>`.
1050
1051   .. deprecated-removed:: 3.10 3.12
1052
1053
1054.. envvar:: PYTHONDUMPREFS
1055
1056   If set, Python will dump objects and reference counts still alive after
1057   shutting down the interpreter.
1058
1059   Need Python configured with the :option:`--with-trace-refs` build option.
1060
1061.. envvar:: PYTHONDUMPREFSFILE=FILENAME
1062
1063   If set, Python will dump objects and reference counts still alive
1064   after shutting down the interpreter into a file called *FILENAME*.
1065
1066   Need Python configured with the :option:`--with-trace-refs` build option.
1067
1068   .. versionadded:: 3.11
1069