ошибка: не удается найти vcvarsall.bat


852

Я попытался установить пакет 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

6
Для дальнейшего использования было бы неплохо увидеть, на какой платформе вы используете это.
viam0Zah

47
Если вы считаете, что это нелепо загадочное и бесполезное сообщение об ошибке, проголосуйте за ошибку на bugs.python.org/issue2943
полковник Panic

48
Microsoft теперь предлагает решение: microsoft.com/en-us/download/details.aspx?id=44266
Мартин Питерс

6
@MartijnPieters Я попытался загрузить и установить ссылку, которую вы предоставили вместе с wheel и setuptools 7.0, но она не работает. Я получаю сообщение: C:\Users\User\libfreenect\wrappers\python>python setup.py install running install running build running build_ext building 'freenect' extension error: Unable to find vcvarsall.bat
compski

4
Стив Дауэр (парень из команды Microsoft по Python) написал пост в блоге на эту тему, который стоит прочитать: blogs.msdn.microsoft.com/pythonengineering/2016/04/11/…
Коди Пирсолл

Ответы:


683

Обновление : Комментарии указывают, что инструкции здесь могут быть опасными. Подумайте об использовании выпуска Visual C ++ 2008 Express или специального компилятора Microsoft Visual C ++ для Python ( подробности ), а НЕ используйте оригинальный ответ ниже. Исходное сообщение об ошибке означает, что требуемая версия 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 .


21
Это сделал для меня :(
fmuecke

8
@Gili: похоже, эта проблема связана с пробелами в переменной, попробуйте заключить ее в кавычки. Для меня% VS100COMNTOOLS% = "C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools"
legends2k

7
Это не будет работать для многих вещей, потому что Python опирается на VS2008. Посмотрите на этот ответ: stackoverflow.com/questions/6551724/…
shezi

182
ПРЕДУПРЕЖДЕНИЕ!!! Это неправильный ответ. Вы не должны ни при каких обстоятельствах компиляции расширения Python C с использованием различной (версии) компилятора , что один используется для компиляции самого Python , как эти два (версия) компиляторы, вероятно , имеет несовместимые библиотеки C во время выполнения. Смотрите этот ответ для более подробной информации.
Петр Доброгост

72
Вы можете загрузить бесплатную версию Visual C ++ 2008 Express Edition с go.microsoft.com/?linkid=7729279 , которая установит переменную среды VS90COMNTOOLS во время установки и, следовательно, соберет совместимый компилятор.
Эрик Смит

225

Я нашел решение. У меня была точно такая же проблема и ошибка при установке 'амары'. У меня был установлен 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.


45
Это прекрасно работает для Python2.6, но по некоторым причинам я не могу заставить его работать на Python2.7. Это работает, если я загружаю исходный код пакета и устанавливаю его с помощью 'python setup.py install --compile = mingw32', но по какой-то причине с помощью easy_install или pip все равно пытаюсь найти vcvarsall.
Джонатан Хартли

2
Я , наконец , получил scikits.image установить в Python (х, у) 2,7 путем добавления C:\msysgit\mingw\mingw32\binи C:\msysgit\mingw\binк пользовательскому PATH и перезапуска Spyder перед запуском pip installснова
эндолиты

20
Там нет необходимости постоянно перезагружаться из - за изменения переменной окружения. Достаточно открыть новый процесс cmd.exe.
Томалак

11
Я все еще не мог это исправить. Это ошибка: gcc: error: unrecognized command line option '-mno-cygwin' error: Setup script exited with error: command 'gcc' failed with exit status 1послеeasy_install.exe amara
пользователь

5
@user, вы должны открыть этот файл: C:\Python27\Lib\distutils\cygwincompiler.pyи удалить –mno-cygwinиз него все вхождения ; Это связано с тем, что в последних версиях GCC удалена –mno-cygwinопция, и ее там быть не должно.
Зейнаб Аббасимазар

220

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


15
просто совет: вы можете установить пакет с этого сайта в virtualenv, запустив easy_install binary_installer_built_with_distutils.exeв virtualenv, согласно этому ответу .
Янчж

14
Каждый разработчик Python для Windows должен знать об этом
High Schooler

1
Вы также можете wheel convert ....exeустановить эти установщики, а затем установить их с помощью pip в любое время.
Zooba

3
Чтобы быть более точным, lfd.uci.edu/~gohlke/pythonlibs/#mysql-python и после загрузки откройте терминал как администратор и запуститеpython -m pip install <filename>
arun

Пресвятая Богородица, это прямо на месте. Работает как шарм, TY :)
Амир,

