1. コマンドラインと環境—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/using/cmdline
移動先:案内検索

1.1。 コマンドラインと環境

CPythonインタープリターは、コマンドラインと環境をスキャンしてさまざまな設定を探します。

1.1。 コマンドライン

Pythonを呼び出すときは、次のオプションのいずれかを指定できます。

python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]

もちろん、最も一般的な使用例は、スクリプトの単純な呼び出しです。

python myscript.py

1.1.1。 インターフェイスオプション

インタプリタインターフェイスはUNIXシェルのインターフェイスに似ていますが、いくつかの追加の呼び出しメソッドを提供します。

  • ttyデバイスに接続された標準入力で呼び出されると、コマンドの入力を求められ、EOF(ファイルの終わり文字。UNIXの Ctrl-D またはで生成できます)まで実行されます。 Ctrl-Z、Enter (Windowsの場合))が読み取られます。
  • ファイル名引数またはファイルを標準入力として呼び出すと、そのファイルからスクリプトを読み取って実行します。
  • ディレクトリ名引数を指定して呼び出されると、そのディレクトリから適切な名前のスクリプトを読み取って実行します。
  • -c commandで呼び出されると、コマンドとして指定されたPythonステートメントが実行されます。 ここで、コマンドには、改行で区切られた複数のステートメントが含まれる場合があります。 先頭の空白はPythonステートメントで重要です!
  • -m module-nameで呼び出されると、指定されたモジュールはPythonモジュールパスに配置され、スクリプトとして実行されます。

非対話型モードでは、入力全体が実行される前に解析されます。

インターフェイスオプションは、インタプリタによって消費されるオプションのリストを終了します。連続するすべての引数は、 sys.argv になります。最初の要素である添え字ゼロ(sys.argv[0])は文字列であることに注意してください。プログラムのソースを反映しています。

-c <command>

コマンドでPythonコードを実行します。 command は、通常のモジュールコードのように、先頭に空白を付けて、改行で区切った1つ以上のステートメントにすることができます。

このオプションを指定すると、 sys.argv の最初の要素は"-c"になり、現在のディレクトリが sys.path の先頭に追加されます(モジュールを許可します)トップレベルモジュールとしてインポートされるそのディレクトリ内)。

-m <module-name>

sys.path で名前付きモジュールを検索し、その内容を __ main __ モジュールとして実行します。

引数はモジュール名であるため、ファイル拡張子(.py)を指定しないでください。 モジュール名は有効な絶対Pythonモジュール名である必要がありますが、実装は常にこれを強制するとは限りません(例: ハイフンを含む名前を使用できる場合があります)。

パッケージ名(名前空間パッケージを含む)も許可されます。 通常のモジュールの代わりにパッケージ名を指定すると、インタプリタはメインモジュールとして<pkg>.__main__を実行します。 この動作は、スクリプト引数としてインタプリタに渡されるディレクトリとzipファイルの処理に意図的に似ています。

ノート

このオプションは、Pythonモジュールファイルがないため、Cで記述された組み込みモジュールおよび拡張モジュールでは使用できません。 ただし、元のソースファイルが利用できない場合でも、プリコンパイルされたモジュールには引き続き使用できます。

このオプションを指定すると、 sys.argv の最初の要素がモジュールファイルへのフルパスになります(モジュールファイルが配置されている間、最初の要素は"-m"に設定されます)。 )。 -c オプションと同様に、現在のディレクトリが sys.path の先頭に追加されます。

-I オプションを使用して、 sys.path に現在のディレクトリもユーザーのsite-packagesディレクトリも含まれていない分離モードでスクリプトを実行できます。 すべての PYTHON*環境変数も無視されます。

多くの標準ライブラリモジュールには、スクリプトとして実行時に呼び出されるコードが含まれています。 例は timeit モジュールです。

python -m timeit -s 'setup here' 'benchmarked code here'
python -m timeit -h # for details

も参照してください

runpy.run_module()

Pythonコードで直接利用できる同等の機能

