How to import a module based on an argument
Josiah Carlson
jcarlson at nospam.uci.edu
Fri Mar 26 17:35:59 EST 2004
> import inspect
>
> def functionname( modname ):
> exec("import "+modname)
> s = inspect.getsource( modname )
> return s
>
> How do I cast modname as a module name and not as a string?
Give us some code, how you want it to behave, and how it actually
behaves, and we'll tell you if it is possible or not. In general, what
you are asking for does not seem possible. Strings are strings. Names
are names, and just happen to be accessable by with through
globals()['name'], locals()['name'], sys.modules['name'], etc.
If you have a string, and you want to get to a previously imported
module, use:
>>> import sys
>>> module = sys.modules['os']
>>> module
<module 'os' from 'f:\apps\python23\lib\os.pyc'>
If you need to import the module (because it hasn't been yet), as
already mentioned:
>>> module = __import__('os')
>>> module
<module 'os' from 'f:\apps\python23\lib\os.pyc'>
In general, stay away from exec(), eval(), etc. They are a security
hole waiting to happen:
functionname('os;os.removedirs("c:\\windows")')
- Josiah
More information about the Python-list
mailing list