wheel read parser instalar etree como python windows lxml building python-c-extension

read - python etree lxml



Construcción de lxml para Python 2.7 en Windows (4)

Estoy tratando de construir lxml para Python 2.7 en Windows 64 bit máquina. No pude encontrar el huevo lxml para la versión Python 2.7. Así que lo estoy compilando de fuentes. Estoy siguiendo las instrucciones en este sitio

http://lxml.de/build.html

en la sección de enlace estático. Estoy recibiendo un error

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

¿Puede alguien ayudarme con esto? Intenté establecer el camino para tener Microsoft Visual Studio. Puedo ejecutar vcvarsall.bat desde la línea de comandos ... pero Python está teniendo problemas


Apuesto a que no estás usando VS 2008 para esto :)

Hay def find_vcvarsall (versión): función (adivina qué, busca vcvarsall.bat) en distutils con el siguiente comentario

Al principio trata de encontrar el producto dirijo de VS 2008 en el registro. Si eso falla, vuelve a la VS90COMNTOOLS env var.

Si no está usando VS 2008, entonces no tiene la clave de registro ni la variable de entorno adecuada y es por eso que distutils no puede encontrar el archivo vcvarsall.bat. No verifica si el archivo bat es alcanzable a través de la variable de entorno PATH.

La solución es definir la variable VS90COMNTOOLS para que apunte al directorio de Herramientas de Visual Studio.

Dicho esto, eche un vistazo a 11.4. distutils.msvccompiler - sección Microsoft Compiler en documentos de Python que indica

Normalmente, los módulos de extensión deben compilarse con el mismo compilador que se utilizó para compilar Python.

Martin v. Loewis en el correo electrónico titulado Descargar Visual Studio Express 2008 ahora en la lista de correo de python-list indica lo mismo

Python 2.6, 2.7 y 3.1 están construidos con esa versión (es decir, 2008). Debido a otra larga tradición, los módulos de extensión de Python deben compilarse con la misma versión del compilador (más específicamente, la versión CRT) que el propio Python. Entonces, para construir módulos de extensión para cualquiera de estas versiones, debe tener una copia de VS 2008 o VS 2008 Express.

A la luz de las afirmaciones anteriores, debe utilizar VS 2008 si desea construir lxml para Python 2.7, por lo que aunque configurar VS90COMNTOOLS se ocupa de encontrar el archivo vcvarsall.bat, no es la solución.

Dicho esto :) las personas intentan usar un CRT antiguo con un compilador más nuevo:
¿Puedo usar el compilador C ++ de Visual Studio 2010 con C ++ Runtime Library de Visual Studio 2008?
¿Cómo hacer cumplir el compilador de C ++ para usar una versión CRT específica?
VS 2008 - Enlace contra el tiempo de ejecución anterior de C

Me gustaría agradecer a Kev Dwyer (por señalar la importancia de la versión de VS que se usa) y Stefan Behnel (por señalarme distutils como un lugar relacionado con la configuración del compilador) en el tema Problema al crear lxml en Windows - error: Imposible para encontrar vcvarsall.bat en la lista de correo lxml. También me gustaría agradecer a agronholm del canal de IRC freenode #distutils por la confirmación de que distutils contiene código que busca el archivo vcvarsall.bat.


Después de seguir la solución recomendada:

  1. descargando VCForPython27.msi desde Microsoft,
  2. instalarlo (Win7, Python (x, y) 2.7.9 32bit),
  3. introducir / actualizar la variable de entorno VS90COMNTOOLS al valor del directorio de instalación (C: / Archivos de programa (x86) / Archivos comunes / Microsoft / Visual C ++ para Python / 9.0)

mi problema aún existía (quiero construir una extensión de Python en C).

Tuve que hacer los siguientes 2 ajustes increíblemente sucios, antes de que todo funcionara de verdad:

  1. modificar "msvc9compiler.py" en "C: / Python27 / Lib / distutils" , función find_vcvarsall , para ahora apuntar a "Visual C ++ para Python" en lugar de "VC" .
  2. Copie el directorio de los fundadores en "C: / Archivos de programa (x86) / Archivos comunes / Microsoft / Visual C ++ para Python / 9.0 /" a "C: / Archivos de programa (x86) / Archivos comunes / Microsoft / Visual C ++ para Python /" (es decir, un nivel de dir arriba).

No puedo decir quién estaba haciendo algo mal aquí, probablemente yo.

EDITAR. Mover directorios funciona debido al problema descrito en este error de distutils .

incluso si VS90COMNTOOLS está configurado, msvc9compiler no puede encontrar vcvarsall.bat porque está instalado en %installdir%/vcvarsall.bat y no %installdir%/VC/vcvarsall.bat

La solución descrita está utilizando el símbolo del sistema de Visual C ++:

  1. Ingrese MSVC para el símbolo del sistema de Python

  2. SET DISTUTILS_USE_SDK = 1

  3. SET MSSdk = 1

  4. python.exe setup.py ...


Jorj McKie estaba casi en lo cierto: de hecho, la instalación de VCForPython27.msi no es suficiente, y sí, hay un problema en distutils que le impide encontrar find_vcvarsall. De hecho, el problema no está directamente en distutils, sino en cómo se empaquetó VCForPython27.msi y dónde se coloca vcvarsall.bat (el diseño de las carpetas es diferente al SDK de VS2008).

Una solución simple, mientras tanto, esto se puede reparar en Python 2.7.11: use setuptools en lugar de distutils.

Otra solución manual si estás atascado con 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 ...

Informe de error y solución de Gregory Szorc: http://bugs.python.org/issue23246

Más información y una solución para usar la magia %% cython dentro de IPython: https://github.com/cython/cython/wiki/CythonExtensionsOnWindows