Joseph Turian wrote > Here's the functionality I need: > > We allow the user to define parameter values, which are imported and > can be accessed directly as variables within Python. These are defined > in "parameters.py". > > More specifically, let's say the user creates "dir/parameters.py" and > "dir/subdir/parameters.py" and then invokes the program from within > dir/subdir. We first import the values from dir/parameters.py and then > import the values from dirs/subdirs/parameters.py, potentially > clobbering any values from the first import. > > How can I achieve this functionality? > Here's what I have in mind: > * Find every directory from os.environ["HOME"] through os.getcwd()
I assume "from" means "beneath" and "getcwd" means "walk" ? > * Find all such directories in which parameters.py exists. > * "from parameters import *", starting from the highest-level directory > through the current directory. the problem with this approach is that the user may, accidentally or on purpose, clobber portions of your program as well. here's a more robust approach: parameters = {} for file in list_of_parameter_files: try: execfile(file, parameters) except: print "error in", file traceback.print_exc() # when you get here, parameters contains all configuration # params (e.g. parameters["foo"], parameters["bar"]). if you prefer to use a "parameters.value" syntax, you can wrap the resulting dictionary in a class. if you insist on using a "value" syntax, you can add the values to the module namespace: mod = sys.modules[__name__] for key, value in parameters.items(): if key in list_of_allowed_parameter_names: setattr(mod, key, value) to make the values available as globals in all modules, you can do import __builtin__ for key, value in parameters.items(): if key in list_of_allowed_parameter_names: setattr(__builtin__, key, value) but that's a bit ugly. </F> -- http://mail.python.org/mailman/listinfo/python-list