Проблемы компилятора с 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 бит