# 1. コマンドラインと環境

CPython インタプリタはコマンドラインと環境を読み取って様々な設定を行ないます。

他の実装のコマンドラインスキームは CPython とは異なります。さらなる情報は 別のPythonの実装 を参照してください。

## 1.1. コマンドライン

Python を起動するとき、以下のうち任意のオプションを指定できます:

    python [-bBdEiOQsRStuUvVWxX3?] [-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 出来るようになります)。

`-m``<module-name>`

  `sys.path` から指定されたモジュール名のモジュールを探し、その内容を `__main__` モジュールとして実行します。

  引数は module 名なので、拡張子 (`.py`) を含めてはいけません。 `module-name` は有効な Python のモジュール名であるべきですが、実装がそれを強制しているとは限りません (例えば、ハイフンを名前に含める事を許可するかもしれません)。

  パッケージ名を指定することもできます。通常のモジュールの代わりにパッケージ名を指定された場合、インタープリタは `<pkg>.__main__` をメインモジュールとして実行します。この動作はインタープリタのスクリプト引数としてディレクトリやzipファイルを指定された時の動作と意図的に似せています。

  注釈

  このオプションはビルトインモジュールや C で書かれた拡張モジュールには利用できません。 Python モジュールファイルを持っていないからです。しかし、コンパイル済みのモジュールは、たとえ元のソースファイルがなくても利用可能です。

  このオプションが指定された場合、 `sys.argv` の先頭要素はモジュールファイルのフルパスになります。 `-c` オプションのように、カレントディレクトリが `sys.path` の先頭に追加されます。

  多くの標準ライブラリモジュールにはスクリプトとして実行された時のためのコードがあります。例えば、 `timeit` モジュールは次のように実行可能です:

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

  参考

  `runpy.run_module()`
    Python コードで直接使える等価な機能

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

  バージョン 2.4 で追加.

  バージョン 2.5 で変更: パッケージ内のモジュールを指定できるようになりました。

  バージョン 2.7 で変更: パッケージ名を指定したときに `__main__` サブモジュールを実行するようにしました。そのモジュールを検索している間の sys.argv[0] は `"-m"` に設定されるようになりました。 (以前は間違って `"-c"` が設定されていました)

`-`

  標準入力 (`sys.stdin`) からコマンドを読み込みます。標準入力がターミナルだった場合、暗黙的に `-i` オプションが指定されます。

  このオプションが指定された場合、 `sys.argv` の最初の要素は `"-"` で、カレントディレクトリが `sys.path` の先頭に追加されます。

  参考

  `runpy.run_path()`
    Python コードで直接使える等価な機能

`<script>`

  script 内の Python コードを実行します。 script は、Python ファイル、 `__main__.py` ファイルがあるディレクトリ、 `__main__.py` ファイルがある zip ファイルのいずれかの、ファイルシステム上の (絶対または相対) パスでなければなりません。

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

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

  スクリプト名がディレクトリか zip ファイルを指定していた場合、スクリプト名が `sys.path` に追加され、その中の `__main__.py` ファイルが `__main__` モジュールとして実行されます。

  バージョン 2.5 で変更: トップレベルに `__main__.py` ファイルを持つディレクトリや zip ファイルが有効な Python スクリプトとなりました。

インターフェイスオプションが与えられなかった場合、 `-i` が暗黙的に指定され、 `sys.argv[0]` は空白文字列 (`""`)で、カレントディレクトリが `sys.path` の先頭に追加されます。

参考

インタプリタを起動する

### 1.1.2. 一般オプション

`-?```
`-h```
`--help```

  全コマンドラインオプションの短い説明を出力します。

  バージョン 2.5 で変更: `--help` 形式

`-V```
`--version```

  Python のバージョン番号を表示して終了します。出力の例:

      Python 2.5.1

  バージョン 2.5 で変更: `--version` 形式

### 1.1.3. その他のオプション

`-b```

  Issue a warning when comparing `unicode` with `bytearray`. Issue an error when the option is given twice (`-bb`).

  Note that, unlike the corresponding Python 3.x flag, this will not emit warnings for comparisons between `str` and `unicode`. Instead, the `str` instance will be implicitly decoded to `unicode` and Unicode comparison used.

  バージョン 2.6 で追加.

`-B```

  Python は import したソースモジュールの `.pyc` や `.pyo` ファイルの作成を試みません。 `PYTHONDONTWRITEBYTECODE` 環境変数も参照してください。

  バージョン 2.6 で追加.

