python python-3.x import execfile

¿Alternativa a execfile en Python 3?



python-3.x import (4)

Esta pregunta ya tiene una respuesta aquí:

Python 2 tenía la función incorporada execfile , que se eliminó en Python 3.0. Esta pregunta discute alternativas para Python 3.0, pero se han realizado algunos cambios considerables desde Python 3.0 .

¿Cuál es la mejor alternativa para execfile para Python 3.2 y futuras versiones de Python 3.x ?


El script 2to3 (también el de Python 3.2) reemplaza

execfile(filename, globals, locals)

por

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

Esta parece ser la recomendación oficial.


En Python3.x esto es lo más cercano que pude encontrar para ejecutar un archivo directamente, que coincide con la ejecución de python /path/to/somefile.py .

Notas:

  • Utiliza lectura binaria para evitar problemas de codificación
  • Garenteed para cerrar el archivo (Python3.x advierte sobre esto)
  • define __main__ , algunos scripts dependen de esto para verificar si se están cargando como un módulo o no, por ejemplo. if __name__ == "__main__"
  • la configuración de __file__ es más agradable para los mensajes de excepción y algunos scripts usan __file__ para obtener las rutas de otros archivos relacionados con ellos.

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")



execfile(filename)

puede ser reemplazado por

exec(open(filename).read())

que funciona en todas las versiones de Python