PEP 338 –モジュールをスクリプトとして実行

バージョン3.1で変更:パッケージ名を指定して__main__サブモジュールを実行します。

バージョン3.4で変更:名前空間パッケージもサポートされています

-

標準入力( sys.stdin )からコマンドを読み取ります。 標準入力が端子の場合、 -i が暗示されます。

このオプションを指定すると、 sys.argv の最初の要素は"-"になり、現在のディレクトリが sys.path の先頭に追加されます。

<script>

script に含まれるPythonコードを実行します。これは、Pythonファイル、__main__.pyファイルを含むディレクトリ、または[ X211X] ファイル。

このオプションを指定すると、 sys.argv の最初の要素は、コマンドラインで指定されたスクリプト名になります。

スクリプト名がPythonファイルを直接参照している場合、そのファイルを含むディレクトリが sys.path の先頭に追加され、ファイルは __ main __ モジュールとして実行されます。

スクリプト名がディレクトリまたはzipファイルを参照している場合、スクリプト名は sys.path の先頭に追加され、その場所にある__main__.pyファイルは __ main __ [として実行されます。 X183X]モジュール。

-I オプションを使用して、 sys.path にスクリプトのディレクトリもユーザーのsite-packagesディレクトリも含まれていない分離モードでスクリプトを実行できます。 すべての PYTHON*環境変数も無視されます。

も参照してください

runpy.run_path()

Pythonコードで直接利用できる同等の機能


インターフェイスオプションが指定されていない場合、 -i が暗黙指定され、sys.argv[0]は空の文字列("")であり、現在のディレクトリがの先頭に追加されます。 sys.path 。 また、プラットフォームで利用可能な場合、タブ補完と履歴編集が自動的に有効になります( Readline構成を参照)。

も参照してください

インタプリタの呼び出し


バージョン3.4で変更:タブ補完と履歴編集の自動有効化。


1.1.2。 一般的なオプション

-?

-h
--help

すべてのコマンドラインオプションの簡単な説明を印刷します。
-V
--version

Pythonのバージョン番号を出力して終了します。 出力例は次のとおりです。

Python 3.8.0b2+

2回指定すると、次のようなビルドに関する詳細情報を出力します。

Python 3.8.0b2+ (3.8:0c076caaa8, Apr 20 2019, 21:55:00)
[GCC 6.2.0 20161005]

バージョン3.6の新機能: -VVオプション。


1.1.3。 その他のオプション

-b

bytes または bytearraystr または bytesint と比較するときに警告を発行します。 オプションを2回指定するとエラーが発生します(-bb)。

バージョン3.5で変更: バイトint の比較に影響します。

-B
指定された場合、Pythonはソースモジュールのインポート時に.pycファイルを書き込もうとしません。 PYTHONDONTWRITEBYTECODE も参照してください。
--check-hash-based-pycs default|always|never

ハッシュベースの.pycファイルの検証動作を制御します。 キャッシュされたバイトコードの無効化を参照してください。 defaultに設定すると、チェックされているハッシュベースのハッシュベースのバイトコードキャッシュファイルとチェックされていないハッシュベースのバイトコードキャッシュファイルが、デフォルトのセマンティクスに従って検証されます。 alwaysに設定すると、すべてのハッシュベースの.pycファイルは、チェックされているかどうかに関係なく、対応するソースファイルに対して検証されます。 neverに設定すると、ハッシュベースの.pycファイルは対応するソースファイルに対して検証されません。

タイムスタンプベースの.pycファイルのセマンティクスは、このオプションの影響を受けません。

-d
パーサーのデバッグ出力をオンにします(コンパイルオプションに応じて、エキスパートのみ)。 PYTHONDEBUG も参照してください。
-E
すべての PYTHON*環境変数を無視します。 PYTHONPATH および PYTHONHOME 、設定されている可能性があります。
-i

スクリプトが最初の引数として渡されるか、 -c オプションが使用される場合、 sys.stdin がターミナル。 PYTHONSTARTUP ファイルが読み込まれません。

