##
6.26.2 Python 拡張の作者と、Python を埋め込むようなプログラムに関して

拡張モジュールは、現在のロケールを調べる以外は、決して `setlocale()` を呼び出してはなりません。 しかし、返される値もロケールの復帰のために使えるだけなので、 さほど便利とはいえません (例外はおそらくロケールが "`C`" か どうか調べることでしょう)。

Python があるアプリケーション内に埋め込まれており、アプリケーションが Python を初期化する前にロケールを設定した場合は一般的に問題はありません。 このとき Python は設定されているロケールを使います。ただし、 `LC_NUMERIC` ロケールは常に "`C`" に設定されます。

`locale` モジュールの関数 `setlocale()` は、`LC_NUMERIC` ロケール設定が操作できるような印象を Python プログラマに与えますが、C のレベルではこれは当てはまりません。 C コードでは、常に `LC_NUMERIC` ロケール設定は "`C`" になります。これは、小数点文字がピリオド以外の別の文字に変更 された場合にうまく動作しなくなるものがあまりにも多い (例えば Python パーザはうまく動作しません) からです。 補足説明: Python のグローバルインタプリタをロックしないまま 動作するスレッド間では、数値ロケール設定が一致しなくなることが あるかもしれません。 このため、`LC_NUMERIC` ロケールの設定を実装するための 可搬性のある唯一の方法は、数値ロケールをユーザの希望するロケールに 設定して、直接関係のある値を展開し、最後に "`C`" 数値ロケールを復帰する ことです。

ロケールを変更するために Python コードで `locale` モジュール を使った場合、Python を埋め込んでいるアプリケーションにも影響を 及ぼします。Python を埋め込んでいるアプリケーションに影響が及ぶ ことを望まない場合、config.c ファイル内の組み込みモジュールの テーブルから `_locale` 拡張モジュール (ここで全てを行っています) を削除し、共有ライブラリから `_locate` モジュールにアクセス できないようにしてください。