how to import a name from a module-path?

T

thebjorn

I'm storing the path to functions in a database and now I'd like to
get a reference so I can execute them.

I looked briefly at the imp module and got very confused... Currently
I'm doing this:

def import_object(path):
module, obj = path.rsplit('.', 1)
exec "from rootpkg.%s import %s as fn" % (module, obj)
return fn

function = import_object('mypackage.mymodule.myfunction')

this is happening in a trusted environment, so I'm not worried about
malicious code.

Are there more elegant ways of doing this (ie. without exec)?

-- bjorn
 
G

Gary Herron

thebjorn said:
I'm storing the path to functions in a database and now I'd like to
get a reference so I can execute them.

I looked briefly at the imp module and got very confused... Currently
I'm doing this:

def import_object(path):
module, obj = path.rsplit('.', 1)
exec "from rootpkg.%s import %s as fn" % (module, obj)
return fn

function = import_object('mypackage.mymodule.myfunction')

this is happening in a trusted environment, so I'm not worried about
malicious code.

Are there more elegant ways of doing this (ie. without exec)?

Yes. Look at the __import__ builtin function, and if that's not enough
functionality, look at the module names imp, which provides
documentation starting with this bit:

DESCRIPTION
This module provides the components needed to build your own
__import__ function.



Both are available in Python2.x and Python3.x

Gary Herron
 
T

thebjorn

Yes.  Look at the __import__ builtin function,
[...]

Thanks, that is much better:

def import_object(path):
module, obj = path.rsplit('.', 1)
m = __import__(module, fromlist=['rootpkg'])
return getattr(m, obj)

function = import_object('mypackage.mymodule.myfunction')

Gary Herron

Bjorn
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,754
Messages
2,569,522
Members
44,995
Latest member
PinupduzSap

Latest Threads

Top