質問

この質問にはすでに答えがあります:

Python 2にはビルトイン機能がありました execfile, 、Python 3.0で削除されました。 この質問 Python 3.0の代替案について説明しますが、いくつかについて説明します かなりの変更 作ったことがある Python 3.0以来.

最良の選択肢は何ですか execfile Python 3.2の場合 将来のPython 3.xバージョン?

役に立ちましたか?

解決

2to3 スクリプト(Python 3.2のものも)が置き換えられます

execfile(filename, globals, locals)

exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals)

これは公式の推奨事項のようです。

他のヒント

execfile(filename)

置き換えることができます

exec(open(filename).read())

Pythonのすべてのバージョンで機能します

python3.xでは、これは私がファイルを直接実行することに私が思いつくことができる最も近いものであり、それは実行の一致に一致します python /path/to/somefile.py.

ノート:

  • エンコードの問題を避けるために、バイナリ読み取りを使用します
  • ファイルを閉じるためのガレンティー (python3.xはこれについて警告します)
  • 定義します __main__, 、一部のスクリプトは、これに依存して、例えばモジュールとしてロードしているかどうかを確認します。 if __name__ == "__main__"
  • 設定 __file__ 例外メッセージと一部のスクリプトの使用には優れています __file__ それらに関連する他のファイルのパスを取得するため。
def exec_full(filepath):
    import os
    global_namespace = {
        "__file__": filepath,
        "__name__": "__main__",
    }
    with open(filepath, 'rb') as file:
        exec(compile(file.read(), filepath, 'exec'), global_namespace)

# execute the file
exec_full("/path/to/somefile.py")

標準 ranpy.run_path 代替手段です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top