in

¿Cuál es una alternativa a execfile en Python 3?

apple touch icon@2

Evitar exec() si puedes. Para la mayoría de las aplicaciones, es más limpio hacer uso del sistema de importación de Python.

Esta función utiliza incorporados importlib para ejecutar un archivo como un módulo real:

from importlib import util

def load_file_as_module(name, location):
    spec = util.spec_from_file_location(name, location)
    module = util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

Ejemplo de uso

Tengamos un archivo foo.py:

def hello():
    return 'hi from module!'
print('imported from', __file__, 'as', __name__)

E impórtelo como un módulo regular:

>>> mod = load_file_as_module('mymodule', './foo.py')
imported from /tmp/foo.py as mymodule
>>> mod.hello()
hi from module!
>>> type(mod)
<class 'module'>

Ventajas

Este enfoque no contamina los espacios de nombres ni interfiere con su $PATH mientras que exec() ejecuta código directamente en el contexto de la función actual, lo que puede causar colisiones de nombres. Además, los atributos del módulo como __file__ y __name__ se configurará correctamente y se conservarán las ubicaciones de los códigos. Por lo tanto, si ha adjuntado un depurador o si el módulo genera una excepción, obtendrá rastreos utilizables.

Tenga en cuenta que una pequeña diferencia con las importaciones estáticas es que el módulo se importa (ejecuta) cada vez que ejecuta load_file_as_module(), y no solo una vez como con el import palabra clave.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Screenshot 42

Diferencias Entre Hojas de Calculo y Procesamiento de Textos

sanity testing

Pruebas de cordura – javatpoint