web-dev-qa-db-fra.com

Problèmes de compilateur avec pip lors de l'installation numpy sous Windows 8.1, 7 Enterprise et 7 Home Editions

Je ne parviens pas à installer numpy via pip install numpy sur mon ordinateur exécutant Python 3.4 en raison de diverses erreurs liées à des problèmes de compilation (ce n'est le cas que sur une installation 64 bits de Python). 

C’est un problème qui a fait l’objet de nombreux reportages et j’avais une question connexe concernant l’impossibilité de trouver vcvarsall.bat. J'ai testé cela sur trois machines différentes exécutant Windows 8.1, 7 Enterprise et 7 Home Editions, et cela revient toujours. 

L’installation de Visual Studio 2010 Express C++ supprime la première erreur du lien, c’est-à-dire qu’il est impossible de trouver vcvarsall.bat, mais lève une exception se terminant par une exception ValueError comme ici:

  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']

J'ai ensuite suivi ce conseil et corrigé le fichier comme lié au forum de discussion, ce qui a entraîné une erreur 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

En suivant les conseils dans le même lien, j'ai ajouté la définition suivante de KEY_BASE avant que la variable soit appelée dans msvc9compiler.py:

KEY_BASE = r"Software\Microsoft\\"

La dernière erreur que je n'ai pas pu résoudre est la suivante:

  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

J'ai essayé ce qui suit mais rien de tout cela n'a résolu l'erreur Broken toolchain:

  • Ce link qui inclut un patch supplémentaire pour msvc9compiler.py
  • This link by Peter Cock (Cela aide pour l'installation de Python3.4 32 bits)
  • J'ai essayé d'installer avec easy_install car certains utilisateurs ont suggéré que cela pourrait fonctionner de cette façon.

NOTE 1: Je connais la solution de contournement utilisant les fichiers binaires compilés sur ce site Web Je recherche spécifiquement une solution utilisant distutils s’il en existe un. NOTE 2: Les journaux d’erreur sont évidemment plus volumineux et je eux pour la lisibilité. 

19
Matt

J'ai pu reproduire toutes ces erreurs dans Windows 7 Professional (64 bits).

Votre dernier problème (Chaîne d'outils brisée) est causé par des problèmes liés plus manifestes. J'ai pu contourner ce problème en modifiant la ligne suivante (dans msvc9compiler.py):

mfinfo = self.manifest_get_embed_info(target_desc, ld_args)

à

mfinfo = None

contournant ainsi la déclaration if qui suit immédiatement. Après ce changement, numpy a été compilé avec succès pour moi.

8
Wetnap

Je pense que la solution la plus simple consiste à ouvrir l'invite de commande Visual Studio (vous ne devriez pas avoir besoin d'autres correctifs, seulement de la dernière version de Python 2 ou 3). 

Plus précisément, dans votre menu Démarrer, vous devriez avoir quelque chose comme "Invite de commandes Visual Studio (2010)". Ouvrez ce programme (cela ouvrira une invite de commande), puis dans l'invite de commande, tapez:

pip install numpy

Commentaires:

1) Différentes versions de Python doivent être compilées avec différentes versions de Visual Studio. Je pense que les gars de Python ont l'intention de vous compiler avec la version 2010 (je peux me tromper à ce sujet). Il est donc possible qu'essayer d'ouvrir Visual Studio 2013 Prompt ne fonctionne pas. Il se peut que la dernière version de Python ait changé de compilateur, mais je commencerais par essayer la commande 2010 Invite. 

2) Vous pouvez avoir plusieurs options d'invite de commande. J'ai eu de la chance avec la version de base seulement "Invite de commandes Visual Studio (2010)"

3) Pour installer Python 3.4, je pouvais simplement ouvrir une invite de commande standard, puis 

pip install numpy

mais pour Python 2.7, je devais utiliser cette commande Prompt astuce. 

3
bremen_matt