ошибка: не удается найти vcvarsall.bat - PullRequest
838 голосов
/ 12 мая 2010

Я пытался установить пакет Python dulwich :

pip install dulwich

Но я получаю загадочное сообщение об ошибке:

error: Unable to find vcvarsall.bat

То же самое происходит, если я пытаюсь установить пакет вручную:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat

Ответы [ 41 ]

680 голосов
/ 12 мая 2012

Обновление : Комментарии указывают на то, что приведенные здесь инструкции могут быть опасными. Подумайте об использовании выпуска Visual C ++ 2008 Express или специального компилятора Microsoft Visual C ++ для Python ( details ) и NOT , используя оригинальный ответ ниже. Исходное сообщение об ошибке означает, что требуемая версия Visual C ++ не установлена.


Для установок Windows:

При запуске setup.py для установки пакетов, Python 2.7 ищет установленную Visual Studio 2008. Вы можете обмануть Python, чтобы использовать более новую Visual Studio, указав правильный путь в VS90COMNTOOLS переменной среды перед вызовом setup.py.

Выполните следующую команду в зависимости от установленной версии Visual Studio:

  • Visual Studio 2010 (VS10): SET VS90COMNTOOLS=%VS100COMNTOOLS%
  • Visual Studio 2012 (VS11): SET VS90COMNTOOLS=%VS110COMNTOOLS%
  • Visual Studio 2013 (VS12): SET VS90COMNTOOLS=%VS120COMNTOOLS%
  • Visual Studio 2015 (VS14): SET VS90COMNTOOLS=%VS140COMNTOOLS%

ВНИМАНИЕ: Как отмечено ниже, этот ответ вряд ли сработает, если вы пытаетесь скомпилировать модули Python.

Подробнее см. Сборка lxml для Python 2.7 в Windows .

225 голосов
/ 15 мая 2010

Я нашел решение. У меня была точно такая же проблема и ошибка при установке 'amara'. У меня установлен mingw32, но необходимо настроить distutils.

  1. У меня уже установлен Python 2.6.
  2. Я установил Mingw32 на C:\programs\mingw\
  3. Добавьте каталог bin mingw32 в переменную среды: добавьте c:\programs\MinGW\bin; к PATH
  4. Изменить (создать, если не существует) distutils.cfg Файл, расположенный в C:\Python26\Lib\distutils\distutils.cfg, будет:

    [build]
    compiler=mingw32
    
  5. Теперь запустите easy_install.exe amara.

Убедитесь, что среда установлена, открыв новый cmd.exe.

221 голосов
/ 12 мая 2011

Вы можете установить скомпилированную версию с http://www.lfd.uci.edu/~gohlke/pythonlibs/

152 голосов
/ 04 августа 2013

