Проблемы с компилятором с помощью 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 мне пришлось использовать трюк командной строки.