Question

Je suis en train de construire lxml pour Python 2.7 sur la machine Windows 64 bits. Je ne pouvais pas trouver oeuf lxml pour la version Python 2.7. Je suis donc compilez des sources. Je suis en suivant les instructions sur ce site

http://lxml.de/build.html

sous section de liaison statique. Je reçois l'erreur

C:\Documents and Settings\Administrator\Desktop\lxmlpackage\lxml-2.2.6\lxml-2.2.
6>python setup.py bdist_wininst --static
Building lxml version 2.2.6.
NOTE: Trying to build without Cython, pre-generated 'src/lxml/lxml.etree.c' need
s to be available.
ERROR: 'xslt-config' is not recognized as an internal or external command,
operable program or batch file.

** make sure the development packages of libxml2 and libxslt are installed **

Using build configuration of libxslt
Building against libxml2/libxslt in one of the following directories:
  ..\libxml2-2.7.6--win32--w2k--x64\lib
  ..\libxslt-1.1.26--win32--w2k--x64--0002\lib
  ..\zlib-1.2.4--win32--w2k--x64
  ..\iconv-1.9.1--win32--w2k--x64-0001\lib
running bdist_wininst
running build
running build_py
running build_ext
building 'lxml.etree' extension
error: Unable to find vcvarsall.bat

Peut-on me aider avec ça? J'ai essayé de placer le chemin d'avoir Microsoft Visual Studio .. Je peux courir vcvarsall.bat de la ligne de commande .. mais python a des problèmes

Était-ce utile?

La solution

Je parie que vous ne l'utilisez VS 2008 pour cette :)

Il y a def find_vcvarsall (version) : fonction (devinez quoi, il recherche vcvarsall.bat) en distutils avec le commentaire suivant

  

Dans un premier temps, il essaie de trouver le   ProductDir de VS 2008 dans le Registre.   Si cela échoue, il retombe à la   var VS90COMNTOOLS.

Si vous ne l'utilisez VS 2008 alors vous avez ni la clé de Registre ni variable d'environnement approprié et qui est la raison pour laquelle distutils ne peut pas trouver le fichier vcvarsall.bat. Finalité pas vérifier si le fichier de chauve-souris est accessible par la variable d'environnement PATH.

La solution consiste à définir la variable VS90COMNTOOLS pour pointer vers le répertoire Outils de Visual Studio.

Cela étant dit, jeter un oeil à 11.4. distutils.msvccompiler - section de Microsoft compilateur dans les docs de Python qui états

  

En règle générale, les modules d'extension doivent   être compilé avec le même compilateur   qui a été utilisé pour compiler Python.

Martin c. Loewis dans l'e-mail intitulé Télécharger Visual Studio Express 2008 maintenant sur la liste de mailing-list python états même

  

Python 2.6, 2.7 et 3.1 sont tous construits   avec cette sortie (à savoir 2008). Parce que   d'une autre longue tradition, Python   Les modules d'extension doivent être construits avec   la même version du compilateur (plus   Plus précisément, la version CRT) en Python   lui-même. Donc, pour construire des modules d'extension   pour l'une de ces versions, vous devez   une copie de VS 2008 ou VS 2008   Express.

A la lumière des déclarations ci-dessus vous devrait utilisation VS 2008 si vous voulez construire lxml pour Python 2.7 Ainsi, bien que la mise en VS90COMNTOOLS se charge de trouver le fichier vcvarsall.bat ce n'est pas solution.

Cela étant dit :) les gens essaient d'utiliser CRT avec plus récent compilateur:
Puis-je utiliser le compilateur Visual Studio 2010 de C avec Visual Studio 2008 C ++ Runtime Library?
Comment Imposer compilateur C ++ pour utiliser la version CRT spécifique?
VS 2008 - Link contre l'exécution plus C

Je voudrais remercier Kev Dwyer (pour souligner l'importance de la version de VS qui est utilisé) et Stefan Behnel (pour moi pointant vers distutils comme endroit concernant la configuration du compilateur) dans le thread problème construction lxml sous Windows - erreur: Impossible de trouver vcvarsall.bat sur la liste de diffusion lxml. Je voudrais aussi remercier agronholm de freenode #distutils canal IRC pour la confirmation que distutils ne contient le code qui ressemble pour le fichier vcvarsall.bat.

Autres conseils

Après avoir suivi la solution recommandée:

  1. télécharger VCForPython27.msi de Microsoft,
  2. installer (Win7, Python (x, y) 2.7.9 32 bits),
  3. entrer / mettre à jour la variable d'environnement VS90COMNTOOLS     la valeur du répertoire d'installation (C: \ Program Files (x86) \ Common     Files \ Microsoft Visual C ++ pour Python \ 9.0)

mon problème existait encore (veulent construire une extension Python en C).

Je devais faire les 2 réglages incroyablement sales de suivants, avant tout travaille maintenant en effet:

  1. Modifier "msvc9compiler.py" "C: \ Python27 \ lib \ distutils" , fonction find_vcvarsall , au point maintenant "Visual C ++ pour Python " au lieu de " VC ".
  2. copier les répertoires fondateur sous "C: \ Program Files (x86) \ Common Files \ Microsoft Visual C ++ pour Python \ 9.0 \ " " C: \ Program Files (X86) \ Common Files \ Microsoft Visual C ++ pour Python \ " (à savoir un dir niveau supérieur).

Je ne peux pas dire qui fait quelque chose de mal ici -. Probablement I

EDIT. Déplacement des répertoires travaux en raison de la question décrit dans ce bug distutils .

  

même si VS90COMNTOOLS est réglé, msvc9compiler ne parvient pas à trouver vcvarsall.bat car il est installé dans %installdir%/vcvarsall.bat et non %installdir%/VC/vcvarsall.bat

La solution décrite utilise le Visual C ++ invite de commande:

  
      
  1. Entrez MSVC pour la commande Python invite

  2.   
  3. SET DISTUTILS_USE_SDK = 1

  4.   
  5. SET MSSDK = 1

  6.   
  7. python.exe setup.py ...

  8.   

Jorj McKie était presque correct: en effet l'installation VCForPython27.msi ne suffit pas, et oui, il y a un problème dans distutils qui l'empêchent de trouver find_vcvarsall. En fait, la question ne soit pas directement dans distutils, mais dans la façon dont VCForPython27.msi a été emballé et où vcvarsall.bat est placé (les dossiers mise en page est différent du SDK VS2008).

Une solution simple quant à lui cela devient peut-être patché en Python 2.7.11:. Utiliser setuptools au lieu de distutils

Une autre solution manuelle si vous êtes coincé avec distutils:

1) Enter MSVC for Python command prompt
2) SET DISTUTILS_USE_SDK=1
3) SET MSSdk=1
4) you can then build your C extensions: python.exe setup.py ...

Rapport de bogue et solution de contournement par Gregory Szorc: http://bugs.python.org/issue23246

Plus d'infos et une solution de contournement pour utiliser %% magique cython intérieur IPython: https: // GitHub. com / cython / cython / wiki / CythonExtensionsOnWindows

https://github.com/develersrl/gccwinbinaries

J'ai eu des problèmes similaires. Cela a fonctionné instantanément, sans rien d'autre que d'utiliser un assistant d'installation et la mise en une préférence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top