Вам просто нужно иметь возможность динамически определять импорт, а затем динамически получать переменные.
Допустим, ваш конфигурационный файл bar.py и выглядит так:
x = 3
y = 4
def f(x): return (x<4)
Тогда ваш код должен выглядеть так:
import sys
# somehow modnames should be a list of strings that are the names of config files
#
# you can do this more dynamically depending on what you're doing
modnames = ['bar']
for modname in modnames:
exec('import %s' % modname)
for modname in modnames:
mod = sys.modules[modname]
for k in mod.__dict__:
if k[:2] != '__':
print modname, k, mod.__dict__[k]
Я получаю этот вывод:
bar f <function f at 0x7f2354eb4cf8>
bar x 3
bar y 4
Тогда, по крайней мере, у вас есть все переменные и функции. Я не совсем получил то, что вы хотели от функций предикатов, но, возможно, вы можете получить это самостоятельно.