これは、スクリプトが例外を発生させたときにグローバル変数またはスタックトレースを検査するのに役立ちます。 PYTHONINSPECT も参照してください。

-I

Pythonを分離モードで実行します。 これは、-Eと-sも意味します。 分離モードでは、 sys.path には、スクリプトのディレクトリもユーザーのサイトパッケージディレクトリも含まれていません。 すべての PYTHON*環境変数も無視されます。 ユーザーが悪意のあるコードを挿入するのを防ぐために、さらに制限が課される場合があります。

バージョン3.4の新機能。

-O

__ debug __ の値を条件とするassertステートメントとコードを削除します。 .pyc拡張子の前に.opt-1を追加して、コンパイル済み( bytecode )ファイルのファイル名を拡張します( PEP 488 を参照)。 PYTHONOPTIMIZE も参照してください。

バージョン3.5で変更: PEP 488 に従って.pycファイル名を変更します。

-OO

-O を実行し、docstringも破棄します。 .pyc拡張子の前に.opt-2を追加して、コンパイル済み( bytecode )ファイルのファイル名を拡張します( PEP 488 を参照)。

バージョン3.5で変更: PEP 488 に従って.pycファイル名を変更します。

-q

インタラクティブモードでも、著作権とバージョンのメッセージを表示しないでください。

バージョン3.2の新機能。

-R

ハッシュランダム化をオンにします。 このオプションは、 PYTHONHASHSEED 環境変数が0に設定されている場合にのみ効果があります。これは、ハッシュのランダム化がデフォルトで有効になっているためです。

以前のバージョンのPythonでは、このオプションはハッシュランダム化をオンにするため、strオブジェクトとbytesオブジェクトの__hash__()値は、予測できないランダム値で「ソルト」されます。 それらは個々のPythonプロセス内で一定のままですが、Pythonを繰り返し呼び出す間で予測することはできません。

ハッシュのランダム化は、dict構造の最悪の場合のパフォーマンスであるO(n ^ 2)の複雑さを悪用する、慎重に選択された入力によって引き起こされるサービス拒否に対する保護を提供することを目的としています。 詳細については、 http://www.ocert.org/advisories/ocert-2011-003.htmlを参照してください。

PYTHONHASHSEED を使用すると、ハッシュシードシークレットに固定値を設定できます。

バージョン3.7で変更:このオプションは無視されなくなりました。

バージョン3.2.3の新機能。

-s

ユーザーサイトパッケージディレクトリsys.path に追加しないでください。

も参照してください

PEP 370 –ユーザーごとのサイト-パッケージディレクトリ

-S
モジュール site のインポートと、それに伴う sys.path のサイト依存の操作を無効にします。 また、 site が後で明示的にインポートされる場合は、これらの操作を無効にします(トリガーする場合は、 site.main()を呼び出します)。
-u

stdoutストリームとstderrストリームを強制的にバッファリング解除します。 このオプションは、stdinストリームには影響しません。

PYTHONUNBUFFERED も参照してください。

バージョン3.7で変更: stdoutおよびstderrストリームのテキストレイヤーがバッファリングされなくなりました。

-v
モジュールが初期化されるたびにメッセージを出力し、モジュールがロードされた場所(ファイル名または組み込みモジュール)を示します。 2回指定すると(-vv)、モジュールの検索時にチェックされるファイルごとにメッセージを出力します。 終了時のモジュールのクリーンアップに関する情報も提供します。 PYTHONVERBOSE も参照してください。

-W arg

警告制御。 Pythonの警告機構は、デフォルトで警告メッセージを sys.stderr に出力します。 一般的な警告メッセージの形式は次のとおりです。

file:line: category: message

デフォルトでは、各警告は、それが発生するソース行ごとに1回出力されます。 このオプションは、警告が印刷される頻度を制御します。

