Python 2には組み込み関数 execfile
がありましたが、これはPython 3.0で削除されました。 この質問 Python 3.0の代替案について説明しますが、いくつかの かなりの変更 が行われました Python 3.0以降 =。
execfile
Python 3.2、および future 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
の実行に一致する、ファイルを直接実行することに最も近いものです。
ノート:
__main__
を定義し、一部のスクリプトはこれに依存して、モジュールとしてロードしているかどうかをチェックします。 if __== "__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")
標準 runpy.run_path は代替です。