目次

前のトピックへ

Python のセットアップと利用

次のトピックへ

Unix プラットフォームで Python を使う

このページ

コマンドラインと環境

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

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

コマンドライン

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

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

もちろん、もっとも一般的な利用方法は、シンプルにスクリプトを実行するものです。

python myscript.py

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

インタプリタのインターフェイスは 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 – Executing modules as scripts

バージョン 2.4 で追加.

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

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

-

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

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

<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 の先頭に追加されます。

一般オプション

-?
-h
--help

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

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

-V
--version

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

Python 2.5.1

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

その他のオプション

-B

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

バージョン 2.6 で追加.

-d

パーサーのデバッグ出力を有効にします。(魔法使い専用です。コンパイルオプションに依存します)。 PYTHONDEBUG も参照してください。

-E

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

バージョン 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

-s

sys.path にユーザー site ディレクトリを追加しません。

バージョン 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

モジュールが初期化されるたびに、それがどこ(ファイル名やビルトインモジュール) からロードされたのかを示すメッセージを表示します。 2重に指定された場合(-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 – the warnings module

PEP 230 – Warning framework

PYTHONWARNINGS

-x

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

ノート

エラーメッセージ内の行番号は -1 されます。

-3

Python 3.x との、 2to3 によって簡単に解決できない互換性の問題について警告します。以下のものが該当します。

これらを使うと、 DeprecationWarning を発生させます。

バージョン 2.6 で追加.

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

-J

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

-U

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

from __future__ import unicode_literals

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

-X

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

環境変数

以下の環境変数は Python の動作に影響します。

PYTHONHOME

標準 Python ライブラリの場所を変更します。デフォルトでは、ライブラリは prefix/lib/pythonversionexec_prefix/lib/pythonversion から探されます。ここで、 prefixexec_prefix はインストール依存のディレクトリで、両方共デフォルトでは /usr/local です。

PYTHONHOME が1つのディレクトリに設定されている場合、その値は prefixexec_prefix の両方を置き換えます。それらに別々の値を指定したい場合は、 PYTHONHOMEprefix: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.ps1sys.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 でのみ動作します。

PYTHONDONTWRITEBYTECODE

この環境変数が設定されていると、 Python はソースモジュールの import 時に .pyc, .pyo ファイルを生成しません。

バージョン 2.6 で追加.

PYTHONIOENCODING

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

バージョン 2.6 で追加.

PYTHONNOUSERSITE

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

バージョン 2.6 で追加.

参考

PEP 370 – Per user site-packages directory

PYTHONUSERBASE

ユーザー site ディレクトリのベースディレクトリを設定します。

バージョン 2.6 で追加.

参考

PEP 370 – Per user site-packages directory

PYTHONEXECUTABLE

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

PYTHONWARNINGS

これは -W オプションと同じです。カンマ区切りの文字列が設定されたとき、その動作は -W を複数回指定されたのと同じになります。

デバッグモード変数

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

PYTHONTHREADDEBUG

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

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

PYTHONDUMPREFS

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

PYTHONMALLOCSTATS

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