162

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

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

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

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

    Пример из командной строки, показывающий Python 2.7, скомпилированный с MSC v.1500 и Python 3.4.1, скомпилированный с 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 с пакетом обновления 1 (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 ++.


Не могу рекомендовать достаточно , что вы действительно пройти через боль сразу переходить на 64 бит. Это просто вопрос времени, когда вам понадобится более 4 ГБ адресного пространства. Я говорю из мучительного опыта после перехода на 32-разрядную версию, потому что это было намного проще, чем необходимость удаления всего, включая зависимости и переход на 64-разрядную версию. Почти целые выходные.
Томас Браун

1
Опять же, я забываю, как много людей будут использовать Python для гораздо больших задач, подобных этому. И @ThomasBrowne, я уверен, что это было болезненное и ненужное зло опыта. Я смотрю на это и, надеюсь, я смогу что-нибудь найти. Основная проблема заключалась в том, что Visual Studio C ++ 2008 Express не поставляется с 64-битным компилятором, но я уверен, что где-то здесь.
Джош Боуден

Просто обновите его, добавив дополнительную информацию о том, как получить 64-битные компиляторы, если они вам нужны.
Джош Боуден

В моем случае я следую шагу 1 выше и пропущу остальные после этого ответа . Теперь я могу устанавливать пакеты, избегая раздражения от запуска .bat.
srodriguex

@srodriguex хорошо в этом случае, похоже, что Python предполагает, что 64-битные инструменты компилятора загружаются в PATH, используя то, что он ищет ...\VC\bin\vcvarsamd64.batи ...\VC\bin\amd64\vcvarsamd64.bat.
Джош Боуден

73

В чем дело? Модули 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)

Самым простым решением является использование установщиков 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


Как я могу использовать pip для установки этого предварительно скомпилированного исполняемого файла в моей виртуальной среде?
Шайлен

@shailenTJ хороший вопрос. Я никогда не делал этого, но попробуйте stackoverflow.com/a/5442340/284795
Полковник Panic

Это было лучшее / простое решение, которое я знаю. Спасибо.
user1477388

Это Edit 2014 является лучшим ответом для меня. Легко пропустить инструкцию: убедитесь, что вы обновились setuptoolsдо версии 6.0или выше с pip install setuptools --upgrade.
orlade

64

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

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

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

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


2
Согласно моему другому комментарию, вы можете убедиться setuptools, что в курсе pip install setuptools --upgrade.
orlade

Я рассмотрел вопрос, почему соответствующая логика заключается не в том setuptools, чтобы distutilsстроить модули - это основная функциональность, и в ней есть соответствующий код, но его старая версия. Похоже, что distutilsсопровождающие просто отказались от поддержки всех возможных вариантов MSSDK и свалили эту работу на своих setuptoolsколлег, которые были более заинтересованы.
ivan_pozdeev

1
@ivan_pozdeev: setuptoolsтакже может выпускать гораздо чаще, чем distutilsвключено в цикл выпуска Python. И distitutilsдействительно вошел в режим обслуживания своего рода, с работой над новыми системами, намеченными, чтобы заменить это. Эта работа остановилась вместо этого.
Мартин Питерс

cython использует distutils, вам нужно импортировать setuptools, который monkey-patches distutils: github.com/cython/cython/wiki/CythonExtensionsOnWindows
denfromufa

54

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

У меня есть 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». ( отсюда )

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


7
Вам также понадобится MinGW-совместимая версия библиотеки Python. См. Eli.thegreenplace.net/2008/06/28/… для получения дополнительной информации
Гили


23

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

python setup.py install -c mingw32

16
Просто для того, чтобы прояснить, команда, которая работает: python setup.py build --compiler=mingw32следуетpython setup.py install
Эмиль Стенстрём

После запуска python setup.py build --compiler = mingw32 я получаю ImportError: нет модуля с именем Cython.Distutils, пока Cython установлен под Anaconda. Какие-либо предложения?
Serendipity

20

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

  1. Добавлен каталог bin mingw32 в переменную окружения: добавьте 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))

15

Посмотрите в 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, активируйте его перед сборкой.


