471,337 Members | 1,465 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,337 software developers and data experts.

What is the best way to do dynamic imports ?

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
Dec 30 '07 #1
5 1434
On Dec 30, 8:24 am, marcroy.ol...@gmail.com wrote:
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()
>
Do anybody now a good howto or tutorial to this?

Many thanks and hope you all have a happy new year :-)
You, too!
>
/marc
Dec 30 '07 #2
Hallöchen!

ma***********@gmail.com writes:
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.

--
Torsten Bronger, aquisgrana, europa vetus
Jabber ID: br*****@jabber.org
(See http://ime.webhop.org for further contact info.)
Dec 30 '07 #3
En Sun, 30 Dec 2007 12:24:53 -0200, <ma***********@gmail.comescribi�:
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!

--
Gabriel Genellina

Dec 30 '07 #4
First of thanks to all for you, especially for the quick replys.

Just need to walk the dog then I giv it a short.
On Dec 30, 3:57*pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
>
Do anybody now a good howto or tutorial to this?

No... what do you want covered?
Nothing, think you reply coved it all.

Otherwise I will be back ;-)

Dec 30 '07 #5
ma***********@gmail.com schrieb:
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
Dec 30 '07 #6

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

7 posts views Thread by Matthew Wilson | last post: by
3 posts views Thread by Rudy | last post: by
6 posts views Thread by Mark | last post: by
7 posts views Thread by Stan Sainte-Rose | last post: by
4 posts views Thread by Bass Pro | last post: by
1 post views Thread by JMann101 | last post: by
669 posts views Thread by Xah Lee | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.