Python 2 avait la fonction intégrée execfile
, qui a été supprimée dans Python 3.0. Cette question discute des alternatives pour Python 3.0, mais certains changements considérables ont été effectués depuis Python 3. =.
Quelle est la meilleure alternative à execfile
pour Python 3.2, et futures versions Python 3.x ?
Le 2to3
le script (également celui de Python 3.2) remplace
execfile(filename, globals, locals)
par
exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals)
Cela semble être la recommandation officielle.
execfile(filename)
peut être remplacé par
exec(open(filename).read())
qui fonctionne dans toutes les versions de Python
Dans Python3.x, c'est la chose la plus proche que j'ai pu trouver pour exécuter un fichier directement, qui correspond à l'exécution de python /path/to/somefile.py
.
Remarques:
__main__
, certains scripts en dépendent pour vérifier s'ils se chargent en tant que module ou non, par exemple. if __== "__main__"
__file__
est plus agréable pour les messages d'exception et certains scripts utilisent __file__
pour obtenir les chemins des autres fichiers par rapport à eux.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")
Standard runpy.run_path est une alternative.