вы также можете собрать свой пакет, используя <code> pip </ code> вместо <code> python setup.py build </ code>
aronadaal

9

Может быть, кто-то может быть заинтересован, у меня сработало следующее для пакета py2exe. (У меня Windows 7 64-битная и переносимый Python 2.7, Visual Studio 2005 Express с Windows SDK для Windows 7 и .NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

тогда:

python.exe setup.py install

Нет, вы правы, я не уверен, что случилось, я удалю оригинальный комментарий.
Дейв Чаллис

1
Очень полезный!! В моем случае я сделал «установить VS90COMNTOOLS =% VS110COMNTOOLS%».
Jrvidotti

@Exzile: да, вы вводите эти команды в одном сеансе командной строки
Стефано Фену

НЕ ДЕЛАЙТЕ ЭТОГО!!! Смотрите этот ответ для более подробной информации.
Аноним

8

Я потратил почти 2 дня, чтобы понять, как исправить эту проблему в моей 64-битной версии Python 3.4: Python 3.4.3 (v3.4.3: 9b73f1c3e601, 24 февраля 2015, 22:44:40) [MSC v.1600 64 бит (AMD64) )] на win32

Решение 1, сложное: (прежде чем читать это, прочтите первое Решение 2 ниже) Наконец, вот что мне помогло:

  1. установить Visual C ++ 2010 Express
  2. установить Microsoft Windows SDK v7.1 для Windows 7
  3. создать вручную файл, vcvars64.batв C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64котором содержится CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64или другой путь в зависимости от того, где у вас установлен
  4. (это необязательно) установите Microsoft Visual Studio 2010 с пакетом обновления 1 (SP1) вместе с обновлением компилятора Microsoft Visual C ++ 2010 с пакетом обновления 1 (SP1) для Windows SDK 7.1
  5. после этого я попытался, pip install numpyно получил следующую ошибку:

    File "numpy\core\setup.py", line 686, in get_mathlib_info
    raise RuntimeError("Broken toolchain: cannot link a simple C program")
    RuntimeError: Broken toolchain: cannot link a simple C program

    Я изменил mfinfoк Noneв C:\Python34\Lib\distutils\msvc9compiler.pyсоответствии с настоящим https://stackoverflow.com/a/23099820/4383472

  6. наконец, после pip install numpyкоманды мой антивирус avast попытался вмешаться в процесс установки, но я быстро отключил его

Это заняло очень много времени - несколько минут, чтобы numpy скомпилировался, я даже подумал, что произошла ошибка, но в конце концов все было в порядке.

Решение 2, простое: (Я знаю, что этот подход уже упоминался в ответе с большим количеством голосов , но позвольте мне повторить, так как это действительно проще) После прохождения всей этой работы я понял, что лучший способ для меня это просто использовать уже предварительно скомпилированные двоичные файлы из http://www.lfd.uci.edu/~gohlke/pythonlibs/ в будущем. Существует очень небольшая вероятность того, что мне когда-нибудь понадобится какой-то пакет (или версия пакета), которого нет на этом сайте. Процесс установки также намного быстрее. Например, чтобы установить numpy:

  1. Donwload numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl (если у вас Python 3.4 64-bit) с этого сайта
  2. в командной строке или PowerShell установить его с помощью pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(или полный путь к файлу в зависимости от того, как открывается командная строка)

numpy ‑ 1.9.2 + mkl ‑ cp34 ‑ none ‑ win_amd64.whl - не удается найти этот файл по указанной выше ссылке.
Амреш Гири

7

Я хотел запустить pysph на Windows 10 под Python 2.7 и получил vcvarsall.bat не был найден (из distutils)

Мое решение было следующее:

Установите Microsoft Visual C ++ для Python 2.7 (как предложил @Michael)

В Windows 10 он был установлен в (мое имя пользователя Andreas):

C:\Users\Andreas\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0

Установить переменную окружения VS90COMNTOOLS путь установки Visual C ++ для Python 2.7 (см. Путь выше).

Если это все еще не работает, тогда модифицируйте в модуле

C:/Python27/lib/distutils

файл msvc9compiler.py . Найдите в нем функцию find_vcvarsall и выполните следующую модификацию.

Заменить строку:

productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")

с

productdir = os.path.join(toolsdir)

Это где vcvarsall.bat находится в моем случае (проверьте, где vcvarsall.bat находится в вашей установке).


