Вы можете использовать обычные утилиты python, чтобы прочитать файл или обработать XML, а затем импортировать его в свою среду. Если у вас нет внешнего файла, который нужно импортировать в SCons, вы можете просто закодировать среду в файле scons. Если по какой-то причине ваша среда определена в словаре Perl (как в моем случае ...), вы можете попытаться использовать PyPerl или преобразовать словарь Perl в YAML и затем прочитайте YAML в python. (Я смог сделать позже, но не первый).
Допустим, у вас просто есть файл, который вам нужно прочитать, который имеет переменные окружения в виде:
ENV_VAR1 ENV_VAL1
ENV_VAR2 ENV_VAL2
...
Вы можете импортировать это в свой файл SConstruct.py как:
import os
env_file = open('PATH_TO_ENV_FILE','r')
lines = env.file.readlines()
split_regex = re.compile('^(?P<env_var>[\w_]+) *(?P<env_val>.*)')
for line in lines:
regex_search = split_regex.search(line)
if regex_search:
env_var = regex_search.group('env_var')
env_val = regex_search.group('env_val').strip()
os.environ[env_var] = env_val
base_env = Environment(ENV=os.environ)
# even though the below lines seem redundant, it was necessary in my build
# flow...
for key in os.environ.iterkeys():
base_env[key] = os.environ[key]
Если вы хотите вставить это уродство в другой файл, а затем импортировать его из основного файла SConstruct.py, вы можете добавить следующее, чтобы разрешить доступ к классу «Environment» из вашего другого файла:
from SCons.Environment import *
Затем в ваш основной файл SConstruct.py импортируйте файл env, например:
from env_loader import *