Как настроить переменные окружения vsvars32? - PullRequest
2 голосов
/ 11 октября 2010

Я пытаюсь установить переменные среды scons для visual studio 2008.
Обычно я делаю следующее:

%VS90COMNTOOLS%vsvars32.bat

or 

call %VS90COMNTOOLS%vsvars32.bat

И это работает в моей оболочке.

Я пытаюсь сделать это в Python, используя подпроцесс

subprocess.call([os.environ['VS90COMNTOOLS']+r"\vsvars32.bat"])

выход: * +1010 *

d:\N\workspace>scons test
scons: Reading SConscript files ...
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
KeyError: 'INCLUDE':

выше запускает пакетный процесс, но переменные окружения не наследуются от него моему главному процессу

Когда я использую:

subprocess.call([os.environ['VS90COMNTOOLS']+r"\vsvars32.bat"])

Я получаю:

d:\N\workspace>scons test
scons: Reading SConscript files ...
WindowsError: [Error 2] The system cannot find the file specified:
  File "D:\N\workspace\SConstruct", line 17:
    subprocess.Popen(["call ", os.environ['VS90COMNTOOLS']+r"\vsvars32.bat"])
  File "C:\Python26\lib\subprocess.py", line 595:
    errread, errwrite)
  File "C:\Python26\lib\subprocess.py", line 821:
    startupinfo)

Как этого добиться?

Ответы [ 2 ]

4 голосов
/ 11 октября 2010

Напишите пакетный файл, который запускает vsvars32.bat, а затем выведет значения в форме VARNAME=value, затем ваш скрипт Python проанализирует значения и вставит их в os.environ.

Это делаетсясобственный модуль distutils, см. здесь .

0 голосов
/ 15 октября 2010

В дополнение к предыдущему ответу. Выдержка из моего SConstruct:

for key in ['INCLUDE','LIB']:
    if os.environ.has_key(key):
        env.Prepend(ENV = {key.upper():os.environ[key]})

Обратите внимание, что имена переменных в Python чувствительны к регистру. Убедитесь, что в вашем env['ENV'] dict нет повторяющихся имен переменных с другим регистром, в противном случае оболочка Windows увидит только один вариант переменной.

...