What is the best way to do dynamic imports ?

M

marcroy.olsen

Hi list and python gurus :)

I'm playing with some mod_python and web development. And in me code I
need to do som dynamic imports.
Right now I just do a:

exec 'import '+some_modulename

But it seems to easy, is there a "dark side" to doing it this way?
(memory use,processing ,etc)
And have to I check if the modul is already loaded?


Another thing is how to call my dynamic imported moduls.
Now I use exec (as with my modules), like this:

exec 'newclass = '+classname+'()'
newclass.somefunction()

Again it seems to easy. Is there a better/proper way to do it?


Do anybody now a good howto or tutorial to this?


Many thanks and hope you all have a happy new year :)

/marc
 
B

Benjamin

Hi list and python gurus :)

I'm playing with some mod_python and web development. And in me code I
need to do som dynamic imports.
Right now I just do a:

exec 'import '+some_modulename
The correct way to do this is use the __import__ function. It takes
the string name of the module you want to import and returns the
module.
new_mod = __import__(some_modulename)
But it seems to easy, is there a "dark side" to doing it this way?
(memory use,processing ,etc)
Well, it's generally frowned on to use exec and eval.
And have to I check if the modul is already loaded?
sys.modules is a list of all imported modules, but python won't import
a module if it's already been loaded.
Another thing is how to call my dynamic imported moduls.
Now I use exec (as with my modules), like this:

exec 'newclass = '+classname+'()'
newclass.somefunction()

Again it seems to easy. Is there a better/proper way to do it?
If you just have the string name of a class, you have to use eval or
exec:
newclass = eval(classname)

However, if you have the class object, you can just instantiate that:
class LargeClass:
def meth(): pass
some_class = LargeClass
new_class = some_class()
some_class.meth()
 
T

Torsten Bronger

Hallöchen!

I'm playing with some mod_python and web development. And in me
code I need to do som dynamic imports. Right now I just do a:

exec 'import '+some_modulename

But it seems to easy, is there a "dark side" to doing it this way?
(memory use,processing ,etc) And have to I check if the modul is
already loaded?

I use the imp module for this:

try:
file, pathname, description = imp.find_module(full_name)
my_module = imp.load_module(full_name, file, pathname, description)
finally:
file.close()

Tschö,
Torsten.
 
G

Gabriel Genellina

I'm playing with some mod_python and web development. And in me code I
need to do som dynamic imports.
Right now I just do a:

exec 'import '+some_modulename

But it seems to easy, is there a "dark side" to doing it this way?
(memory use,processing ,etc)

Use __import__, specially if some_modulename comes from the outside.
What if some_modulename contains "modulename\nsome_nasty_function_call()"
And have to I check if the modul is already loaded?

Not needed; the standard import machinery already does that.
Another thing is how to call my dynamic imported moduls.
Now I use exec (as with my modules), like this:

exec 'newclass = '+classname+'()'
newclass.somefunction()

Again it seems to easy. Is there a better/proper way to do it?

Use getattr to obtain the desired class from the containing module, then
use it as any other class:
the_module = __import__(some_modulename)
the_class = getattr(the_module, classname)
o = the_class()
o.somefunction()

Never use exec/eval and friends - and never ever use them in a web
application!
Do anybody now a good howto or tutorial to this?

No... what do you want covered?
Many thanks and hope you all have a happy new year :)

Thanks, and a happy new year for you too!
 
M

marcroy.olsen

First of thanks to all for you, especially for the quick replys.

Just need to walk the dog then I giv it a short.


No... what do you want covered?

Nothing, think you reply coved it all.

Otherwise I will be back ;-)
 
D

Diez B. Roggisch

First of thanks to all for you, especially for the quick replys.

Just need to walk the dog then I giv it a short.

Please, don't kill your dog! We're a peace-loving community here that
respects dogs, and snakes and even trolls.

SCNR,

Diez
 
G

Graham Dumpleton

Hi list and python gurus :)

I'm playing with somemod_pythonand web development. And in me code I
need to do som dynamic imports.
Right now I just do a:

exec 'import '+some_modulename

But it seems to easy, is there a "dark side" to doing it this way?
(memory use,processing ,etc)
And have to I check if the modul is already loaded?

Another thing is how to call my dynamic imported moduls.
Now I use exec (as with my modules), like this:

exec 'newclass = '+classname+'()'
newclass.somefunction()

Again it seems to easy. Is there a better/proper way to do it?

Do anybody now a good howto or tutorial to this?

Many thanks and hope you all have a happy new year :)

/marc

If using mod_python, you should use mod_python's own dynamic module
importer. See the documentation for mod_python.apache.import_module()
in:

http://www.modpython.org/live/current/doc-html/pyapi-apmeth.html

There is no need to use __import__ directly. By using mod_python's way
of doing things you can benefit from automatic module reloading
provided certain constraints met.

Graham
 

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,768
Messages
2,569,574
Members
45,050
Latest member
AngelS122

Latest Threads

Top