Ошибка: Не удалось найти vcvarsall.bat

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

Ответы

Ответ 1

Обновить. Комментарии указывают на то, что инструкции здесь могут быть опасными. Рассмотрите возможность использования версии Visual С++ 2008 Express или специально созданного Microsoft Visual С++ Compiler for Python (подробнее) и НЕ, используя исходный ответ ниже. Исходное сообщение об ошибке означает, что требуемая версия Visual С++ не установлена.


Для установок 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.

Ответ 2

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

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

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

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

Ответ 4

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

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

    важно использовать соответствующую версию компилятора Visual C++, с которой был скомпилирован Python, поскольку distilutilsget_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], чтобы сопоставить внутреннюю версию V C++ с соответствующим выпуском 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++ из предыдущего шага.
    Дополнительные примечания для конкретных версий V C++ перечислены ниже.

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

    Загрузите только Visual Studio C++ 2008 Express Edition.

    . Только для битовых компиляторов 32-.Для 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, возможно, были удалены компиляторы и библиотеки для V C++.
    В этом случае загрузите 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, запустите следующий пакетный файл, чтобы загрузить среду компилятора V C++ в сеанс (то есть переменные среды, путь к компилятору и т.д.).

    Выполнение:

    • 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-битные кросс-компиляторы, которые могут работать в битовой установке Windows 32-.

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

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

    Для инструментов битового компилятора 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. Надеюсь и скрестим пальцы, что планеты выровнены правильно для взаимодействия V C++.

Ответ 5

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

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

Самое простое решение - использовать установщики Windows Christoph Gohlke (.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 на странице /questions/2057/does-python-have-a-packagemodule-management-system/23514#23514

Ответ 6

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

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

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

http://aka.ms/vcpython27

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

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

Из оригинального объявления в список distutils:

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

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

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

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

Ответ 7

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

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

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

Ответ 8

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

python setup.py install -c mingw32

Ответ 9

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

  • Добавлен каталог bin bin в переменную среды: добавьте PATH с помощью C:\programs\mingw\bin;
  • Создан 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))

Ответ 10

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

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

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

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

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

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


Решение

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

Откройте меню "Пуск" или "Начало" и выполните поиск "32-разрядной командной строки Visual С++ 2008" (если ваш питон 32-разрядный) или "64-разрядная командная строка Visual С++ 2008" (если ваш питон 64 -немного). Запустить его. Командная строка должна указать Visual С++ 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, активируйте его перед сборкой.

Ответ 11

Может быть, кому-то может быть интересно, для работы с 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

Ответ 12

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

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

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

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

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

Ответ 13

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

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

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

Ответ 14

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

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

Установите Microsoft Visual С++ для Python 2.7 (например, предложил Майкл)

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

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

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

Если он все еще не работает, то modifiy в модуле

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 находится в вашей установке).

Ответ 15

Я попробовал все вышеперечисленные ответы и нашел, что все они не работают, возможно, я использовал 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

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

Ответ 16

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

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

Ответ 17

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

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

vcvarsall.bat теперь присутствует, но при установке пакета произошла новая ошибка, query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']. С этой ошибкой возникают другие проблемы с stackoverflow, такие как Ошибки при сборке/установке модуля 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. Короче говоря, если установлены более новые версии x86 и x64 Microsoft Visual С++ 2010 Redistributable, они конфликтуют с установками в установщике 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 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" со следующим (вам нужно будет работать как администратор):

CALL setenv/x64

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

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

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

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


TL;DR;

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

Ответ 18

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

  • Установить компилятор Microsoft Visual С++ для Python 2.7
  • Место установки по умолчанию будет @ C:\Users\PC-user\AppData\Local\Programs\Common\Microsoft\Visual С++ для Python. Это может решить проблему, прежде чем продолжить.
  • Если это не удается, проверьте, где в VС++ для файла python vcvarsall.bat расположен
  • Откройте msvc9compiler.py файл пакета distutils в блокноте.
  • В моем окне это было @ C:\Anaconda2\Lib\distutils\msvc9compiler.py функция find_vcvarsall в этом файле, определите версию VC, распечатав версию аргумент. Для Python 2.7 это может быть 9.0
  • Теперь создайте переменная среды VS90COMNTOOLS, указывая на C:\Users\PC-user\AppData\Local\Programs\Common\Microsoft\Visual С++ для Python\9.0\VC\bin
  • По какой-то причине distutils ожидает, что Файл vcvarsall.bat находится в директории VC, но VС++ для инструментов 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)

Вышеупомянутые шаги исправили проблему для меня.

Ответ 19

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

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

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

Ответ 20

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

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

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

Ответ 22

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

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

Ответ 23

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

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

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

Ответ 24

У меня такая же проблема, и я решил ее в данный момент.

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

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

Ответ 25

вызов 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()

Ответ 26

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

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

Шаги:

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

Ответ 27

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

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

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

Чтобы выполнить свой ответ, выполните следующие действия:

  • Добавьте каталог bin mingw32 в переменные среды
  • Добавить C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin; в PATH
  • Изменить (создать, если он не существует), файл distutils.cfg, расположенный в C:\Python26\Lib\distutils\distutils.cfg, будет:

    [build]
    compiler=mingw32
    

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

Ответ 28

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

Обманывать его с помощью VS 2008 или 2013, которые, как мне оказалось, не работали.

Ответ 29

Вы можете использовать easy_install вместо pip, который работает для меня.

Ответ 30

У меня была та же ошибка (что я считаю глупым и не очень полезным вообще, как сообщения об ошибках) и продолжал испытывать проблемы, несмотря на наличие компилятора C.

Удивительно, что для меня работала просто модернизация pip и setuptools до самой последней версии. Надеюсь, это поможет кому-то другому.