Если вы хотите скомпилировать с Visual Studio C ++ вместо mingw ...

  1. Запустите python.exe, чтобы отобразить, с какой версией VC ++ он был скомпилирован (пример показан ниже).

    важно использовать соответствующую версию компилятора Visual C ++, с которой был скомпилирован Python, поскольку distilutils get_build_version предотвращает смешивание версий ( согласно предупреждению Петра ).

    • Желтый (вверху) - это Python 2.7, скомпилированный с MSC v.1500 (Visual Studio C ++ 2008)
    • Красный (внизу) - Python 3.4.1, скомпилированный с MSC v.1600 (Visual Studio C ++ 2010)

    Example from the command line showing Python 2.7 compiled with MSC v.1500 and Python 3.4.1 compiled with MSC v.1600

  2. Используйте приведенную ниже таблицу [1] , чтобы сопоставить внутреннюю версию VC ++ с соответствующим выпуском Visual Studio:

    MSC v.1000 -> Visual C++ 4.x        
    MSC v.1100 -> Visual C++ 5          
    MSC v.1200 -> Visual C++ 6          
    MSC v.1300 -> Visual C++ .NET       
    MSC v.1310 -> Visual C++ .NET 2003  
    MSC v.1400 -> Visual C++ 2005  (8.0)
    MSC v.1500 -> Visual C++ 2008  (9.0)
    MSC v.1600 -> Visual C++ 2010 (10.0)
    MSC v.1700 -> Visual C++ 2012 (11.0)
    MSC v.1800 -> Visual C++ 2013 (12.0)
    MSC v.1900 -> Visual C++ 2015 (14.0)
    MSC v.1910 -> Visual C++ 2017 (15.0)
    MSC v.1911 -> Visual C++ 2017 (15.3)
    MSC v.1912 -> Visual C++ 2017 (15.5)
    MSC v.1913 -> Visual C++ 2017 (15.6)
    MSC v.1914 -> Visual C++ 2017 (15.7)
    MSC v.1915 -> Visual C++ 2017 (15.8)
    MSC v.1916 -> Visual C++ 2017 (15.9)   
    
  3. Загрузите и установите соответствующую версию Visual Studio C ++ из предыдущего шага.
    Дополнительные примечания для конкретных версий VC ++ перечислены ниже.

    Примечания для Visual Studio C ++ 2008

    Для только 32-разрядных компиляторов, загрузить Visual Studio C ++ 2008 Express Edition .

    Для 64-битных компиляторов [2] [3] , загрузить Windows SDK для Windows 7 и .NET Framework 3.5 SP1 .

    • Снимите все, кроме Developer Tools >> Visual C++ Compilers, чтобы сэкономить время и дисковое пространство при установке инструментов SDK, которые в противном случае вам не нужны.

    Примечания для Visual Studio C ++ 2010

    По данным Microsoft, если вы установили Visual Studio 2010 SP1, возможно, были удалены компиляторы и библиотеки для VC ++.
    В этом случае загрузите Обновление компилятора Visual C ++ 2010 SP1 .

    Примечания для Visual Studio C ++ 2015

    Если вам не нужна среда разработки Visual Studio, загрузите Средства сборки Visual Studio C ++ 2015 .

    Примечания для Visual Studio C ++ 2017

    Если вам не нужна среда разработки Visual Studio, загрузите Инструменты сборки для Visual Studio 2017 .

    Предложение : Если у вас есть 32- и 64-битная установка Python, вы также можете использовать virtualenv для создания отдельных сред Python, чтобы вы могли использовать одну или другие, не путаясь с вашим путем, чтобы выбрать, какую версию Python использовать.

Согласно @ srodriguex , вы можете пропустить загрузку пакетного файла вручную (шаги 4-6), вместо этого скопировав несколько пакетных файлов туда, где Python выполняет поиск, выполнив этот ответ . Если это не сработает, вот следующие шаги, которые изначально работали для меня.

  1. Открыть до cmd.exe

  2. Перед тем, как вы попытаетесь установить что-то, что требует расширений C, запустите следующий пакетный файл, чтобы загрузить среду компилятора VC ++ в сеанс (то есть переменные среды, путь к компилятору и т. Д.).

    Выполнить:

    • 32-битные компиляторы:

      Примечание : 32-разрядные версии Windows будут иметь C:\Program Files\ только как ожидалось

      "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"

    • 64-битные компиляторы:

      "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars64.bat"

      Примечание : Да, собственные 64-разрядные компиляторы находятся в Program Files (x86). Не спрашивай меня почему.
      Кроме того, если вам интересно, в чем разница между vcvars64.bat и vcvarsx86_amd64.bat или, что еще важнее, разница между amd64 и x86_amd64, первое относится к инструментам собственного 64-разрядного компилятора, а второе - к 64-разрядному кросс-компиляторы, которые могут работать в 32-битной установке Windows.

    Обновление:
    Если по какой-то причине вы получаете error: ... was unexpected at this time., где ... - это некоторая серия символов, то вам нужно проверить, что в переменной пути нет лишних символов, таких как дополнительные кавычки или случайные символы. Пакетный файл не сможет обновить ваш путь к сеансу, если он не сможет понять его с самого начала.

  3. Если все прошло хорошо, вы должны получить одно из следующих сообщений в зависимости от того, какую версию VC ++ и какую команду вы выполняли:

    Для 32-битных инструментов компилятора:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    Для 64-битных инструментов компилятора:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. Теперь , запустите установку через python setup.py install или pip install pkg-name

  5. Надеюсь и скрестим пальцы, что планеты правильно выровнены для взаимодействия VC ++.

