¿Cuál es el mejor enfoque para ejecutar lo siguiente utilizando __import__
para que pueda especificar dinámicamente el módulo?Cómo importar * con __import__
from module import *
¿Cuál es el mejor enfoque para ejecutar lo siguiente utilizando __import__
para que pueda especificar dinámicamente el módulo?Cómo importar * con __import__
from module import *
Es lo mismo que una llamada normal de-importación, que acaba de pasar una lista que contiene '*'
para la fromlist
:
moduleName = "foo"
__import__(moduleName, globals(), locals(), ['*'])
Eso en realidad no configura locales(), que es el problema que tengo :) –
De acuerdo con el documento, el estándar '__import__' ni siquiera usa el argumento' locals'. Si anula '__builtin_______import__', puede ver exactamente lo que sucede cuando ejecuta' from foo import * ', parece que hace exactamente eso –
No importa realmente los atributos, que es el problema. Los carga en la memoria pero no los establece en los módulos locales locales(). –
__import__()
no añade nada al ámbito local. Tendrá que ir a través del módulo devuelto, accediendo a sus atributos como lo desee.
La única manera que encontró:
module = __import__(module, globals(), locals(), ['*'])
for k in dir(module):
locals()[k] = getattr(module, k)
¿Por qué querrías hacer esto? Huelo mal código. || Por otro lado, puedes aceptar tus propias respuestas. –
Porque es la única forma de resolver el problema abordado. –
Esta parece ser la mejor opción para hacer las cosas rápidamente. La otra opción que he encontrado es hacer: "cmd = 'de% s import *'% moduleName; exec (cmd)". Todos gritarán, pero para los pequeños guiones parece ser la mejor manera. – mathtick
Pero son conscientes de que se debe evitar el uso de '' import *? –
No está aquí para una conferencia semántica :) –
¿Lo quiere en la población local? No deberías intentar hacer esto, pero la respuesta de Michael Mrozek está completamente equivocada de todos modos. La respuesta de Ignacio debe ser aceptada. –