Достаточно интересно, %userprofile%\Appdata\Local\Programs\CommonПусто для меня.
Брайс Гуинта

Даже после установки Microsoft Visual C ++ для Python 2.7?
Chiefenne

7

Я столкнулся с этой проблемой, когда пытался установить библиотеку NumPy на моем Python 3.5. Решением является установка VS2015. У меня была VS2008, 2012, 2013, ни одна из которых не совместима с python 3.5. Видимо, более новая версия python зависит от более новых версий VS.

Также убедитесь, что C ++ Common Tools установлены вместе с Visual Studio.

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


6

Я перепробовал все приведенные выше ответы и обнаружил, что все они не работают. Возможно, я использовал Windows 8 и установил Visual Studio 2012. В этом случае это то, что вы делаете.

vcvarsall.batФайл находится здесь: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

Просто выберите файл и скопируйте его.

Затем перейдите в этот каталог: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

и вставьте файл. И тогда все должно быть хорошо.


Нет, все не так хорошо, я следовал вашему ответу, но все равно получаю ту же ошибку.
Stupid_Intern

6

Вы можете скачать бесплатную Visual C ++ 2008 Express Edition с http://go.microsoft.com/?linkid=7729279 по адресу , в которой будет установлена ​​переменная среды VS90COMNTOOLS во время установки и, следовательно, она будет собрана с помощью совместимого компилятора.

Как упомянул в комментарии @PiotrDobrogost, его ответ на этот другой вопрос детально объясняет, почему Visual C ++ 2008 является правильным вариантом для сборки, но это может измениться, когда сборка Python для Windows переходит на более новые версии Visual Studio: Сборка lxml для Python 2.7 на Windows


Также убедитесь, что другие версии не установлены. Мне было трудно с этим. Я переформатировал компьютер и установил именно эту версию. Поскольку удаление нескольких версий VS заняло бы у меня столько же времени.
jmunsch

6

У меня была эта проблема с использованием Python 3.4.1 на Windows 7 x64 , и, к сожалению, в необходимых мне пакетах не было подходящего exe или колесика, которые я мог бы использовать. Эта система требует нескольких «обходных путей», которые подробно описаны ниже (и TLDR внизу ).

Используя информацию из ответа Jaxrtech выше , я определил, что мне нужна Visual Studio C ++ 2010 (sys.version return MSC v.1600), поэтому я установил Visual C ++ 2010 Express по ссылке в его ответе, которая называется http://go.microsoft. .com /? linkid = 9709949 . Я установил все с обновлениями, но, как вы можете прочитать ниже, это было ошибкой. В настоящее время должна быть установлена ​​только оригинальная версия Express (ничего не обновляется).

vcvarsall.bat присутствовал, но возникла новая ошибка при установке пакета query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']. С этой ошибкой связаны и другие вопросы, связанные с переполнением стека, например, ошибки при сборке / установке модуля C для Python 2.7.

Из этого ответа я определил, что 2010 Express устанавливает только 32-битные компиляторы. Чтобы получить 64-битные (и другие) компиляторы, вам нужно установить Windows 7.1 SDK. См. Http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

Это не установит для меня, хотя, и установщик возвратил ошибку installation failed with return code 5100. Я нашел решение по следующей ссылке: http://support.microsoft.com/kb/2717426 . Короче говоря, если установлены более новые версии распространяемого пакета Microsoft Visual C ++ 2010 для архитектуры x86 и x64, они конфликтуют с теми, которые есть в установщике SDK, и их нужно сначала удалить.

Затем SDK установлен, но я заметил, что vcvars64.bat по-прежнему не существует C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\binни в его подпапках. vcvarsall.bat запускает пакетный файл vcvars64, поэтому без него пакет python все равно не установится (я забыл ошибку, которая была показана в это время).

Затем я нашел несколько инструкций здесь: http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1 Следуя инструкциям, я уже установил Express и 7.1 SDK, поэтому установил SDK 7.1 SP1 и выполнил Отсутствует исправление файла заголовка. Затем я вручную создал vcvars64.bat с содержимым CALL setenv /x64. Я вставлю все эти инструкции сюда, чтобы они не потерялись.

Шаг 1 - загрузить Visual Studio Express 2010.

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express - это хорошее место для начала. Загрузите установщик и запустите его (vc_web.exe). Вам не нужна дополнительная загрузка SQL 2008.

