optparse を使うコードを argparse に移行する

argparse モジュールは、optparse モジュールに標準では備わっていない、次のような高水準の機能を提供します。

  • 位置引数を扱う

  • サブコマンドのサポート。

  • +, / のような代替オプションプレフィクスを許容する

  • zero-or-more スタイル、one-or-more スタイルの引数を扱う

  • より有益な使用方法メッセージの生成

  • カスタム type, カスタム action のために遥かに簡単なインターフェイスを提供する

argparse モジュールは、当初 optparse との互換性を保とうとしていました。 しかし、位置引数の処理をアプリケーション側に任せてコマンドラインオプションを宣言的に処理する設計と、名前付きオプションと位置引数の両方を宣言的なインターフェースで扱う設計には、根本的な違いがあります。 そのため、API は時間とともに optparse から離れていきました。

引数解析ライブラリの選択 で説明しているように、現在 optparse を使っていて、その動作に満足しているアプリケーションは、そのまま optparse を使い続けて構いません。

移行を検討しているアプリケーションの開発者は、移行が望ましいか判断する前に、その節にある本質的な動作の違いの一覧も確認してください。

optparse から argparse への移行を選んだアプリケーションには、次の指針が役立つでしょう。

  • すべての optparse.OptionParser.add_option() の呼び出しを、ArgumentParser.add_argument() の呼び出しに置き換える。

  • (options, args) = parser.parse_args() を args = parser.parse_args() に置き換え、位置引数のために必要に応じて ArgumentParser.add_argument() の呼び出しを追加する。これまで options と呼ばれていたものが、argparse では args と呼ばれていることに留意してください。

  • optparse.OptionParser.disable_interspersed_args() を、parse_args() ではなく parse_intermixed_args() で置き換える。

  • コールバック・アクションと callback_* キーワード引数を type や action 引数に置き換える。

  • type キーワード引数に渡す型名の文字列を、対応する型オブジェクト (例えば int、float、complex など) に置き換えてください。

  • optparse.Values を Namespace に置き換え、optparse.OptionError と optparse.OptionValueError を ArgumentError に置き換える。

  • %default や %prog などの暗黙の引数を含む文字列を、%(default)s や %(prog)s などの、通常の Python で辞書を使う場合のフォーマット文字列に置き換える。

  • OptionParser のコンストラクターの version 引数を、parser.add_argument('--version', action='version', version='<the version>') に置き換える