`-d```

  パーサーのデバッグ出力を有効にします。(呪文を解する人だけ使ってください。コンパイルオプションに依存します)。 `PYTHONDEBUG` も参照してください。

`-E```

  全ての `PYTHON*` 環境変数を無視します。例えば、 `PYTHONPATH` や `PYTHONHOME` などです。

  バージョン 2.2 で追加.

`-i```

  最初の引数にスクリプトが指定された場合や `-c` オプションが利用された場合、 `sys.stdin` がターミナルに出力されない場合も含めて、スクリプトかコマンドを実行した後にインタラクティブモードに入ります。 `PYTHONSTARTUP` ファイルは読み込みません。

  このオプションはグローバル変数や、スクリプトが例外を発生させるときにそのスタックトレースを調べるのに便利です。 `PYTHONINSPECT` も参照してください。

`-O```

  基本的な最適化を有効にします。コンパイル済み (bytecode) ファイルの拡張子を `.pyc` から `.pyo` に変更します。 `PYTHONOPTIMIZE` も参照してください。

`-OO```

  `-O` の最適化に加えて、ドキュメンテーション文字列の除去も行ないます。

`-Q``<arg>`

  除算制御。引数は以下のうち1つでなければなりません:

  `old`
    int/int と long/long の除算は、 int か long を返します。 (デフォルト)
  `new`
    新しい除算方式。 int/int や long/long の除算が float を返します。
  `warn`
    古い除算方式で、 int/int や long/long 除算に警告を表示します。
  `warnall`
    古い除算方式で、全ての除算演算子に対して警告を表示します。

  参考

  `Tools/scripts/fixdiv.py`
    `warnall` を使っています.

  PEP 238 -- Changing the division operator

`-R```

  ハッシュのランダム化をします。文字列、バイト列、datetime オブジェクトの `__hash__()` 値は予測不可能なランダム値で "ソルト化" されます。 ハッシュ値は単独の Python プロセス内では定数であり続けますが、Python を繰り返し起動する毎に、予測できなくなります。

  これは、慎重に選ばれた入力で辞書挿入の最悪性能 O(n^2) 複雑性を悪用することで引き起こされるサービス妨害 (denial-of-service) に対する保護を目的とするものです。詳細は http://www.ocert.org/advisories/ocert-2011-003.html を参照してください。

  ハッシュ値の変更は辞書からキーを取り出す順序に影響します。 Python はこの順序付けを保証していませんが (そして通常 32-bit と 64-bit の間でも異なります)、たくさんの実世界でのコードが、ランダム化がデフォルトで無効というこの保障されない振る舞いに、暗黙で依存しています。

  `PYTHONHASHSEED` も参照してください。

  バージョン 2.6.8 で追加.

`-s```

  `user site-packages directory` を `sys.path` に追加しません。

  バージョン 2.6 で追加.

  参考

  PEP 370 -- Per user site-packages directory

`-S```

  `site` モジュールのインポートを無効にし、そのモジュールで行われている場所独自の `sys.path` 操作を無効にします。

`-t```

  ソースファイルが、タブ幅に依存して意味が変わるような方法でタブ文字とスペースを混ぜて含んでいる場合に警告を発生させます。このオプションを2重にする (`-tt`) とエラーになります。

`-u```

  stdin, stdout, stderr のバッファを強制的に無効にします。関係するシステムでは、 stdin, stdout, stderr をバイナリモードにします。

  `file.readlines()` や ファイルオブジェクト (`for line in sys.stdin`) はこのオプションに影響されない内部バッファリングをしています。これを回避したい場合は、 `while 1:` ループの中で `file.readline()` します。

  `PYTHONUNBUFFERED` も参照してください。

`-v```

  モジュールが初期化されるたびに、それがどこ(ファイル名やビルトインモジュール) からロードされたのかを示すメッセージを出力します。 二重に指定された場合(`-vv`)は、モジュールを検索するときにチェックされた各ファイルに対してメッセージを出力します。また、終了時のモジュールクリーンアップに関する情報も提供します。 `PYTHONVERBOSE` も参照してください。