Вам также понадобится Windows SDK (в настоящее время 7.1) для 64-битных компиляторов - если только вы не хотите делать только 32-битные сборки, которые не полностью поддерживаются ...

http://www.microsoft.com/en-us/download/details.aspx?id=8279 является хорошей отправной точкой для загрузки этого файла - вы захотите запустить winsdk_web.exe после загрузки!

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

Наконец, загрузите и установите обновление Windows SDK 7.1 с пакетом обновления 1 (SP1): http://www.microsoft.com/en-us/download/details.aspx?id=4422.

И, чтобы исправить отсутствующий заголовочный файл, VS2010 SP1. http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

И, черт возьми, исправить недостающий пакетный файл для VS2010 Express. Это становится совершенно абсурдным.

В C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64 создайте «vcvars64.bat» со следующим (вам нужно будет работать от имени администратора):

ЗВОНОК setenv / x64

Мой пакет python по-прежнему не установлен (не может вспомнить ошибку). Затем я нашел несколько инструкций (скопировано ниже) для использования специальной командной строки SDK 7.1, см. Https://mail.python.org/pipermail/distutils-sig/2012-Feb февраля/ 018300.html.

Не обращайте внимания на этот вопрос. Кто-то здесь заметил этот пункт в меню: Пуск-> Все программы-> Microsoft Windows SDK v7.1 -> Командная строка Windows SDK 7.1

Это запускает пакетное задание, которое, кажется, устанавливает рабочую среду для компилятора. В этом приглашении вы можете ввести «setup.py build» или «setup.py install».

Я открыл командную строку Windows SDK 7.1 в соответствии с инструкциями и использовал ее для запуска easy_install в пакете python. И наконец, успехов!


TLDR ;

  1. Установите Visual Studio Express 2010 (желательно без обновленных распространяемых файлов или SQL-сервера).
  2. Установите Windows 7.1 SDK
  3. Установить Instal SDK 7.1 SP1 и исправить файл заголовка VS2010 SP1 (этот шаг может не потребоваться).
  4. Вручную создавать C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batс контентомCALL setenv /x64
  5. Пуск-> Все программы-> Microsoft Windows SDK v7.1 -> Windows SDK 7.1. Командная строка, чтобы открыть специальную командную строку x64, которую затем можно использовать с python / easy_install / pip / etc (в том числе в virtual_envs).

4

Ниже описано, как решить эту проблему, я пытался создать установку с расширением Cython.

  1. Установите компилятор Microsoft Visual C ++ для Python 2.7
  2. Расположение установки по умолчанию: @ C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ для Python. Это может на самом деле решить проблему, протестируйте один раз, прежде чем продолжить.
  3. Если это не удается, проверьте, где в VC ++ для python находится файл vcvarsall.bat.
  4. Откройте файл msvc9compiler.py пакета distutils в блокноте.
  5. В моем окне это была функция @ C: \ Anaconda2 \ Lib \ distutils \ msvc9compiler.py find_vcvarsall в этом файле, определяющая версию VC путем распечатки аргумента версии. Для Python 2.7 это будет 9.0
  6. Теперь создайте переменную среды VS90COMNTOOLS, указывающую на C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ для Python \ 9.0 \ VC \ bin
  7. По некоторым причинам distutils ожидает, что файл vcvarsall.bat находится в каталоге VC, но VC ++ для инструментов python содержит его в корне из 9.0. Чтобы исправить это, удалите «VC» из path.join (примерно в строке 247)

    #productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC") productdir = os.path.join(toolsdir, os.pardir, os.pardir)

Вышеуказанные шаги решили проблему для меня.


Я получаю сообщение об ошибке при выполнении указанных выше шагов. LINK: ошибка LNK2001: неразрешенный внешний символ init__init__ build \ temp.win-amd64-2.7 \ Release_ init_ .lib : фатальная ошибка LNK1120: 1 неразрешенная внешняя ошибка: команда 'C: \\ Users \\ ma306477 \\ AppData \\ Local \\ Programs \\ Common \\ Microsoft \\ Visual C ++ для Python \\ 9.0 \\ VC \\ Bin \\ amd64 \\ link.exe 'завершился неудачно с состоянием выхода 1120
маниш прасад

3

Я перепробовал много решений, но у меня работало только одно - установка Microsoft Visual Studio 2008 Express C ++.