複数の -W オプションを指定できます。 警告が複数のオプションに一致する場合、最後に一致したオプションのアクションが実行されます。 無効な -W オプションは無視されます(ただし、最初の警告が発行されると、無効なオプションに関する警告メッセージが出力されます)。

警告は、 PYTHONWARNINGS 環境変数を使用して、および warnings モジュールを使用してPythonプログラム内から制御することもできます。

最も単純な設定では、プロセスによって発行されるすべての警告に特定のアクションが無条件に適用されます(デフォルトで無視される警告も含まれます)。

-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

アクション名は必要に応じて省略できます(例: -Wi-Wd-Wa-We)とインタプリタは、それらを適切なアクション名に解決します。

詳細については、警告フィルターおよび警告フィルターの説明を参照してください。

-x
ソースの最初の行をスキップして、#!cmdの非Unix形式の使用を許可します。 これは、DOS固有のハッキングのみを目的としています。
-X

さまざまな実装固有のオプション用に予約されています。 CPythonは現在、次の可能な値を定義しています。

  • -X faulthandlerは、 faulthandler を有効にします。

  • -X showrefcountは、プログラムが終了したとき、または対話型インタプリタの各ステートメントの後に、合計参照カウントと使用されたメモリブロックの数を出力します。 これはデバッグビルドでのみ機能します。

  • -X tracemallocは、 tracemalloc モジュールを使用してPythonメモリ割り当てのトレースを開始します。 デフォルトでは、最新のフレームのみがトレースのトレースバックに保存されます。 -X tracemalloc=NFRAMEを使用して、 NFRAME フレームのトレースバック制限でトレースを開始します。 詳細については、 tracemalloc.start()を参照してください。

  • -X showalloccountは、プログラムの終了時に、タイプごとに割り当てられたオブジェクトの総数を出力します。 これは、PythonがCOUNT_ALLOCSを定義してビルドされた場合にのみ機能します。

  • -X importtimeは、各インポートにかかる時間を示します。 モジュール名、累積時間(ネストされたインポートを含む)、および自己時間(ネストされたインポートを除く)が表示されます。 マルチスレッドアプリケーションでは、その出力が壊れている可能性があることに注意してください。 一般的な使用法はpython3 -X importtime -c 'import asyncio'です。 PYTHONPROFILEIMPORTTIME も参照してください。

  • -X dev:CPythonの「開発モード」を有効にし、デフォルトで有効にするにはコストがかかりすぎる追加のランタイムチェックを導入します。 コードが正しい場合は、デフォルトよりも冗長であってはなりません。新しい警告は、問題が検出された場合にのみ発行されます。 開発者モードの効果:

    • default警告フィルターを -W defaultとして追加します。

    • メモリアロケータにデバッグフックをインストールします。 PyMem_SetupDebugHooks() C関数を参照してください。

    • faulthandler モジュールを有効にして、クラッシュ時にPythonトレースバックをダンプします。

    • 非同期デバッグモードを有効にします。

    • sys.flagsdev_mode属性をTrueに設定します。

    • io.IOBase デストラクタはclose()例外をログに記録します。

  • -X utf8は、オペレーティングシステムインターフェイスのUTF-8モードを有効にし、デフォルトのロケール認識モードを上書きします。 -X utf8=0は、UTF-8モードを明示的に無効にします(そうでなければ自動的にアクティブになる場合でも)。 詳細については、 PYTHONUTF8 を参照してください。

  • -X pycache_prefix=PATHを使用すると、.pycファイルを、コードツリーではなく、指定されたディレクトリをルートとする並列ツリーに書き込むことができます。 PYTHONPYCACHEPREFIX も参照してください。

また、任意の値を渡し、 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の新機能: -X pycache_prefixオプション。 -X devオプションは、 io.IOBase デストラクタにclose()例外をログに記録するようになりました。


1.1.4。 使用してはいけないオプション

-J
Jython で使用するために予約されています。


1.2。 環境変数

これらの環境変数はPythonの動作に影響を与え、コマンドラインが-Eまたは-I以外に切り替わる前に処理されます。 コマンドラインスイッチは、競合がある場合に環境変数をオーバーライドするのが通例です。

