"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.