Я получил эту проблему с модулем Python 2.7, написанным на C (yEnc, у которого есть другие проблемы с MS VS). Обратите внимание, что Python 2.7 построен с версией MS VS 2008, а не 2010!

Несмотря на то, что он бесплатный, найти его довольно сложно, поскольку MS продвигает VS 2010. Тем не менее, официальные очень прямые ссылки MSDN все еще работают: проверьте https://stackoverflow.com/a/15319069/2227298 ссылки для скачивания.


Да, лучший способ - установить VS2008.
Пиловер

3

Если у вас установлен Mingw

pip install --global-option build_ext --global-option --compiler=mingw32 packagename

работает, заставляя pip собирать, используя компилятор mingw вместо Microsoft. Смотрите здесь https://github.com/pypa/pip/issues/18 для деталей (последнее сообщение).



3

Самый простой способ решить эту проблему в 2016 году - установить Chocolatey, а затем vcpython27пакет. Открыть Powershell:

> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
> choco install python2 -y
> choco install vcpython27 -y

2

Я не знаю, слишком ли поздно, но я нашел компилятор Microsoft Visual C ++ для Python 2.7, который читает

Типичное сообщение об ошибке, которое вы получите, если вам нужен этот пакет компилятора: Невозможно найти vcvarsall.bat

Надеюсь это поможет!


2

Я получил ту же проблему и решил ее в данный момент.

«Google» сказал мне, что мне нужно установить «Microsoft Visual C ++ Compiler для Python 2.7». Я устанавливаю не только инструмент, но и Visual C ++ 2008 Reditributable, но это не помогло. Затем я попытался установить Visual C ++ 2008 Express Edition. И проблема ушла!

Просто попробуйте установить Visual C ++ 2008 Express Edition!


2

вызов import setuptoolsбудет обезвреживать патчи distutils для принудительной совместимости с Visual Studio. Вызов vcvars32.batвручную настроит виртуальную среду и предотвратит другие распространенные ошибки, которые выдает компилятор. Для VS 2017 файл находится по адресу

"C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ Auxiliary \ Build \ vcvars32.bat"