PYTHONHOME

標準のPythonライブラリの場所を変更します。 デフォルトでは、ライブラリはprefix/lib/pythonversionexec_prefix/lib/pythonversionで検索されます。ここで、prefixexec_prefixはインストールに依存するディレクトリで、どちらもデフォルトで/usr/localになります。 ]。

PYTHONHOME が単一のディレクトリに設定されている場合、その値はprefixexec_prefixの両方を置き換えます。 これらに異なる値を指定するには、 PYTHONHOMEprefix:exec_prefixに設定します。

PYTHONPATH

モジュールファイルのデフォルトの検索パスを拡張します。 形式はシェルの PATHと同じです: os.pathsep で区切られた1つ以上のディレクトリパス名(例: Unixの場合はコロン、Windowsの場合はセミコロン)。 存在しないディレクトリは黙って無視されます。

通常のディレクトリに加えて、個々の PYTHONPATH エントリは、純粋なPythonモジュール(ソース形式またはコンパイル済み形式)を含むzipファイルを参照する場合があります。 拡張モジュールはzipファイルからインポートできません。

デフォルトの検索パスはインストールによって異なりますが、通常はprefix/lib/pythonversionで始まります(上記の PYTHONHOME を参照)。 PYTHONPATH常にが追加されます。

上記のインターフェイスオプションで説明したように、 PYTHONPATH の前の検索パスに追加のディレクトリが挿入されます。 検索パスは、Pythonプログラム内から変数 sys.path として操作できます。

PYTHONSTARTUP
これが読み取り可能なファイルの名前である場合、そのファイル内のPythonコマンドは、最初のプロンプトがインタラクティブモードで表示される前に実行されます。 ファイルは、インタラクティブコマンドが実行されるのと同じ名前空間で実行されるため、ファイルで定義またはインポートされたオブジェクトは、インタラクティブセッションで修飾なしで使用できます。 このファイルのプロンプト sys.ps1sys.ps2 およびフック sys .__ Interactivehook __ を変更することもできます。
PYTHONOPTIMIZE
これが空でない文字列に設定されている場合は、 -O オプションを指定するのと同じです。 整数に設定すると、 -O を複数回指定するのと同じです。
PYTHONBREAKPOINT

これが設定されている場合、ドットパス表記を使用して呼び出し可能オブジェクトに名前を付けます。 呼び出し可能オブジェクトを含むモジュールがインポートされ、呼び出し可能オブジェクトは、組み込みの breakpoint()によって呼び出される sys.breakpointhook()のデフォルト実装によって実行されます。 設定されていない場合、または空の文字列に設定されている場合は、値「pdb.set_trace」と同等です。 これを文字列「0」に設定すると、 sys.breakpointhook()のデフォルトの実装は、ただちに戻る以外に何もしません。

バージョン3.7の新機能。

PYTHONDEBUG
これが空でない文字列に設定されている場合は、 -d オプションを指定するのと同じです。 整数に設定すると、 -d を複数回指定するのと同じです。
PYTHONINSPECT

これが空でない文字列に設定されている場合は、 -i オプションを指定するのと同じです。

この変数は、 os.environ を使用してPythonコードで変更し、プログラムの終了時に検査モードを強制することもできます。

PYTHONUNBUFFERED
これが空でない文字列に設定されている場合は、 -u オプションを指定するのと同じです。
PYTHONVERBOSE
これが空でない文字列に設定されている場合は、 -v オプションを指定するのと同じです。 整数に設定すると、 -v を複数回指定するのと同じです。
PYTHONCASEOK
これが設定されている場合、Pythonは import ステートメントの大文字と小文字を無視します。 これは、WindowsとOSXでのみ機能します。
PYTHONDONTWRITEBYTECODE
これが空でない文字列に設定されている場合、Pythonはソースモジュールのインポート時に.pycファイルを書き込もうとしません。 これは、 -B オプションを指定するのと同じです。
PYTHONPYCACHEPREFIX

