Import everything in a Python module inside a function -
i construct function emulates from package_name import *
. while this question answers how 1 might modifying globals()
. globals()
, however, local module function defined in.
for example, suppose define following function in first_package.py
,
import imp def load_contents(path): """load package""" module = imp.load_source('', path) k in dir(module): if not '__' in k: # ignore __xxx__ private variables globals()[k] = getattr(module, k)
then run following code in second_package.py
import first_package first_package.load_contents('third_package.py')
nothing happen. how can fix this?
the trick use sys._getframe
go call stack 1 step, retrieve globals of caller. precise code is,
def load_contents(path): """load contents of configuration file""" module = imp.load_source('', path) glob = sys._getframe(1).f_globals # globals of calling module k in dir(module): if not '__' in k: # ignore __xxx__ private variables glob[k] = getattr(module, k)
note code work cpython, sys._getframe
implementation-specific function.
Comments
Post a Comment