Вот скрипт установки, который я использую для быстрой компиляции файлов .pyx в .pyd: (Примечание: он использует сторонний модуль send2trash

# cython_setup.py
import sys, os, time, platform, subprocess
from setuptools import setup, find_packages
from Cython.Build import cythonize
from traceback import format_exc

# USAGE:
#
#   from cython_setup import run
#   run(pyx_path)

# vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"

# NOTE: to use visual studio 2017 you must have setuptools version 34+
vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars32.bat"


def _build_ext():
    try:
        pyx_path = sys.argv.pop(-1)
        pyx_path = os.path.abspath(pyx_path)
        if not os.path.exists(pyx_path):
            raise FileNotFoundError(f"{pyx_path} does not exist")
        project_name = sys.argv.pop(-1)
        os.chdir(os.path.abspath(os.path.dirname(pyx_path)))

        print("cwd: %s" % os.getcwd())
        print(os.path.abspath("build"))
        setup(
            name=project_name,
            # cmdclass = {'build_ext': build_ext},
            packages=find_packages(),
            # ext_modules=cythonize(extensions)
            ext_modules=cythonize(pyx_path,
                                  compiler_directives={'language_level': 3, 'infer_types': True, 'binding': False},
                                  annotate=True),
            # include_dirs = [numpy.get_include()]
            build_dir=os.path.abspath("build")
        )
    except:
        input(format_exc())


def retry(func):
    def wrapper(*args, **kw):
        tries = 0
        while True:
            try:
                return func(*args, **kw)
            except Exception:
                tries += 1
                if tries > 4:
                    raise
                time.sleep(0.4)

    return wrapper


@retry
def cleanup(pyx_path):
    from send2trash import send2trash
    c_file = os.path.splitext(pyx_path)[0] + ".c"
    if os.path.exists(c_file):
        os.remove(c_file)

    if os.path.exists("build"):
        send2trash("build")


def move_pyd_files(pyx_path):
    pyx_dir = os.path.dirname(pyx_path)
    build_dir = os.path.join(pyx_dir, "build")
    if not os.path.exists(build_dir):
        raise RuntimeError(f"build_dir {build_dir} did not exist....")
    found_pyd = False
    for top, dirs, nondirs in os.walk(build_dir):
        for name in nondirs:
            if name.lower().endswith(".pyd") or name.lower().endswith(".so"):
                found_pyd = True
                old_path = os.path.join(top, name)
                new_path = os.path.join(pyx_dir, name)
                if os.path.exists(new_path):
                    print(f"removing {new_path}")
                    os.remove(new_path)
                print(f"file created at {new_path}")
                os.rename(old_path, new_path)
    if not found_pyd:
        raise RuntimeError("Never found .pyd file to move")

def run(pyx_path):
    """
    :param pyx_path:
    :type pyx_path:
    :return: this function creates the batch file, which in turn calls this module, which calls cythonize, once done
    the batch script deletes itself... I'm sure theres a less convoluted way of doing this, but it works
    :rtype:
    """
    try:
        project_name = os.path.splitext(os.path.basename(pyx_path))[0]
        run_script(project_name, os.path.abspath(pyx_path))
    except:
        input(format_exc())


def run_script(project_name, pyx_path):
    dirname = os.path.dirname(pyx_path)
    # ------------------------------
    os.chdir(dirname)
    if os.path.exists(vcvars):
        #  raise RuntimeError(
        # f"Could not find vcvars32.bat at {vcvars}\nis Visual Studio Installed?\nIs setuptools version > 34?")
        subprocess.check_call(f'call "{vcvars}"', shell=True)

    cmd = "python" if platform.system() == "Windows" else "python3"
    subprocess.check_call(f'{cmd} "{__file__}" build_ext "{project_name}" "{pyx_path}"', shell=True)
    move_pyd_files(pyx_path)
    cleanup(pyx_path)


if len(sys.argv) > 2:
    _build_ext()

Действительно, импорт setuptoolsпомогает, также в случае компиляции Cython .
Basj

Не могли бы вы объяснить немного подробнее? как вызвать vcvars32.bat вручную? У меня есть сборник Cython
Июнь Ван

2

Используйте эту ссылку для загрузки и установки Visual C ++ 2015 Build Tools . Он автоматически загрузит visualcppbuildtools_full.exeи установит Visual C ++ 14.0 без фактической установки Visual Studio. После завершения установки повторите попытку установки pip, и вы больше не получите ошибку.

Я проверил его на следующих платформах и версиях:

Python 3.6 on Windows 7 64-bit
Python 3.7 on Windows Server 2016 (64-bit system)
Python 3.8 on Windows 10 64-bit

1

Если вы хотите установить pyodbc в Windows, на которой не установлена ​​Visual Studio, другой вариант - вручную установить pyodbc с помощью бинарного дистрибутива.

Это особенно полезно, если у вас нет прав администратора на компьютере, с которым вы работаете, и вы пытаетесь настроить virtualenv .

шаги:

  1. Загрузите последнюю версию установщика Windows здесь (pyodbc-XXXwin-Y-py2.7.exe)
  2. Откройте исполняемый файл установщика, используя 7-Zip (или WinRAR или что-то еще)
  3. Извлеките pyodbc.pyd и pyodbc-XXX-py2.7.egg-info и поместите их в [python installation directory or virtualenv]\Lib\site-packages
  4. Нет шага 4 :)

1

В Python 3.4 зависимость от Visual Studio 2010. Установка Visual C ++ 2010 Express устранила проблему для меня.

Обманывая это с использованием установок VS 2008 или 2013, которые, как мне показалось, не работали.



1

Ответ, данный @monkey, один из правильных, но он неполный.

Если вы хотите использовать MinGW , вы должны выбрать C, C ++, а также другие инструменты разработки, предложенные в процессе установки MinGW, чтобы также получить «make.exe».

У вас также должен быть установлен путь к make.exe в env.

Чтобы завершить свой ответ, вот шаги:

  1. Добавьте каталог bin mingw32 в переменные вашей среды
  2. Добавить C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;в ПУТЬ
  3. Отредактируйте (создайте, если он не существует) distutils.cfgфайл, расположенный в C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32

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


32-битные модули Python должны быть скомпилированы с 32-битным MINGW, в то время как 64-битные модули Python должны быть скомпилированы с 64-битным MINGW. На Cygwin 64 bit доступно 2 исполняемых файла mingw: x86_64-w64-mingw32-gccи i686-w64-mingw32-gcc. Эти исполняемые файлы, очевидно, такие же, как те, которые вы обычно получаете от Mingw (просто скомпилированные в среде Cygwin).
CMCDragonkai
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.