Conditional based on whether or not a module is being used

Steve Holden steve at holdenweb.com
Fri Mar 5 14:51:39 EST 2010


Pete Emerson wrote:
> In a module, how do I create a conditional that will do something
> based on whether or not another module has been loaded?
> 
> Suppose I have the following:
> 
> import foo
> import foobar
> 
> print foo()
> print foobar()
> 
> ########### foo.py
> def foo:
>     return 'foo'
> 
> ########### foobar.py
> def foobar:
>     if foo.has_been_loaded(): # This is not right!
>         return foo() + 'bar'      # This might need to be foo.foo() ?
>     else:
>         return 'bar'
> 
> If someone is using foo module, I want to take advantage of its
> features and use it in foobar, otherwise, I want to do something else.
> In other words, I don't want to create a dependency of foobar on foo.
> 
> My failed search for solving this makes me wonder if I'm approaching
> this all wrong.
> 
> Thanks in advance,
> Pete

One way would be

    if "foo" in sys.modules:
        # foo was imported

However that won't get you all the way, since sys.modules["foo"] will be
set even if the importing statement was

    from foo import this, that, the_other

So you might want to add

    foo = sys.modules["foo"]

inside the function.

regards
 Steve

-- 
Steve Holden           +1 571 484 6266   +1 800 494 3119
PyCon is coming! Atlanta, Feb 2010  http://us.pycon.org/
Holden Web LLC                 http://www.holdenweb.com/
UPCOMING EVENTS:        http://holdenweb.eventbrite.com/




More information about the Python-list mailing list