Проблемы компилятора с pip во время простой установки под Windows 8.1, 7 Enterprise и 7 Home Editions

Я не могу установить numpy через pip install numpy на моем компьютере с Python 3.4 из-за различных ошибок, которые я получаю, связанных с проблемами компиляции (это только в случае 64-битной установки Python).

Эта проблема широко освещалась, и у меня возник вопрос, связанный с невозможностью найти vcvarsall.bat. Я проверил это на трех разных чистых машинах под управлением Windows 8.1, 7 Enterprise и 7 Home Edition, и это всегда подходит.

Установка Visual Studio 2010 Express C++ избавляет от первой ошибки в ссылке - т.е. невозможно найти vcvarsall.bat, но выдает следующее исключение, заканчивающееся ValueError, как здесь:

  File "C:\Python34\lib\distutils\msvc9compiler.py", line 371, in initialize

    vc_env = query_vcvarsall(VERSION, plat_spec)

  File "C:\Python34\lib\distutils\msvc9compiler.py", line 287, in query_vcvarsall

    raise ValueError(str(list(result.keys())))

ValueError: ['path']

Затем я последовал этому совету и пропатчил файл в виде ссылки на форуме, что привело к ошибке KEY_BASE.

  File "C:\Users\Matej\AppData\Local\Temp\pip_build_Matej\numpy\numpy\distutils\command\config.py", line 18, in <module>

    from numpy.distutils.mingw32ccompiler import generate_manifest

  File "C:\Users\Matej\AppData\Local\Temp\pip_build_Matej\numpy\numpy\distutils\mingw32ccompiler.py", line 36, in <module>

    from distutils.msvccompiler import get_build_version as get_build_msvc_version

  File "C:\Python34\lib\distutils\msvccompiler.py", line 638, in <module>

    from distutils.msvc9compiler import MSVCCompiler

  File "C:\Python34\lib\distutils\msvc9compiler.py", line 71, in <module>

    r"v%sA"

  File "C:\Python34\lib\distutils\msvc9compiler.py", line 67, in <listcomp>

    WINSDK_PATH_KEYS = [KEY_BASE + "Microsoft SDKs\\Windows\\" + rest for rest in (

NameError: name 'KEY_BASE' is not defined

Следуя совету в той же ссылке, я добавил следующее определение KEY_BASE перед вызовом переменной в msvc9compiler.py:

KEY_BASE = r"Software\Microsoft\\"

Что приводит к последней ошибке, которую я не смог устранить:

  File "C:\Users\Matej\AppData\Local\Temp\pip_build_Matej\numpy\numpy\distutils\command\build_src.py", line 164, in build_sources

    self.build_library_sources(*libname_info)

  File "C:\Users\Matej\AppData\Local\Temp\pip_build_Matej\numpy\numpy\distutils\command\build_src.py", line 299, in build_library_sources

    sources = self.generate_sources(sources, (lib_name, build_info))

  File "C:\Users\Matej\AppData\Local\Temp\pip_build_Matej\numpy\numpy\distutils\command\build_src.py", line 386, in generate_sources

    source = func(extension, build_dir)

  File "numpy\core\setup.py", line 682, in get_mathlib_info

    raise RuntimeError("Broken toolchain: cannot link a simple C program")

RuntimeError: Broken toolchain: cannot link a simple C program

Я пробовал следующее, но ни один из них не помог Broken toolchain ошибка:

  • Эта ссылка, которая включает дополнительный патч к msvc9compiler.py
  • Эта ссылка от Питера Кока (это помогает при 32-битной установке Python3.4)
  • Пробовал устанавливать с помощью easy_install как некоторые пользователи предположили, что это может работать таким образом

ПРИМЕЧАНИЕ 1. Мне известно об обходном пути, использующем скомпилированные двоичные файлы на этом веб-сайте. Я специально ищу решение с использованием distutils, если оно есть. ПРИМЕЧАНИЕ 2: Журналы ошибок, очевидно, больше, и я вырезал их для удобства чтения.

3 ответа

Мне удалось воспроизвести все эти ошибки в Windows 7 Professional (64 бит).

Ваша последняя проблема (сломанная цепочка инструментов) вызвана более явными проблемами. Я смог обойти это, изменив следующую строку (в msvc9compiler.py):

mfinfo = self.manifest_get_embed_info(target_desc, ld_args)

в

mfinfo = None

таким образом, обходя утверждение if, которое следует непосредственно за ним. После этого изменения numpy успешно скомпилирован для меня.

Хотя принятый ответ работает, это ненужный патч для проверенной в боях библиотеки.

Чтобы решить основную проблему: просто добавьте (x86 или x64 - в зависимости от вашей цели) Microsoft Manifest Tool (mt.exe) к своему пути и установите numpy через pip.

Начиная с Visual Studio 2017, mt.exe переместился в Windows SDK 7.1/8.1/10, который необходимо установить.

Мой mt.exe (x86) находится в: C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86 так что то, что я добавил к пути, сделайте этот эфир через Панель управления> Система> Расширенные настройки системы> Переменные среды или с помощью команды pathman в консоли (cmd.exe).

Надеюсь, это поможет, удачной компиляции!

Я думаю, что самым простым решением будет открыть командную строку Visual Studio (вам не нужны никакие другие исправления, только последняя версия Python 2 или 3).

В частности, в меню "Пуск" должно быть что-то вроде "Командная строка Visual Studio (2010)". Откройте эту программу (она откроет командную строку), затем в командной строке введите:

pip install numpy

Комментарии:

1) Разные версии Python предназначены для компиляции с разными версиями Visual Studio. Я думаю, что ребята из Python намерены скомпилировать версию 2010 (я могу ошибаться), поэтому попытка открыть приглашение Visual Studio 2013 может не сработать. Вполне возможно, что новейшая версия Python включала компиляторы, но я бы начал с попытки командной строки 2010 года.

2) У вас может быть несколько параметров командной строки. Мне повезло с простой версией "Командная строка Visual Studio (2010)"

3) Чтобы установить Python 3.4, я мог бы просто открыть стандартную командную строку, а затем

pip install numpy

но для Python 2.7 мне пришлось использовать этот трюк командной строки.

Если вы не решили проблему с этими шагами, пожалуйста, проверьте это простое решение, которое помогло мне построить numpy: перейдите в репозиторий Jurko *, в котором он исправляет / улучшает сценарии для сборки с помощью MSVC и загружает / копирует и вставляет файлы:

msvc9compiler.py
msvccompiler.py

Ссылки:

Сохраните их в папке \Lib\distutils вашего установочного каталога python, например: "C:\WinPython-64bit-3.4.3.2\python-3.4.3.amd64\Lib\distutils".

Существует несколько других решений, связанных с этой проблемой построения модулей Python с помощью pip / easy_install, например: error: Невозможно найти vcvarsall.bat; Невозможно найти vcvarsall.bat с помощью Python 3.3 в Windows 8, который иногда кажется неразрешимым.

Моя система: Windows 7, Windows SDK 7.1, Vs2010 Express с SP1, Python 3.4.3, 64 бит

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