これを言語で行う方法はありません。__future__
この意味で、インポートをグローバルにすることはできません。(まあ、おそらく通常のimport
ステートメントを何か複雑なものに置き換えることができます。Futureステートメントimp
のドキュメントを参照して「Codecompiledby…」までスクロールしてください。しかし、このようなものはほぼ間違いなく悪い考えです。)
その理由は、from __future__ import division
実際には通常のインポートではないためです。または、むしろ、それは通常のインポート以上のものです。実際には、検査できるという名前が付けdivision
られますが、その値を指定しても効果はありません。したがって、他のモジュールに名前を渡しても、それらのモジュールには影響しません。__future__
通常のインポートに加えて、Pythonには、モジュールの上部またはインタラクティブインタープリターでインポートを検出し、コードのコンパイル方法を変更する特別な魔法があります。すべての詳細が必要な場合は、「実際のインポート」部分についてはfutureを、「魔法」部分についてはFutureステートメントを参照してください。
そして、これを可能にする構成ファイルはありません。ただし、コマンドラインパラメータがあります。
python -Qnew main.py
from __future__ import division
これは、どこでも行うのと同じ効果があります。
これを#!
行に追加したり、シェルにalias pyfuturediv='python -Qnew'
(またはalias python='python -Qnew'
)追加したりすることができます。これは、目的に応じた構成ファイルと同じくらい良いものです。
しかし、実際には、モジュールBが新しいスタイルの分割を確実に取得するようにしたい場合は、最初にBで宣言を行う必要があります。__future__
または、もちろん、2.3-2.7の代わりにPython3.0+用に書くこともできます。(コア開発者の中には、コマンドライン引数を持つことに反対している人もいることに注意してください。「機能Xをグローバルに取得する正しい方法は、Pythonのバージョン>=機能XのMandatoryReleaseを使用//
することです」 //
。
もう1つの可能性は、Python 3.3に近いコードを記述し、2.4-2.7(および3.0-3.2)で正しく動作させるように設計されたモジュールである6を使用することです。たとえば、print
関数は取得できませんが、print_
まったく同じように機能する関数は取得できます。Unicodeリテラルは取得できませんが、u()
偽のリテラルを取得できます。これは、ソースでのUTF-8エンコーディング宣言と合わせて、ほぼ十分です。__future__
また、 <code> StringIOやBytesIO
、exec
関数としての関数など、取得できないものもたくさんありますnext
。
1000個のソースファイルがあり、それらをすべて編集するのが面倒な場合は、を使用するか、除算を修正するオプションだけを
sed
使用するか、または…</ p>3to2