71 голосов
/ 02 августа 2013

Что происходит? Модули Python могут быть частично написаны на C или C ++ (обычно для скорости). Если вы попытаетесь установить такой пакет с помощью Pip (или setup.py), он должен скомпилировать этот C / C ++ из исходного кода. Из коробки Пип нагло предположит, что у вас установлен компилятор Microsoft Visual C ++. Если у вас его нет, вы увидите это загадочное сообщение об ошибке «Ошибка: невозможно найти vcvarsall.bat».

Предписанным решением является установка компилятора C / C ++, либо Microsoft Visual C ++, либо MinGW (проект с открытым исходным кодом). Однако установка и настройка любого из них чрезвычайно сложны. (Изменить 2014: Microsoft опубликовала специальный C ++ * компилятор для Python 2.7)

Самое простое решение - использовать установщики Christoph Gohlke для Windows (.msi) для популярных пакетов Python. Он создает инсталляторы для Python 2.x и 3.x, 32-битных и 64-битных. Вы можете скачать их с http://www.lfd.uci.edu/~gohlke/pythonlibs/


Если вы тоже думаете, что «Ошибка: невозможно найти vcvarsall.bat» - это нелепо загадочное и бесполезное сообщение, то, пожалуйста, прокомментируйте ошибку на http://bugs.python.org/issue2943, чтобы заменить ее более полезным и удобным сообщением. ,

Для сравнения, Ruby поставляется с менеджером пакетов Gem и предлагает квазиофициальный компилятор C / C ++, DevKit. Если вы попытаетесь установить пакет без него, вы увидите это полезное дружеское полезное сообщение:

Пожалуйста, обновите ваш PATH, чтобы включить инструменты сборки, или загрузите DevKit с http://rubyinstaller.org/downloads и следуйте инструкциям на http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Более подробную информацию об упаковке Python вы можете прочитать на https://stackoverflow.com/a/13445719/284795

63 голосов
/ 30 сентября 2014

Вам потребуется установить компилятор Microsoft, совместимый с компилятором, используемым для сборки Python.Это означает, что вам нужен Visual C ++ 2008 (или более новый, с некоторой подстройкой ).

Microsoft теперь предоставляет встроенный компилятор и заголовки просто , чтобы иметь возможность компилировать расширения Pythonпо памятному URL:

Компилятор Microsoft Visual C ++ для Python 2.7

http://aka.ms/vcpython27

Это сравнительно небольшой пакет;85 МБ для загрузки, устанавливается без прав администратора, перезагрузка не требуется.Название немного вводит в заблуждение, компилятор будет работать для любой версии Python, изначально скомпилированной с Visual C ++ 2008, а не только для Python 2.7.

Если вы запускаете интерактивное приглашение Python или печатаете sys.version, ищите MSC версия строки;если это MSC v.1500, вы можете использовать этот инструмент.

От оригинального объявления до списка distutils :

Microsoft выпустила пакет компилятора для Python2.7, чтобы людям было проще создавать и распространять свои модули расширения C в Windows.Компилятор Microsoft Visual C ++ для Python 2.7 (он же VC9) доступен по адресу: http://aka.ms/vcpython27

Этот пакет содержит все инструменты и заголовки, необходимые для создания модулей расширения C для 32-битных и 64-битных Python 2.7.-bit (обратите внимание, что некоторые модули расширения требуют сторонних зависимостей, таких как OpenSSL или libxml2, которые не включены).Другие версии Python, построенные на Visual C ++ 2008, также поддерживаются, поэтому «Python 2.7» - это просто реклама - он будет отлично работать с 2.6 и 3.2.

Обратите внимание, что вам нужно иметь setuptools 6.0 или новее установлен (указан в системных требованиях на странице загрузки).Проект, который вы устанавливаете, должен использовать setuptools.setup(), а не distutils, иначе автоопределение не будет работать.

Microsoft заявила, что хочет сохранить стабильный URL-адрес, чтобы автоматизированные сценарии могли ссылаться на неголегко.

