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/python*version*" と
   "*exec_prefix*/lib/python*version*" から検索されます。ここで、
   "*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/python*version*" で始まります。 (上の "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 で追加.
