"vcvarsall.bat" проблема при сборке SWIG на Windows

Следующие инструкции: Сборка QuantLib для Python(SWIG)

python setup.py build --compiler=msvc

интересно, почему vcvarsall.bat не может быть найден. На самом деле, это batch файл находится по адресу:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC

Кроме того, я скопировал это в:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools

и, наконец, добавил последний путь к System variables -> PATHбез каких-либо улучшений.

PS: похожая тема была поднята на error-microsoft-visual-c-10-0-is-Требуется-невозможно-найти-vcvarsall-bat (DUPLICATE), но ни одно из рекомендованных решений до сих пор не помог мне в Преодолевая это дело.

Поэтому будет приветствоваться любая соответствующая обратная связь.

ОС: Windows 10

Studio: Express 2013 для рабочего стола Windows

Повышение: v.1_58_0

SWIG: v.1_6

QuantLib: v.1_6

IDE: PTVS v.2.2.2

заранее спасибо

1 - РЕДАКТИРОВАТЬ: см. Ниже скриншот (включая ошибку)

введите описание изображения здесь

В качествеальтернативы:

=======================================================================
C:\local\QuantLib_SWIG_1_6\Python>python setup.py build --compiler=msvc
running build
running build_py
running build_ext
building 'QuantLib._QuantLib' extension
error: Unable to find vcvarsall.bat
========================================================================

2 - РЕДАКТИРОВАТЬ:

Я даже пошел дальше, обновив get_build_version() метод из модуля: msvc9compiler.py проводится в

C:\Users\user\Miniconda3\Lib\distutils Для того, чтобы:

#if majorVersion >= 13: updated
if majorVersion > 13:
    # v13 was skipped and should be v14
    majorVersion += 1
elif majorVersion == 13: #v13 no more skipped, UPDATED  on 11/13/2016   
      majorVersion -= 1 # pointing specifically to v.12

так как мой Python 3.5.2 был составлен под MSC 1900 <=> VS 2015, Однако похоже, что компилятор не может быть найден как консоль (cmd) все еще возвращается

error:Unable to find vcvarsall.bat

Ps: полностью поражен этой установкой. Решение последней инстанции: Установить VS2015 Community что я откладывал

3 - РЕДАКТИРОВАТЬ:

set MSSdk=1
set DISTUTILS_USE_SDK=1
python setup.py build

Error:
The program can't start because mspdb120.dll is missing from your computer. 
Try reinstalling the program to fix this problem  
error: command 'C:\Program Files (x86)\Microsoft Visual Studio  
12.0\VC\bin\x86_amd64\cl.exe Failed with exit status - 10737441515

Решение:

копия mspdb120.dll к C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64

python setup.py build
quantlib_wrap.cpp
QuantLib/quantlib_wrap.cpp: fatal error C1902: Program database manager  
mismatch; please check your installation 
error: command 'C:\Program Files (x86)\Microsoft Visual Studio   
12.0\VC\bin\x86_amd64\cl.exe Failed with exit status 2

2 ответа

vcvarsall.bat требуется только при запуске компилятора Visual C/C++ извне Visual Studio. Он определяет все переменные окружения, необходимые компилятору Visual C/C++. Этот пакетный файл не следует перемещать в другие каталоги, установленные по умолчанию, так как это приводит к неправильной настройке переменных среды.

Если этот пакетный файл необходимо вызвать из другого процесса без использования полного пути, каталог, содержащий vcvarsall.bat должен быть определен либо в пользовательском, либо в системном PATH в расширенных настройках среды Windows или путь к каталогу добавляется в локальный PATH процесса, который вызывает этот пакетный файл позже.

Каждый раз, когда процесс запускается, Windows создает копию таблицы переменных среды текущего процесса для нового процесса. Это означает изменение переменной среды PATH внутри командного файла активен только для командного процесса, выполняющего командный файл, и всех процессов, запущенных этим командным процессом после изменения локального PATH, Другие процессы, уже запущенные при модификации PATH в командном процессе продолжить работу с их неизмененной локальной копией PATH,

Так что если пользователь или система PATH модифицировано в расширенных системных настройках Windows. Эта модификация становится активной для всех уже запущенных процессов только после полного перезапуска Windows. Модификация пользователя или системы PATH без перезапуска Windows становится активной только для процессов, запущенных с рабочего стола Windows после изменения, поскольку для этих новых процессов текущая таблица переменных среды рабочего стола Windows берется в качестве источника при создании копии переменных среды для нового процесса.

Я полагаю, вы добавили в систему PATH строка

;%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC

при этом точка с запятой в начале необходима только при наличии PATH до модификации не заканчивается точкой с запятой.

И после этой модификации системы PATH Лучше всего перезагрузить Windows, чтобы она стала активной для всех процессов.

Кстати: я бы не добавил этот путь в систему PATH поскольку системные процессы не нуждаются в этом каталоге PATH, Я бы добавил это к пользователю PATH или создать пользователя PATH с путем к каталогу, если в настоящее время нет PATH в таблице пользовательской среды. И чаще всего достаточно добавить определенный путь к каталогу к локальному PATH как здесь, потому что этот путь к каталогу определенно не нужен для всех процессов, запускаемых как пользовательский процесс.

Вероятно, это связано с питоном distutils Пакет ищет другую версию Visual Studio. Насколько я знаю, Python от 2.7 до 3.2 был построен с VC++9; версии 3.3 и 3.4 были построены с VC++10; и версии Python от 3.5 и выше построены с VC++14. При беге distutilsкаждый из них будет искать соответствующую версию VC++, если не указано иное. Таким образом, Python (кстати, какую версию вы используете?) Не находит ваш vcvarsall.bat из VC++12, потому что он не смотрит на этот путь.

Согласно документации по Python, обходной путь должен был бы установить переменные среды DISTUTILS_USE_SDK а также MSSdk сказать distutils что среда уже настроена и что ей не нужно искать vsvarsall.bat, После этого запуск сценария из командной строки для Visual Studio может работать.

При этом не может быть гарантировано, что модуль, скомпилированный с версией VC++, будет работать с Python, скомпилированным с другим, так что вы можете установить и использовать тот, который соответствует вашей установке Python.

Другие вопросы по тегам