Бьюсь об заклад, вы не используете VS 2008 для этого :)
Есть def find_vcvarsall (версия): функция (угадайте, что, он ищет vcvarsall.bat) в distutils со следующим комментарием
Сначала он пытается найти
productdir VS 2008 в реестре.
Если это не удается, он возвращается к
VS90COMNTOOLS env var.
Если вы не используете VS 2008, то у вас нет ни ключа реестра, ни подходящей переменной среды, и поэтому distutils не может найти файл vcvarsall.bat. Он не проверяет, доступен ли файл bat через переменную среды PATH.
Решение состоит в том, чтобы определить переменную VS90COMNTOOLS, указывающую на каталог Tools в Visual Studio.
Как говорится, взгляните на 11.4. distutils.msvccompiler - раздел компилятора Microsoft в документации Python, в котором указано
Как правило, модули расширения должны
быть скомпилированным с тем же компилятором
который был использован для компиляции Python.
Martin v. Loewis в электронном письме под названием Загрузить Visual Studio Express 2008 сейчас в списке рассылки python-list указано то же самое
Python 2.6, 2.7 и 3.1 все собраны
с этим выпуском (то есть 2008). Так как
другой давней традиции, Python
модули расширения должны быть построены с
та же версия компилятора (больше
в частности, ЭЛТ-версия) как Python
сам. Так что для создания модулей расширения
для любого из этих выпусков вам нужно
иметь копию VS 2008 или VS 2008
Экспресс.
В свете вышеприведенных утверждений вы должны использовать VS 2008, если вы хотите собрать lxml для Python 2.7, поэтому, хотя настройка VS90COMNTOOLS заботится о поиске файла vcvarsall.bat, это не решение.
При этом :) люди пытаются использовать старую CRT с новым компилятором:
Можно ли использовать компилятор Visual Studio 2010 C ++ с библиотекой времени выполнения C ++ Visual Studio 2008?
Как заставить компилятор C ++ использовать конкретную версию CRT?
VS 2008 - ссылка на более раннюю версию C
Я хотел бы поблагодарить Кева Дуайера (за то, что он указал на важность используемой версии VS) и Стефана Бехнела (за то, что я указал на distutils как на место, где есть конфигурация компилятора) в теме Построение задачи lxml под Windows - ошибка: невозможно найти vcvarsall.bat в списке рассылки lxml. Я также хотел бы поблагодарить agronholm из IRC-канала freenode #distutils за подтверждение того, что distutils содержит код, который ищет файл vcvarsall.bat.