Symbolic imports and manipulation of the namespace?

John Bell jbell at iinet.net.au
Wed Mar 27 09:14:53 CET 2002


VanL wrote:

> Hello,
> 
> I was recently solving a problem which required that the config file 
> (just a python file) lie outside of the pythonpath.  Is it possible to 
> do symbolic importation of a module?
> 
> For example, I had:
> 
> # cfgpath is passed in on the command line
> cfgpath = os.path.basename(cfgpath)
> sys.path.insert (0, cfgpath)
> import sc_cfg     #Hardcoded config module name!
> 
> 
> How do you do this:
> 
> # cfgpath is passed in on the command line
> cfgpath, cfgfile = os.path.split(cfgpath)
> sys.path.insert (0, cfgpath)
> import cfgfile     #Hardcoded config module name!
> 
> So that any file name (ending with .py, of course, but that's another 
> matter) could be the configfile?
> I tried the above, but I got an ImportError (no module named cfgfile)


Basically it depends what you want to do with the file.  If you simply 
want to execute it in-line (which given that it's a config file is most 
probably the case) then use execfile.  This by default executes the file 
within the namespace of the caller, so is somewhat like an include or 
import statement in other languages.  NOTE THE CAVEAT RE EXECUTION 
WITHIN A FUNCTION BODY.  Check the manual page re manipulation of the 
namespace.

If the file has classes you want to create or functions you want to call 
you should use __import__.  The idea is to put your file (say myfile.py) 
in your search path.  Then if you want to create an instance of myobject 
defined in myfile.py:

modname='myfile'
objname='myobject'
_module=__import__(name)
_class=getattr(_module,objname)
_object=_class(instantiation parameters)

where _object is the instance.  Function invocation works in a parallel 
fashion.  Once again, see the manual page re namespace manipulation.

John


> 
> Thanks,
> 
> Van
> 
> 




More information about the Python-list mailing list