これが設定されている場合、Pythonはソースツリー内の__pycache__ディレクトリではなく、このパスのミラーディレクトリツリーに.pycファイルを書き込みます。 これは、 -X pycache_prefix=PATHオプションを指定するのと同じです。

バージョン3.8の新機能。

PYTHONHASHSEED

この変数がrandomに設定または設定されていない場合、ランダム値を使用してstrオブジェクトとbytesオブジェクトのハッシュをシードします。

PYTHONHASHSEED が整数値に設定されている場合、ハッシュランダム化の対象となるタイプのhash()を生成するための固定シードとして使用されます。

その目的は、インタープリター自体のセルフテストなど、繰り返し可能なハッシュを許可すること、またはPythonプロセスのクラスターがハッシュ値を共有できるようにすることです。

整数は、[0,4294967295]の範囲の10進数である必要があります。 値0を指定すると、ハッシュのランダム化が無効になります。

バージョン3.2.3の新機能。

PYTHONIOENCODING

インタプリタを実行する前にこれを設定すると、構文encodingname:errorhandlerでstdin / stdout / stderrに使用されるエンコーディングが上書きされます。 encodingname:errorhandlerの両方の部分はオプションであり、 str.encode()と同じ意味を持ちます。

stderrの場合、:errorhandlerの部分は無視されます。 ハンドラーは常に'backslashreplace'になります。

バージョン3.4で変更: encodingnameパーツはオプションになりました。

バージョン3.6で変更: Windowsでは、 PYTHONLEGACYWINDOWSSTDIO も指定されていない限り、この変数で指定されたエンコーディングはインタラクティブコンソールバッファーでは無視されます。 標準ストリームを介してリダイレクトされたファイルとパイプは影響を受けません。

PYTHONNOUSERSITE

これが設定されている場合、Pythonはユーザーサイトパッケージディレクトリsys.path に追加しません。

も参照してください

PEP 370 –ユーザーごとのサイト-パッケージディレクトリ

PYTHONUSERBASE

ユーザーベースディレクトリを定義します。これは、python setup.py install --userユーザーサイトパッケージディレクトリおよび Distutilsインストールパスのパスを計算するために使用されます。

も参照してください

PEP 370 –ユーザーごとのサイト-パッケージディレクトリ

PYTHONEXECUTABLE
この環境変数が設定されている場合、sys.argv[0]は、Cランタイムを介して取得された値ではなく、その値に設定されます。 Mac OSXでのみ動作します。
PYTHONWARNINGS

これは、 -W オプションと同等です。 カンマ区切りの文字列に設定すると、 -W を複数回指定するのと同じで、リストの後半のフィルターがリストの前のフィルターよりも優先されます。

最も単純な設定では、プロセスによって発行されるすべての警告に特定のアクションが無条件に適用されます(デフォルトで無視される警告も含まれます)。

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

詳細については、警告フィルターおよび警告フィルターの説明を参照してください。

PYTHONFAULTHANDLER

この環境変数が空でない文字列に設定されている場合、起動時に faulthandler.enable()が呼び出されます。SIGSEGVSIGFPESIGABRTSIGBUS、およびSIGILLは、Pythonトレースバックをダンプするように通知します。 これは、 -X faulthandlerオプションと同等です。

バージョン3.3の新機能。

PYTHONTRACEMALLOC

この環境変数が空でない文字列に設定されている場合は、 tracemalloc モジュールを使用してPythonメモリ割り当てのトレースを開始します。 変数の値は、トレースのトレースバックに格納されるフレームの最大数です。 たとえば、PYTHONTRACEMALLOC=1は最新のフレームのみを格納します。 詳細については、 tracemalloc.start()を参照してください。

バージョン3.4の新機能。

PYTHONPROFILEIMPORTTIME

この環境変数が空でない文字列に設定されている場合、Pythonは各インポートにかかる時間を表示します。 これは、コマンドラインで-X importtimeを設定するのとまったく同じです。

