1. コマンドラインと環境¶
CPython インタプリタはコマンドラインと環境を読み取って様々な設定を行ないます。
CPython implementation detail: 他の実装のコマンドラインスキームは CPython とは異なります。さらなる情報は 別のPythonの実装 を参照してください。
1.1. コマンドライン¶
Python を起動するとき、以下のうち任意のオプションを指定できます:
python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
もちろん、もっとも一般的な利用方法は、単純にスクリプトを起動することです:
python myscript.py
1.1.1. インターフェイスオプション¶
インタプリタのインターフェイスは UNIX シェルのものに似ていますが、より多くの起動方法を提供しています:
tty デバイスに接続された標準入力とともに起動された場合、 EOF (end-of-file 文字。 UNIX では Ctrl-D で、Windows では Ctrl-Z, Enter で入力可能) を受け取るまで、コマンドを受け取り、それを実行します。
ファイル名引数か、標準入力としてファイルを渡された場合、そのファイルからスクリプトを読み込んで実行します。
ディレクトリ名を引数に受け取った場合、そのディレクトリから適切な名前のスクリプトファイルを読み込んで実行します。
-c コマンド
オプションを利用して起動された場合、 コマンド として渡された Python の文を実行します。 コマンド の部分には改行で区切られた複数行を指定することもできます。行の先頭の空白文字は Python 文の重要要素です!-m モジュール名
として Python モジュールパスにあるモジュールを指定された場合、そのモジュールをスクリプトとして実行します。
非インタラクティブモードでは、入力の全体が実行前にパースされます。
インタプリタによって消費されるオプションリストが終了したあと、継続する全ての引数は sys.argv
に渡ります。 -- ただし、添字 0 の先頭要素(sys.argv[0]
) はプログラムのソース自体を示す文字列です。
-
-c
<command>
¶ command 内の Python コードを実行します。 command は改行によって区切られた1行以上の文です。通常のモジュールのコードと同じく、行頭の空白文字は意味を持ちます。
このオプションが指定された場合、
sys.argv
の最初の要素は"-c"
になり、カレントディレクトリがsys.path
の先頭に追加されます (そのディレクトリにあるモジュールをトップレベルモジュールとして import 出来るようになります)。引数
command
を指定して 監査イベントcpython.run_command
を送出します。
-
-m
<module-name>
¶ sys.path
から指定されたモジュール名のモジュールを探し、その内容を__main__
モジュールとして実行します。引数は module 名なので、拡張子 (
.py
) を含めてはいけません。モジュール名は有効な Python の絶対モジュール名 (absolute module name) であるべきですが、実装がそれを強制しているとは限りません (例えば、ハイフンを名前に含める事を許可するかもしれません)。パッケージ名 (名前空間パッケージも含む) でも構いません。通常のモジュールの代わりにパッケージ名が与えられた場合、インタプリタは
<pkg>.__main__
を main モジュールとして実行します。この挙動はスクリプト引数として渡されたディレクトリや zip ファイルをインタプリタが処理するのと意図的に同じにしています。注釈
このオプションは組み込みモジュールや C で書かれた拡張モジュールには利用できません。 Python モジュールファイルを持っていないからです。しかし、コンパイル済みのモジュールは、たとえ元のソースファイルがなくても利用可能です。
このオプションが指定された場合、
sys.argv
の最初の要素はモジュールファイルのフルパスになります (モジュールファイルを検索している間、最初の要素は"-m"
に設定されます)。-c
オプションと同様に、カレントディレクトリがsys.path
の先頭に追加されます。-I
option can be used to run the script in isolated mode wheresys.path
contains neither the current directory nor the user's site-packages directory. AllPYTHON*
environment variables are ignored, too.多くの標準ライブラリモジュールにはスクリプトとして実行された時のためのコードがあります。例えば、
timeit
モジュールは次のように実行可能です:python -m timeit -s 'setup here' 'benchmarked code here' python -m timeit -h # for details
引数
module-name
を指定して 監査イベントcpython.run_module
を送出します。バージョン 3.1 で変更:
__main__
サブモジュールを実行するパッケージ名が提供されました。バージョン 3.4 で変更: 名前空間パッケージもサポートされました
-
-
標準入力 (
sys.stdin
) からコマンドを読み込みます。標準入力がターミナルだった場合、暗黙的に-i
オプションが指定されます。このオプションが指定された場合、
sys.argv
の最初の要素は"-"
で、カレントディレクトリがsys.path
の先頭に追加されます。引数無しで 監査イベント
cpython.run_stdin
を送出します。
-
<script>
script 内の Python コードを実行します。 script は、Python ファイル、
__main__.py
ファイルがあるディレクトリ、__main__.py
ファイルがある zip ファイルのいずれかの、ファイルシステム上の (絶対または相対) パスでなければなりません。このオプションが指定された場合、
sys.argv
の最初の要素はコマンドラインで指定されたスクリプト名になります。スクリプト名が Python ファイルを直接指定していた場合、そのファイルを含むディレクトリが
sys.path
の先頭に追加され、そのファイルは__main__
モジュールとして実行されます。スクリプト名がディレクトリか zip ファイルを指定していた場合、スクリプト名が
sys.path
に追加され、その中の__main__.py
ファイルが__main__
モジュールとして実行されます。-I
option can be used to run the script in isolated mode wheresys.path
contains neither the script's directory nor the user's site-packages directory. AllPYTHON*
environment variables are ignored, too.引数
filename
を指定して 監査イベントcpython.run_file
を送出します。参考
runpy.run_path()
Python コードで直接使える等価な機能
インターフェイスオプションが与えられなかった場合、-i
が暗黙的に指定され、sys.argv[0]
が空の文字列 (""
) になり、 現在のディレクトリが sys.path
の先頭に追加されます。また、利用可能であればタブ補完と履歴編集が自動的に有効かされます (readline の設定 を参照してください)。
参考
バージョン 3.4 で変更: タブ補完と履歴の編集が自動的に有効化されます。
1.1.2. 一般オプション¶
1.1.3. その他のオプション¶
-
-b
¶
bytes
またはbytearray
をstr
と比較した場合、または、bytes
をint
と比較した場合に警告を発生させます。このオプションを2度指定した場合 (-bb
) は、エラーを発生させます。
-
-B
¶
与えられた場合、Python はソースモジュールのインポート時に
.pyc
ファイルの作成を試みません。PYTHONDONTWRITEBYTECODE
環境変数も参照してください。
-
--check-hash-based-pycs
default|always|never
¶ Control the validation behavior of hash-based
.pyc
files. See キャッシュされたバイトコードの無効化. When set todefault
, checked and unchecked hash-based bytecode cache files are validated according to their default semantics. When set toalways
, all hash-based.pyc
files, whether checked or unchecked, are validated against their corresponding source file. When set tonever
, hash-based.pyc
files are not validated against their corresponding source files.The semantics of timestamp-based
.pyc
files are unaffected by this option.
-
-d
¶
パーサーのデバッグ出力を有効にします。(専門家専用です。コンパイルオプションに依存します)。
PYTHONDEBUG
も参照してください。
-
-E
¶
全ての
PYTHON*
環境変数を無視します。例えば、PYTHONPATH
やPYTHONHOME
などです。
-
-i
¶
最初の引数にスクリプトが指定された場合や
-c
オプションが利用された場合、sys.stdin
がターミナルに出力されない場合も含めて、スクリプトかコマンドを実行した後にインタラクティブモードに入ります。PYTHONSTARTUP
ファイルは読み込みません。このオプションはグローバル変数や、スクリプトが例外を発生させるときにそのスタックトレースを調べるのに便利です。
PYTHONINSPECT
も参照してください。
-
-I
¶
Python を隔離モードで実行します。-E と -s も暗黙的に指定されます。隔離モードでは
sys.path
はスクリプトのディレクトリやユーザのサイトパッケージのディレクトリを含みません。全PYTHON*
環境変数も無視されます。ユーザが悪意のあるコードを注入するのを防ぐために更なる制限が課されるかもしれません。バージョン 3.4 で追加.
-
-O
¶
Remove assert statements and any code conditional on the value of
__debug__
. Augment the filename for compiled (bytecode) files by adding.opt-1
before the.pyc
extension (see PEP 488). See alsoPYTHONOPTIMIZE
.バージョン 3.5 で変更: PEP 488 に従って
.pyc
ファイル名を変更します。
-
-OO
¶
Do
-O
and also discard docstrings. Augment the filename for compiled (bytecode) files by adding.opt-2
before the.pyc
extension (see PEP 488).バージョン 3.5 で変更: PEP 488 に従って
.pyc
ファイル名を変更します。
-
-q
¶
インタラクティブモードでも copyright とバージョンのメッセージを表示しません。
バージョン 3.2 で追加.
-
-R
¶
Turn on hash randomization. This option only has an effect if the
PYTHONHASHSEED
environment variable is set to0
, since hash randomization is enabled by default.以前のバージョンの Python では、このオプションはハッシュのランダム化を有効にします。これにより、 str, bytes 型の
__hash__()
値が予測不可能な乱数で "ソルト" されます。ハッシュ値は各 Python プロセスでは固定ですが、 Python を繰り返し再実行した場合は別の予測不能な値になります。ハッシュのランダム化は、dict の生成コストが最悪の O(n^2) になるように注意深く選ばれた入力値を与えることによる DoS 攻撃への防御策として提供されています。詳細は http://www.ocert.org/advisories/ocert-2011-003.html を参照してください。
PYTHONHASHSEED
によってハッシュシードの固定値を秘密にすることが出来ます。バージョン 3.7 で変更: このオプションが無視されなくなりました.
バージョン 3.2.3 で追加.
-
-s
¶
user site-packages directory
をsys.path
に追加しません。参考
PEP 370 -- ユーザごとの
site-packages
ディレクトリ
-
-S
¶
site
モジュールの import と、そのモジュールが行なっていた site ごとのsys.path
への操作を無効にします。後にsite
を明示的に import しても、これらの操作は実行されません (実行したい場合は、site.main()
を呼び出してください)。
-
-u
¶
Force the stdout and stderr streams to be unbuffered. This option has no effect on the stdin stream.
PYTHONUNBUFFERED
も参照してください。バージョン 3.7 で変更: The text layer of the stdout and stderr streams now is unbuffered.
-
-v
¶
モジュールが初期化されるたびに、それがどこ(ファイル名やビルトインモジュール) からロードされたのかを示すメッセージを出力します。 二重に指定された場合(
-vv
)は、モジュールを検索するときにチェックされた各ファイルに対してメッセージを出力します。また、終了時のモジュールクリーンアップに関する情報も提供します。PYTHONVERBOSE
も参照してください。
-
-W
arg
¶ 警告制御。 Python の警告機構はデフォルトでは警告メッセージを
sys.stderr
に表示します。典型的な警告メッセージは次の書式で表示されます。file:line: category: message
デフォルトでは、各警告は発生したソース行ごとに一度だけ表示されます。このオプションは、警告をどれくらいの頻度で表示するかを制御します。
複数の
-W
オプションを指定することができます。警告が1つ以上のオプションとマッチしたときは、最後にマッチしたオプションのアクションが有効になります。不正な-W
オプションは無視されます (最初の警告が発生したときに、不正なオプションに対する警告メッセージが表示されます)。警告は、
PYTHONWARNINGS
環境変数を使い、そして Python プログラムの中からwarnings
モジュールを利用して制御できます。The simplest settings apply a particular action unconditionally to all warnings emitted by a process (even those that are otherwise ignored by default):
-Wdefault # Warn once per call location -Werror # Convert to exceptions -Walways # Warn every time -Wmodule # Warn once per calling module -Wonce # Warn once per Python process -Wignore # Never warn
The action names can be abbreviated as desired (e.g.
-Wi
,-Wd
,-Wa
,-We
) and the interpreter will resolve them to the appropriate action name.詳しくは 警告フィルタ と Describing Warning Filters を参照してください。
-
-x
¶
Unix 以外の形式の
#!cmd
を使うために、ソースの最初の行をスキップします。これは、DOS専用のハックのみを目的としています。
-
-X
¶
様々な実装固有のオプションのために予約されています。現在のところ CPython は以下の値を定義しています:
-X faulthandler
はfaulthandler
を有効化します;-X showrefcount
to output the total reference count and number of used memory blocks when the program finishes or after each statement in the interactive interpreter. This only works on debug builds.-X tracemalloc
はtracemalloc
モジュールを用いて Python のメモリ割り当てのトレースを開始します。デフォルトでは最新のフレームのみがトレースのトレースバックに格納されます。最大 NFRAME フレームのトレースバックで トレースを開始するには-X tracemalloc=NFRAME
を使用してください。詳細はtracemalloc.start()
を参照してください。-X showalloccount
to output the total count of allocated objects for each type when the program finishes. This only works when Python was built withCOUNT_ALLOCS
defined.-X int_max_str_digits
configures the integer string conversion length limitation. See alsoPYTHONINTMAXSTRDIGITS
.-X importtime
to show how long each import takes. It shows module name, cumulative time (including nested imports) and self time (excluding nested imports). Note that its output may be broken in multi-threaded application. Typical usage ispython3 -X importtime -c 'import asyncio'
. See alsoPYTHONPROFILEIMPORTTIME
.-X dev
: enable CPython's "development mode", introducing additional runtime checks which are too expensive to be enabled by default. It should not be more verbose than the default if the code is correct: new warnings are only emitted when an issue is detected. Effect of the developer mode:Add
default
warning filter, as-W
default
.Install debug hooks on memory allocators: see the
PyMem_SetupDebugHooks()
C function.Enable the
faulthandler
module to dump the Python traceback on a crash.Enable asyncio debug mode.
Set the
dev_mode
attribute ofsys.flags
toTrue
.io.IOBase
destructor logsclose()
exceptions.
-X utf8
enables UTF-8 mode for operating system interfaces, overriding the default locale-aware mode.-X utf8=0
explicitly disables UTF-8 mode (even when it would otherwise activate automatically). SeePYTHONUTF8
for more details.-X pycache_prefix=PATH
enables writing.pyc
files to a parallel tree rooted at the given directory instead of to the code tree. See alsoPYTHONPYCACHEPREFIX
.
任意の値を渡し、
sys._xoptions
辞書から取り出すことも出来ます。バージョン 3.2 で変更:
-X
オプションが追加されました。バージョン 3.3 で追加:
-X faulthandler
オプション。バージョン 3.4 で追加:
-X showrefcount
および-X tracemalloc
オプション。バージョン 3.6 で追加:
-X showalloccount
オプション。バージョン 3.7 で追加:
-X importtime
,-X dev
,-X utf8
オプション。バージョン 3.8 で追加: The
-X pycache_prefix
option. The-X dev
option now logsclose()
exceptions inio.IOBase
destructor.バージョン 3.8.14 で追加: The
-X int_max_str_digits
option.
1.1.4. 使うべきでないオプション¶
1.2. 環境変数¶
以下の環境変数は Python の挙動に影響します。環境変数は -E や -I 以外のコマンドラインスイッチの前に処理されます。衝突したときにコマンドラインスイッチが環境変数をオーバーライドするのは慣例です。
-
PYTHONHOME
¶ 標準 Python ライブラリの場所を変更します。デフォルトでは、ライブラリは
prefix/lib/pythonversion
とexec_prefix/lib/pythonversion
から検索されます。ここで、prefix
とexec_prefix
はインストール依存のディレクトリで、両方共デフォルトでは/usr/local
です。PYTHONHOME
が1つのディレクトリに設定されている場合、その値はprefix
とexec_prefix
の両方を置き換えます。それらに別々の値を指定したい場合は、PYTHONHOME
をprefix:exec_prefix
のように指定します。
-
PYTHONPATH
¶ モジュールファイルのデフォルトの検索パスを追加します。この環境変数のフォーマットはシェルの
PATH
と同じで、os.pathsep
(Unix ならコロン、 Windows ならセミコロン) で区切られた1つ以上のディレクトリパスです。存在しないディレクトリは警告なしに無視されます。通常のディレクトリに加えて、
PYTHONPATH
のエントリはピュアPython モジュール(ソース形式でもコンパイルされた形式でも) を含む zip ファイルを参照することもできます。拡張モジュールは zip ファイルの中から import することはできません。デフォルトの検索パスはインストール依存ですが、通常は
prefix/lib/pythonversion
で始まります。 (上のPYTHONHOME
を参照してください。) これは 常にPYTHONPATH
に追加されます。上の インターフェイスオプション で説明されているように、追加の検索パスディレクトリが
PYTHONPATH
の手前に追加されます。検索パスは Python プログラムからsys.path
変数として操作することができます。
-
PYTHONSTARTUP
¶ この変数が読み込み可能なファイル名の場合、対話モードで最初のプロンプトが表示される前にそのファイルの Python コマンドが実行されます。 ファイル内で定義されているオブジェクトやインポートされたオブジェクトを対話セッションで修飾せずに使用するために、ファイルは対話的なコマンドと同じ名前空間で実行されます。 このファイル内のプロンプト
sys.ps1
やsys.ps2
、ならびにフックsys.__interactivehook__
を変更することも出来ます。引数
filename
を指定して 監査イベントcpython.run_startup
を送出します。
-
PYTHONBREAKPOINT
¶ If this is set, it names a callable using dotted-path notation. The module containing the callable will be imported and then the callable will be run by the default implementation of
sys.breakpointhook()
which itself is called by built-inbreakpoint()
. If not set, or set to the empty string, it is equivalent to the value "pdb.set_trace". Setting this to the string "0" causes the default implementation ofsys.breakpointhook()
to do nothing but return immediately.バージョン 3.7 で追加.
-
PYTHONINSPECT
¶ この変数に空でない文字列を設定するのは
-i
オプションを指定するのと等価です。この変数は Python コードから
os.environ
を使って変更して、プログラム終了時のインスペクトモードを強制することができます。引数無しで 監査イベント
cpython.run_stdin
を送出します。バージョン 3.8.20 で変更: Emits audit events.
-
PYTHONDONTWRITEBYTECODE
¶ この変数に空でない文字列を設定した場合、 Python はソースモジュールのインポート時に
.pyc
ファイルを作成しようとはしなくなります。-B
オプションを指定するのと等価です。
-
PYTHONPYCACHEPREFIX
¶ If this is set, Python will write
.pyc
files in a mirror directory tree at this path, instead of in__pycache__
directories within the source tree. This is equivalent to specifying the-X
pycache_prefix=PATH
option.バージョン 3.8 で追加.
-
PYTHONHASHSEED
¶ この変数が設定されていない場合や
random
に設定された場合、乱数値が str、bytes オブジェクトのハッシュのシードに使われます。PYTHONHASHSEED
が整数値に設定された場合、その値はハッシュランダム化が扱う型の hash() 生成の固定シードに使われます。その目的は再現性のあるハッシュを可能にすることです。例えばインタープリタ自身の自己テストや Python プロセスのクラスタでハッシュ値を共有するのに用います。
整数は [0,4294967295] の十進数でなければなりません。0 を指定するとハッシュランダム化は無効化されます。
バージョン 3.2.3 で追加.
-
PYTHONINTMAXSTRDIGITS
¶ If this variable is set to an integer, it is used to configure the interpreter's global integer string conversion length limitation.
バージョン 3.8.14 で追加.
-
PYTHONIOENCODING
¶ この変数がインタープリタ実行前に設定されていた場合、
encodingname:errorhandler
という文法で標準入力/標準出力/標準エラー出力のエンコードを上書きします。encodingname
と:errorhandler
の部分はどちらも任意で、str.encode()
と同じ意味を持ちます。標準エラー出力の場合、
:errorhandler
の部分は無視されます; ハンドラは常に'backslashreplace'
です。バージョン 3.4 で変更:
encodingname
の部分が任意になりました。バージョン 3.6 で変更: On Windows, the encoding specified by this variable is ignored for interactive console buffers unless
PYTHONLEGACYWINDOWSSTDIO
is also specified. Files and pipes redirected through the standard streams are not affected.
-
PYTHONNOUSERSITE
¶ この環境変数が設定されている場合、 Python は
ユーザ site-packages ディレクトリ
をsys.path
に追加しません。参考
PEP 370 -- ユーザごとの
site-packages
ディレクトリ
-
PYTHONUSERBASE
¶ user base directory
を設定します。これはpython setup.py install --user
時にuser site-packages directory
と Distutils installation paths のパスを計算するのに使われます。参考
PEP 370 -- ユーザごとの
site-packages
ディレクトリ
-
PYTHONEXECUTABLE
¶ この環境変数が設定された場合、
sys.argv[0]
に、C ランタイムから取得した値の代わりにこの環境変数の値が設定されます。Mac OS X でのみ動作します。
-
PYTHONWARNINGS
¶ This is equivalent to the
-W
option. If set to a comma separated string, it is equivalent to specifying-W
multiple times, with filters later in the list taking precedence over those earlier in the list.The simplest settings apply a particular action unconditionally to all warnings emitted by a process (even those that are otherwise ignored by default):
PYTHONWARNINGS=default # Warn once per call location PYTHONWARNINGS=error # Convert to exceptions PYTHONWARNINGS=always # Warn every time PYTHONWARNINGS=module # Warn once per calling module PYTHONWARNINGS=once # Warn once per Python process PYTHONWARNINGS=ignore # Never warn
詳しくは 警告フィルタ と Describing Warning Filters を参照してください。
-
PYTHONFAULTHANDLER
¶ この環境変数が空でない文字列に設定された場合、起動時に
faulthandler.enable()
が呼び出されます。Python のトレースバックをダンプするためにSIGSEGV
、SIGFPE
、SIGABRT
、SIGBUS
およびSIGILL
シグナルのハンドラを導入します。-X
faulthandler
オプションと等価です。バージョン 3.3 で追加.
-
PYTHONTRACEMALLOC
¶ この環境変数が空でない文字列に設定された場合、
tracemalloc
モジュールを利用して Python のメモリ割り当てのトレースを開始します。変数の値はトレース時のトレースバックで保持されるフレームの最大数です。例えばPYTHONTRACEMALLOC=1
の場合、最新のフレームのみを保持します。詳細はtracemalloc.start()
を参照してください、バージョン 3.4 で追加.
-
PYTHONPROFILEIMPORTTIME
¶ If this environment variable is set to a non-empty string, Python will show how long each import takes. This is exactly equivalent to setting
-X importtime
on the command line.バージョン 3.7 で追加.
-
PYTHONMALLOC
¶ Set the Python memory allocators and/or install debug hooks.
Set the family of memory allocators used by Python:
default
: use the default memory allocators.malloc
: use themalloc()
function of the C library for all domains (PYMEM_DOMAIN_RAW
,PYMEM_DOMAIN_MEM
,PYMEM_DOMAIN_OBJ
).pymalloc
: use the pymalloc allocator forPYMEM_DOMAIN_MEM
andPYMEM_DOMAIN_OBJ
domains and use themalloc()
function for thePYMEM_DOMAIN_RAW
domain.
Install debug hooks:
debug
: install debug hooks on top of the default memory allocators.malloc_debug
: same asmalloc
but also install debug hooks.pymalloc_debug
: same aspymalloc
but also install debug hooks.
See the default memory allocators and the
PyMem_SetupDebugHooks()
function (install debug hooks on Python memory allocators).バージョン 3.7 で変更: Added the
"default"
allocator.バージョン 3.6 で追加.
-
PYTHONMALLOCSTATS
¶ 空でない文字列に設定されると、Python は新たなオブジェクトアリーナが生成される時と、シャットダウン時に pymalloc メモリアロケータ の統計情報を表示します。
This variable is ignored if the
PYTHONMALLOC
environment variable is used to force themalloc()
allocator of the C library, or if Python is configured withoutpymalloc
support.バージョン 3.6 で変更: This variable can now also be used on Python compiled in release mode. It now has no effect if set to an empty string.
-
PYTHONLEGACYWINDOWSFSENCODING
¶ If set to a non-empty string, the default filesystem encoding and errors mode will revert to their pre-3.6 values of 'mbcs' and 'replace', respectively. Otherwise, the new defaults 'utf-8' and 'surrogatepass' are used.
This may also be enabled at runtime with
sys._enablelegacywindowsfsencoding()
.利用可能な環境: Windows 。
バージョン 3.6 で追加: より詳しくは PEP 529 を参照をしてください。
-
PYTHONLEGACYWINDOWSSTDIO
¶ If set to a non-empty string, does not use the new console reader and writer. This means that Unicode characters will be encoded according to the active console code page, rather than using utf-8.
This variable is ignored if the standard streams are redirected (to files or pipes) rather than referring to console buffers.
利用可能な環境: Windows 。
バージョン 3.6 で追加.
-
PYTHONCOERCECLOCALE
¶ If set to the value
0
, causes the main Python command line application to skip coercing the legacy ASCII-based C and POSIX locales to a more capable UTF-8 based alternative.If this variable is not set (or is set to a value other than
0
), theLC_ALL
locale override environment variable is also not set, and the current locale reported for theLC_CTYPE
category is either the defaultC
locale, or else the explicitly ASCII-basedPOSIX
locale, then the Python CLI will attempt to configure the following locales for theLC_CTYPE
category in the order listed before loading the interpreter runtime:C.UTF-8
C.utf8
UTF-8
If setting one of these locale categories succeeds, then the
LC_CTYPE
environment variable will also be set accordingly in the current process environment before the Python runtime is initialized. This ensures that in addition to being seen by both the interpreter itself and other locale-aware components running in the same process (such as the GNUreadline
library), the updated setting is also seen in subprocesses (regardless of whether or not those processes are running a Python interpreter), as well as in operations that query the environment rather than the current C locale (such as Python's ownlocale.getdefaultlocale()
).Configuring one of these locales (either explicitly or via the above implicit locale coercion) automatically enables the
surrogateescape
error handler forsys.stdin
andsys.stdout
(sys.stderr
continues to usebackslashreplace
as it does in any other locale). This stream handling behavior can be overridden usingPYTHONIOENCODING
as usual.For debugging purposes, setting
PYTHONCOERCECLOCALE=warn
will cause Python to emit warning messages onstderr
if either the locale coercion activates, or else if a locale that would have triggered coercion is still active when the Python runtime is initialized.Also note that even when locale coercion is disabled, or when it fails to find a suitable target locale,
PYTHONUTF8
will still activate by default in legacy ASCII-based locales. Both features must be disabled in order to force the interpreter to useASCII
instead ofUTF-8
for system interfaces.Availability: *nix.
バージョン 3.7 で追加: より詳しくは PEP 538 を参照をしてください。
-
PYTHONDEVMODE
¶ If this environment variable is set to a non-empty string, enable the CPython "development mode". See the
-X
dev
option.バージョン 3.7 で追加.
-
PYTHONUTF8
¶ If set to
1
, enables the interpreter's UTF-8 mode, whereUTF-8
is used as the text encoding for system interfaces, regardless of the current locale setting.This means that:
sys.getfilesystemencoding()
returns'UTF-8'
(the locale encoding is ignored).locale.getpreferredencoding()
returns'UTF-8'
(the locale encoding is ignored, and the function'sdo_setlocale
parameter has no effect).sys.stdin
,sys.stdout
, andsys.stderr
all use UTF-8 as their text encoding, with thesurrogateescape
error handler being enabled forsys.stdin
andsys.stdout
(sys.stderr
continues to usebackslashreplace
as it does in the default locale-aware mode)
As a consequence of the changes in those lower level APIs, other higher level APIs also exhibit different default behaviours:
Command line arguments, environment variables and filenames are decoded to text using the UTF-8 encoding.
os.fsdecode()
andos.fsencode()
use the UTF-8 encoding.open()
,io.open()
, andcodecs.open()
use the UTF-8 encoding by default. However, they still use the strict error handler by default so that attempting to open a binary file in text mode is likely to raise an exception rather than producing nonsense data.
Note that the standard stream settings in UTF-8 mode can be overridden by
PYTHONIOENCODING
(just as they can be in the default locale-aware mode).If set to
0
, the interpreter runs in its default locale-aware mode.Setting any other non-empty string causes an error during interpreter initialisation.
If this environment variable is not set at all, then the interpreter defaults to using the current locale settings, unless the current locale is identified as a legacy ASCII-based locale (as described for
PYTHONCOERCECLOCALE
), and locale coercion is either disabled or fails. In such legacy locales, the interpreter will default to enabling UTF-8 mode unless explicitly instructed not to do so.Also available as the
-X
utf8
option.バージョン 3.7 で追加: より詳しくは PEP 540 を参照してください。
1.2.1. デバッグモード変数¶
Setting these variables only has an effect in a debug build of Python.
-
PYTHONTHREADDEBUG
¶ 設定された場合、 Python はスレッドデバッグ情報を表示します。
Need Python configured with the
--with-pydebug
build option.
-
PYTHONDUMPREFS
¶ 設定された場合、 Python はインタプリタのシャットダウン後に残っているオブジェクトと参照カウントをダンプします。
Need Python configured with the
--with-trace-refs
build option.