El objeto ‘str’ no tiene el atributo ‘exec_module’.
Estoy intentando importar código de script en un archivo test.py como módulo usando importlib en Google Colab.
Aquí está mi código:
def load_module(file_name, module_name):
spec = importlib.util.spec_from_loader(module_name, file_name)
module = importlib.util.module_from_spec(spec)
print(spec.loader)
spec.loader.exec_module(module)
sys.modules[module_name] = module
return module
def get_file(path):
SCRIPT_FILE = open(path,'r')
return SCRIPT_FILE
Ejecuto la función anterior para obtener la biblioteca de test.py:
file =get_file('/content/gdrive/MyDrive/test/test.py')
module = load_module("from lib import *\n" + file.read(),'crawl')
Y obtuve este error:
AttributeError: el objeto 'str' no tiene ningún atributo 'exec_module'
¡Por favor ayuda! Gracias.
davy.ai
El mensaje de error “AttributeError: el objeto ‘str’ no tiene el atributo ‘exec_module'” sugiere que el objeto pasado como segundo argumento a la función importlib.util.spec_from_loader() debe ser un módulo, no una cadena de caracteres.
Para solucionar el problema, debes pasar el nombre del módulo en lugar del código del script como segundo argumento a la función load_module(). Puedes lograr esto modificando la función get_file() para que devuelva únicamente el código del script sin la línea “from lib import *”. Luego, puedes utilizar el nombre del módulo “lib” al llamar a la función load_module().
Así es como puedes modificar tu código:
En este código modificado, la función load_module() ahora utiliza None como segundo argumento en spec_from_loader(), y el argumento module_name pasado a ambas funciones, spec_from_loader() y load_module(), es “lib”.
Por último, he reemplazado el uso de la función open() en get_file() con la sentencia with para asegurar que el archivo se cierre correctamente después de leerlo.
¡Espero que esto te ayude a solucionar tu problema!