`-W` `arg`

  警告制御。 Python の警告機構はデフォルトでは警告メッセージを `sys.stderr` に出力します。典型的な警告メッセージは次のような形式です:

      file:line: category: message

  デフォルトでは、各警告は発生したソース行ごとに一度だけ表示されます。このオプションは、警告をどれくらいの頻度で表示するかを制御します。

  複数の `-W` オプションを指定することができます。警告が1つ以上のオプションとマッチしたときは、最後にマッチしたオプションのアクションが有効になります。不正な `-W` オプションは無視されます (最初の警告が発生したときに、不正なオプションに対する警告メッセージが表示されます)。

  Python 2.7 から、 `DeprecationWarning` とその子クラスはデフォルトで無視されます。 `-Wd` オプションを指定して有効にすることができます。

  警告は Python プログラムの中から `warnings` モジュールを利用して制御することができます。

  引数の一番シンプルな形は、以下のアクション文字列(かそのユニークな短縮形) を単体で利用するものです。

  `ignore`
    全ての警告を無視する。
  `default`
    明示的にデフォルトの動作(ソース行ごとに1度警告を表示する)を要求する。
  `all`
    警告が発生するたびに表示する (これは、ループの中などで同じソース行により繰り返し警告が発生された場合に、大量のメッセージを表示します)。
  `module`
    各モジュールで最初に発生した警告を表示する。
  `once`
    プログラムで最初に発生した警告だけを表示する。
  `error`
    警告メッセージを表示する代わりに例外を発生させる。

  引数の完全形は次のようになります:

      action:message:category:module:line

  ここで、 action は上で説明されたものですが、残りのフィールドにマッチしたメッセージにだけ適用されます。空のフィールドは全ての値にマッチします。空のフィールドの後ろは除外されます。 message フィールドは表示される警告メッセージの先頭に、大文字小文字を無視してマッチします。 category フィールドは警告カテゴリにマッチします。これはクラス名でなければなりません。 category のマッチは、メッセージの実際の警告カテゴリーが指定された警告カテゴリーのサブクラスかどうかをチェックします。完全なクラス名を指定しなければなりません。 module フィールドは、(完全正規形(fully-qualified)の) モジュール名に対してマッチします。このマッチは大文字小文字を区別します。 line フィールドは行番号にマッチします。 0 は全ての行番号にマッチし、省略した時と同じです。

  参考

  `warnings` -- 警告モジュール

  PEP 230 -- Warning framework

  `PYTHONWARNINGS`

`-x```

  Unix 以外の形式の `#!cmd` を使うために、ソースの最初の行をスキップします。これは、DOS専用のハックのみを目的としています。

`-3```

  Warn about Python 3.x possible incompatibilities by emitting a `DeprecationWarning` for features that are removed or significantly changed in Python 3 and can't be detected using static code analysis.

  バージョン 2.6 で追加.

  See Python 2 から Python 3 への移植 for more details.

### 1.1.4. 使うべきでないオプション

`-J```

  Jython のために予約されています。

`-U```

  全ての文字列リテラルを、全部 unicode にします。このオプションはあなたの世界を破壊してしまうかもしれないので、このオプションを使おうとしないでください。これは、通常とは違うマジックナンバーを使って `.pyc` ファイルを生成します。ファイルの先頭に次のように書いて、このオプションの代わりにモジュール単位で unicode リテラルを有効にできます。

      from __future__ import unicode_literals

  詳細は `__future__` を参照してください。

`-X```

  別の Python の実装が独自の目的で利用するために予約されています。

## 1.2. 環境変数

以下の環境変数は Python の挙動に影響します。環境変数は -E 以外のコマンドラインスイッチの前に処理されます。衝突したときにコマンドラインスイッチが環境変数をオーバーライドするのは慣例です。

