Python 3のexecfileに代わるものは? [複製
-
28-10-2019 - |
質問
この質問にはすでに答えがあります:
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 代替手段です。
所属していません StackOverflow