Je parie que vous n'utilisez pas VS 2008 pour cela :)
Il y a def find_vcvarsall(version) : (devinez quoi, elle recherche vcvarsall.bat) dans distutils avec le commentaire suivant
Au début, il essaie de trouver le productdir de VS 2008 dans le registre. Si cela échoue, il se rabat sur le répertoire VS90COMNTOOLS.
Si vous n'utilisez pas VS 2008, vous n'avez ni la clé de registre ni la variable d'environnement appropriée et c'est pourquoi distutils ne peut pas trouver le fichier vcvarsall.bat. Il fait no vérifier si le fichier bat est accessible par la variable d'environnement PATH.
La solution consiste à définir la variable VS90COMNTOOLS pour qu'elle pointe vers le répertoire Tools de Visual Studio.
Ceci étant dit, jetez un coup d'oeil à 11.4. distutils.msvccompiler - Compilateur Microsoft dans la documentation de Python qui stipule que
En général, les modules d'extension doivent être compilés avec le même compilateur qui a été utilisé pour compiler Python.
Martin v. Loewis dans le courriel intitulé Téléchargez maintenant Visual Studio Express 2008 sur la liste de diffusion python-list déclare la même chose
Python 2.6, 2.7, et 3.1 sont tous construits avec cette version (c'est-à-dire 2008). Parce que d'une autre longue tradition, les modules d'extension de Python doivent être construits avec la même la même version du compilateur (plus spécifiquement, la version CRT) que Python lui-même. lui-même. Ainsi, pour construire des modules d'extension pour l'une de ces versions, vous devez avoir une copie de VS 2008 ou VS 2008 Express.
A la lumière des déclarations ci-dessus, vous devrait utiliser VS 2008 si vous voulez construire lxml pour Python 2.7, donc bien que la configuration de VS90COMNTOOLS s'occupe de trouver le fichier vcvarsall.bat, ce n'est pas un problème. el solution.
Ceci étant dit :) les gens essaient d'utiliser les anciens CRT avec les nouveaux compilateurs :
Puis-je utiliser le compilateur C++ de Visual Studio 2010 avec la bibliothèque d'exécution C++ de Visual Studio 2008 ?
Comment forcer le compilateur C++ à utiliser une version spécifique du CRT ?
VS 2008 - Lien avec un ancien runtime C
Je voudrais remercier Kev Dwyer (pour avoir souligné l'importance de la version de VS utilisée) et Stefan Behnel (pour m'avoir indiqué distutils comme un endroit traitant de la configuration du compilateur) dans le fil de discussion Problème de construction de lxml sous Windows - erreur : Impossible de trouver vcvarsall.bat sur la liste de diffusion lxml. Je tiens également à remercier agronholm depuis le canal IRC freenode #distutils pour confirmation que distutils contient du code qui recherche le fichier vcvarsall.bat.