バージョン3.7の新機能。

PYTHONASYNCIODEBUG

この環境変数が空でない文字列に設定されている場合は、 asyncio モジュールのデバッグモードを有効にします。

バージョン3.4の新機能。

PYTHONMALLOC

Pythonメモリアロケータを設定するか、デバッグフックをインストールします。

Pythonで使用されるメモリアロケータのファミリを設定します。

  • defaultデフォルトのメモリアロケータを使用します。

  • malloc:すべてのドメイン(PYMEM_DOMAIN_RAWPYMEM_DOMAIN_MEMPYMEM_DOMAIN_OBJ)に対してCライブラリのmalloc()関数を使用します。

  • pymallocPYMEM_DOMAIN_MEMおよびPYMEM_DOMAIN_OBJドメインには pymallocアロケータを使用し、PYMEM_DOMAIN_RAWにはmalloc()関数を使用しますドメイン。

デバッグフックをインストールします。

  • debugデフォルトのメモリアロケータの上にデバッグフックをインストールします。

  • malloc_debugmallocと同じですが、デバッグフックもインストールします。

  • pymalloc_debugpymallocと同じですが、デバッグフックもインストールします。

デフォルトのメモリアロケータおよび PyMem_SetupDebugHooks()関数(Pythonメモリアロケータにデバッグフックをインストールする)を参照してください。

バージョン3.7で変更: "default"アロケータを追加しました。

バージョン3.6の新機能。

PYTHONMALLOCSTATS

空でない文字列に設定すると、Pythonは、新しいpymallocオブジェクトアリーナが作成されるたびに、シャットダウン時に pymallocメモリアロケータの統計を出力します。

PYTHONMALLOC 環境変数を使用してCライブラリのmalloc()アロケータを強制する場合、またはPythonがpymallocなしで構成されている場合、この変数は無視されます。サポート。

バージョン3.6で変更:この変数は、リリースモードでコンパイルされたPythonでも使用できるようになりました。 空の文字列に設定しても効果がなくなりました。

PYTHONLEGACYWINDOWSFSENCODING

空でない文字列に設定すると、デフォルトのファイルシステムエンコーディングおよびエラーモードは、それぞれ「mbcs」および「replace」の3.6より前の値に戻ります。 それ以外の場合は、新しいデフォルトの「utf-8」と「surrogatepass」が使用されます。

これは、 sys._enablelegacywindowsfsencoding()を使用して実行時に有効にすることもできます。

バージョン3.6の新機能:詳細については、 PEP 529 を参照してください。

PYTHONLEGACYWINDOWSSTDIO

空でない文字列に設定されている場合、新しいコンソールリーダーとライターを使用しません。 これは、Unicode文字が、utf-8を使用するのではなく、アクティブなコンソールコードページに従ってエンコードされることを意味します。

この変数は、コンソールバッファーを参照するのではなく、標準ストリームが(ファイルまたはパイプに)リダイレクトされる場合は無視されます。

バージョン3.6の新機能。

PYTHONCOERCECLOCALE

0に設定すると、メインのPythonコマンドラインアプリケーションは、従来のASCIIベースのCおよびPOSIXロケールをより高性能なUTF-8ベースの代替ロケールに強制変換することをスキップします。

この変数が not に設定されている(または0以外の値に設定されている)場合、LC_ALLロケールオーバーライド環境変数も設定されず、現在のロケールが報告されますLC_CTYPEカテゴリの場合、デフォルトのCロケール、または明示的にASCIIベースのPOSIXロケールのいずれかである場合、PythonCLIは[インタープリターランタイムをロードする前にリストされた順序のX378X] カテゴリー:

  • C.UTF-8

  • C.utf8

  • UTF-8