`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 コマンドを実行します。このファイルはインタラクティブコマンドが実行されるのと同じ名前空間の中で実行されるので、このファイル内で定義されたり import されたオブジェクトはインタラクティブセッションから制限無しに利用することができます。このファイルで `sys.ps1` と `sys.ps2` を変更してプロンプトを変更することもできます。

`PYTHONY2K`

  この変数に空でない文字列を設定すると、 `time` モジュールが文字列で指定される日付に4桁の年を含むことを要求するようになります。そうでなければ、2桁の年は `time` モジュールのドキュメントに書かれているルールで変換されます。

`PYTHONOPTIMIZE`

  この変数に空でない文字列を設定するのは `-O` オプションを指定するのと等価です。整数を設定した場合、 `-O` を複数回指定したのと同じになります。

`PYTHONDEBUG`

  この変数に空でない文字列を設定するのは `-d` オプションを指定するのと等価です。整数を指定した場合、 `-d` を複数回指定したのと同じになります。

`PYTHONINSPECT`

  この変数に空でない文字列を設定するのは `-i` オプションを指定するのと等価です。

  この変数は Python コードから `os.environ` を使って変更して、プログラム終了時のインスペクトモードを強制することができます。

`PYTHONUNBUFFERED`

  この変数に空でない文字列を設定するのは `-u` オプションを指定するのと等価です。

`PYTHONVERBOSE`

  この変数に空でない文字列を設定するのは `-v` オプションを指定するのと等価です。整数を設定した場合、 `-v` を複数回指定したのと同じになります。

`PYTHONCASEOK`

  この環境変数が設定されていると、 Python は `import` 文で大文字/小文字を区別しません。 これは Windows, OS X, OS/2, RiscOS でのみ動作します。

`PYTHONDONTWRITEBYTECODE`

  この環境変数が設定されていると、 Python はソースモジュールの import 時に `.pyc`, `.pyo` ファイルを生成しません。これは `-B` オプションを指定したのと等価です。

  バージョン 2.6 で追加.

`PYTHONHASHSEED`

  この変数が `random` に設定された場合 `-R` を指定するのと同じ効果が得られます: 乱数値が str、bytes ならびに datetime オブジェクトのハッシュのシードに使われます。

  `PYTHONHASHSEED` が整数値に設定された場合、その値はハッシュランダム化が扱う型の hash() 生成の固定シードに使われます。

  その目的は再現性のあるハッシュを可能にすることです。例えばインタープリタ自身の自己テストや Python プロセスのクラスタでハッシュ値を共有するのに用います。

  整数は [0,4294967295] の十進数でなければなりません。0 を指定するとハッシュはハッシュランダム化を無効にしたのと同じ値になります。

  バージョン 2.6.8 で追加.

`PYTHONIOENCODING`

  stdin/stdout/stderr のエンコーディングを強制します。シンタックスは `encodingname:errorhandler` です。 `:errorhandler` の部分はオプションで、 `str.encode()` の引数と同じ意味です。

  バージョン 2.6 で追加.

`PYTHONNOUSERSITE`

  この環境変数が設定されている場合、 Python は `ユーザ site-packages ディレクトリ` を `sys.path` に追加しません。

  バージョン 2.6 で追加.

  参考

  PEP 370 -- Per user site-packages directory

`PYTHONUSERBASE`

  `user base directory` を設定します。これは `python setup.py install --user` 時に `user site-packages directory` と Distutils installation paths のパスを計算するのに使われます。

  バージョン 2.6 で追加.

  参考

  PEP 370 -- Per user site-packages directory

`PYTHONEXECUTABLE`

  この環境変数が設定された場合、 `sys.argv[0]` に、C ランタイムから取得した値の代わりにこの環境変数の値が設定されます。Mac OS X でのみ動作します。

`PYTHONWARNINGS`

  これは `-W` オプションと等価です。カンマ区切りの文字列を設定するのは `-W` を複数回指定するのと等価です。

`PYTHONHTTPSVERIFY`

  この環境変数が `0` に設定されていた場合、 `ssl` が初めてインポートされたときに `ssl._https_verify_certificates()` を `enable=False` で暗黙的に呼び出したのと同じことになります。

  詳細は `ssl._https_verify_certificates()` の説明を参照してください。

  バージョン 2.7.12 で追加.

### 1.2.1. デバッグモード変数

以下の環境変数は、`--with-pydebug` ビルドオプションを指定して構成されたデバッグビルド版の Python でのみ効果があります。

`PYTHONTHREADDEBUG`

  設定された場合、 Python はスレッドデバッグ情報を表示します。

  バージョン 2.6 で変更: 以前は、この変数は `THREADDEBUG` という名前でした。

`PYTHONDUMPREFS`

  設定された場合、 Python はインタプリタのシャットダウン後に残っているオブジェクトとリファレンスカウントをダンプします。

`PYTHONMALLOCSTATS`

  設定された場合、 Python は、新しいオブジェクトアリーナを作成するときと、シャットダウン時に、メモリアロケーション統計情報を表示します。

`PYTHONSHOWALLOCCOUNT`

  If set and Python was compiled with `COUNT_ALLOCS` defined, Python will dump allocations counts into stderr on shutdown.

  バージョン 2.7.15 で追加.

`PYTHONSHOWREFCOUNT`

  If set, Python will print the total reference count when the program finishes or after each statement in the interactive interpreter.

  バージョン 2.7.15 で追加.