Проблемы с компилятором с помощью pip во время установки numpy в 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 Editions, и он всегда появляется.
Установка Visual Studio 2010 Express С++ избавляет от первой ошибки в ссылке - т.е. не удается найти 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
:
ПРИМЕЧАНИЕ 1: Мне известно об обходном пути с использованием скомпилированных двоичных файлов на этом веб-сайте. Я специально ищу решение с использованием distutils, если есть один.
ПРИМЕЧАНИЕ 2. Журналы ошибок, очевидно, больше, и я разрезал их для удобства чтения.
Ответы
Ответ 1
Я смог воспроизвести все эти ошибки в Windows 7 Professional (64 бит).
Ваша последняя проблема (Broken toolchain) вызвана более явными проблемами. Мне удалось обойти это, изменив следующую строку (в msvc9compiler.py):
mfinfo = self.manifest_get_embed_info(target_desc, ld_args)
к
mfinfo = None
таким образом, минуя оператор if, который следует за ним немедленно. После этого изменения numpy успешно скомпилированы для меня.
Ответ 2
Если вы не исправили проблему с этими шагами, пожалуйста, проверьте это простое решение, которое помогло мне создать 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, например: ошибка: не удалось найти vcvarsall.bat
; Невозможно найти vcvarsall.bat с помощью Python 3.3 в Windows 8, которые иногда кажутся неразрешимыми.
Моя система: windows 7, windows sdk 7.1, vs2010 express с sp1, python 3.4.3, 64 бит
Ответ 3
Я думаю, что самым легким решением будет открыть командную строку Visual Studio (вам не нужны никакие другие исправления, только последняя версия Python 2 или 3).
В частности, в вашем меню "Пуск" вы должны иметь что-то вроде "Visual Studio Command Prompt (2010)". Откройте эту программу (она откроет командную строку), затем в командной строке введите:
pip install numpy
Комментарии:
1) Различные версии Python предназначены для компиляции с различными версиями Visual Studio. Я думаю, что ребята Python намереваются скомпилировать версию 2010 года (я мог ошибаться в этом), поэтому попытка открыть приглашение Visual Studio 2013 может не сработать. Может быть, самая новая версия Python сменила компиляторы, но я бы начал с проверки командной строки 2010 года.
2) У вас может быть несколько параметров командной строки. Мне повезло только с голой версией "Visual Studio Command Prompt (2010)"
3) Чтобы установить Python 3.4, я мог бы просто открыть стандартную командную строку, а затем
pip install numpy
но для Python 2.7 мне пришлось использовать трюк командной строки.