54 голосов
/ 08 мая 2012

У меня только что была такая же проблема, поэтому я расскажу свою историю здесь, надеясь, что она поможет кому-то еще с теми же проблемами и сэкономит им пару часов, которые я только что провел:

У меня есть mingw (g ++ (GCC) 4.6.1) и python 2.7.3 в окне Windows 7, и я пытаюсь установить PyCrypto.

Все началось с этой ошибки при запуске setup.py install:

error: Unable to find vcvarsall.bat

Легко решается после поиска ошибки, указав mingw в качестве выбранного компилятора:

setup.py install build --compiler=mingw32

Проблема в том, что тогда я получил другую ошибку:

configure: error: cannot run C compiled programs.

Оказываетсячто мой антивирус блокировал выполнение только что скомпилированного .exe.Я просто отключил антивирусный «резидентский щит» и перешел к следующей ошибке:

cc1.exe: error: unrecognized command line option '-mno-cygwin' 
error: command 'gcc' failed with exit status 1

Это решило эту проблему: «Либо установите чуть более старую версию MinGW, либо отредактируйте distutils \ cygwinccompiler.py в своемКаталог Python для удаления всех экземпляров -mno-cygwin. "(с здесь )

Теперь я наконец могу начать работать.

23 голосов
/ 12 мая 2010

Похоже, что он ищет компиляторы VC, поэтому вы можете попытаться указать тип компилятора с -c mingw32, так как у вас есть msys

python setup.py install -c mingw32
20 голосов
/ 30 марта 2013

У меня есть Python 2.73 и Windows 7. Решение, которое работало для меня, было:

  1. Добавлен каталог bin mingw32 в переменную окружения: append PATH с C:\programs\mingw\bin;
  2. Создано distutils.cfg , расположенное по адресу C:\Python27\Lib\distutils\distutils.cfg, содержащее:

    [build]
    compiler=mingw32
    

Чтобы справиться с тем, что MinGW больше не распознает флаг -mno-cygwin, удалите флаг в строке C: \ Python27 \ Lib \ distutils \ cygwincompiler.py с 322 по 326, чтобы он выглядел следующим образом:

  self.set_executables(compiler='gcc -O -Wall',
                         compiler_so='gcc -mdll -O -Wall',
                         compiler_cxx='g++ -O -Wall',
                         linker_exe='gcc',
                         linker_so='%s %s %s'
                                    % (self.linker_dll, shared_option,
                                       entry_point))
16 голосов
/ 20 февраля 2015

Просмотрите файл setup.py пакета, который вы пытаетесь установить. Если это более старый пакет, он может импортировать distutils.core.setup(), а не setuptools.setup().

Я столкнулся с этим (в 2015 году) с комбинацией этих факторов:

  1. Компилятор Microsoft Visual C ++ для Python 2.7 из http://aka.ms/vcpython27

  2. Более старый пакет, который использует distutils.core.setup()

  3. Попытка сделать python setup.py build вместо использования pip.

Если вы используете последнюю версию pip, это заставит (monkeypatch) пакет использовать setuptools, даже если его setup.py вызывает distutils. Однако, если вы не используете pip и вместо этого просто делаете python setup.py build, процесс сборки будет использовать distutils.core.setup(), который не знает о месте установки компилятора.


Решение

Шаг 1: Откройте соответствующую командную строку Visual C ++ 2008

Откройте меню «Пуск» или начальный экран и найдите «32-разрядная командная строка Visual C ++ 2008» (если ваш Python 32-разрядный) или «64-разрядная командная строка Visual C ++ 2008» (если ваш Python 64 -немного). Запустить его. В командной строке должно быть написано Visual C ++ 2008 ... в строке заголовка.

Шаг 2: Задать переменные среды

Установите эти переменные среды в командной строке, которую вы только что открыли.

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

Ссылка http://bugs.python.org/issue23246

Шаг 3: Сборка и установка

cd к пакету, который вы хотите собрать, и запустите python setup.py build, затем python setup.py install. Если вы хотите установить в virtualenv, активируйте его перед сборкой.

...