これらのロケールカテゴリのいずれかの設定が成功すると、Pythonランタイムが初期化される前に、LC_CTYPE環境変数も現在のプロセス環境でそれに応じて設定されます。 これにより、インタープリター自体と、同じプロセスで実行されている他のロケール対応コンポーネント(GNU readlineライブラリなど)の両方に表示されるだけでなく、更新された設定がサブプロセスにも表示されるようになります(これらのプロセスがPythonインタープリターを実行しているかどうか)、および現在のCロケールではなく環境を照会する操作(Python独自の locale.getdefaultlocale()など)。

これらのロケールの1つを(明示的にまたは上記の暗黙的なロケール強制を介して)構成すると、 sys.stdin および sys.stdoutのsurrogateescape エラーハンドラーが自動的に有効になります。 ( sys.stderr は、他のロケールと同様にbackslashreplaceを引き続き使用します)。 このストリーム処理動作は、通常どおり PYTHONIOENCODING を使用してオーバーライドできます。

デバッグの目的で、PYTHONCOERCECLOCALE=warnを設定すると、ロケール強制がアクティブになった場合、またはが強制をトリガーしたロケールがまだ存在する場合、Pythonはstderrで警告メッセージを出力します。 Pythonランタイムが初期化されるときにアクティブになります。

また、ロケール強制が無効になっている場合、または適切なターゲットロケールが見つからない場合でも、 PYTHONUTF8 はレガシーASCIIベースのロケールでデフォルトでアクティブ化されることに注意してください。 インタプリタがシステムインターフェイスにUTF-8ではなくASCIIを使用するように強制するには、両方の機能を無効にする必要があります。

バージョン3.7の新機能:詳細については、 PEP 538 を参照してください。

PYTHONDEVMODE

この環境変数が空でない文字列に設定されている場合は、CPythonの「開発モード」を有効にします。 -X devオプションを参照してください。

バージョン3.7の新機能。

PYTHONUTF8

1に設定すると、インタプリタのUTF-8モードが有効になります。このモードでは、現在のロケール設定に関係なく、UTF-8がシステムインターフェイスのテキストエンコーディングとして使用されます。

この意味は:


これらの低レベルAPIの変更の結果として、他の高レベルAPIも異なるデフォルトの動作を示します。

  • コマンドライン引数、環境変数、およびファイル名は、UTF-8エンコーディングを使用してテキストにデコードされます。

  • os.fsdecode()および os.fsencode()はUTF-8エンコーディングを使用します。

  • open()io.open()、および codecs.open()は、デフォルトでUTF-8エンコーディングを使用します。 ただし、デフォルトでは厳密なエラーハンドラーを使用しているため、バイナリファイルをテキストモードで開こうとすると、意味のないデータが生成されるのではなく、例外が発生する可能性があります。


UTF-8モードの標準ストリーム設定は、 PYTHONIOENCODING で上書きできることに注意してください(デフォルトのロケール認識モードの場合と同じです)。

0に設定すると、インタープリターはデフォルトのロケール認識モードで実行されます。

他の空でない文字列を設定すると、インタプリタの初期化中にエラーが発生します。

この環境変数がまったく設定されていない場合、インタープリターはデフォルトで現在のロケール設定を使用します。現在のロケールがレガシーASCIIベースのロケールとして識別されない限り で説明) PYTHONCOERCECLOCALE )、およびロケール強制が無効になっているか、失敗します。 このようなレガシーロケールでは、明示的に指示されない限り、インタプリタはデフォルトでUTF-8モードを有効にします。

-X utf8オプションとしてもご利用いただけます。

バージョン3.7の新機能:詳細については、 PEP 540 を参照してください。

1.2.1。 デバッグモード変数

これらの変数の設定は、Pythonのデバッグビルドでのみ効果があります。

PYTHONTHREADDEBUG

設定されている場合、Pythonはスレッドデバッグ情報を出力します。

--with-pydebugビルドオプションで構成されたPythonが必要です。

PYTHONDUMPREFS

設定されている場合、Pythonは、インタープリターをシャットダウンした後もオブジェクトと参照カウントをダンプします。

--with-trace-refsビルドオプションで構成されたPythonが必要です。