Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically importing Python modules

Tags:

python

import

I am trying to import the members of a module whose name is not known. Instead of

import foo

I am using:

__import__("foo")

How can I achieve a similar thing for the from foo import bar case instead of resorting to an "eval"?

Update: It seems fromlist did the trick. Is there a way to emulate from foo import *? fromlist=['*'] didn't do the trick.

like image 356
ustun Avatar asked Mar 20 '12 08:03

ustun


Video Answer


3 Answers

To emulate from foo import * you could use dir to get the attributes of the imported module:

foo = __import__('foo')
for attr in dir(foo):
    if not attr.startswith('_'):
        globals()[attr] = getattr(foo, attr)

Using from foo import * is generally frowned upon, and emulating it even more so, I'd imagine.

like image 127
zeekay Avatar answered Oct 24 '22 11:10

zeekay


__import__("foo", fromlist=["bar"])

for more information help(__import__)

like image 24
lollo Avatar answered Oct 24 '22 11:10

lollo


You can dynamically import with the help of __import__. There are fromlist key argument in __import__ to call from foo import bar.

like image 33
Nilesh Avatar answered Oct 24 '22 11:10

Nilesh