Сборка lxml для Python 2.7 в Windows

Я пытаюсь собрать lxml для Python 2.7 на 64-битной машине Windows. Я не смог найти lxml egg для версии Python 2.7. Поэтому я собираю его из источников. Я следую инструкциям на этом сайте

http://lxml.de/build.html

в разделе статических ссылок. Я получаю ошибку

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

Кто-нибудь может мне с этим помочь? Я попытался установить путь для Microsoft Visual Studio.. Я могу запустить vcvarsall.bat из командной строки... но у питона возникают проблемы

4 ответа

Решение

Бьюсь об заклад, вы не используете VS 2008 для этого:)

В distutils есть def find_vcvarsall (version): function (угадайте, что, он ищет vcvarsall.bat) со следующим комментарием

Сначала он пытается найти каталог продукции VS 2008 в реестре. Если это не удастся, он вернется к env var VS90COMNTOOLS.

Если вы не используете VS 2008, то у вас нет ни ключа реестра, ни подходящей переменной среды, и поэтому distutils не может найти файл vcvarsall.bat. Он не проверяет, доступен ли файл bat через переменную среды PATH.

Решение состоит в том, чтобы определить переменную VS90COMNTOOLS для указания на каталог Tools в Visual Studio.

При этом посмотрите на 11.4. distutils.msvccompiler - раздел компилятора Microsoft в документации Python, в котором говорится

Как правило, модули расширения должны быть скомпилированы с тем же компилятором, который использовался для компиляции Python.

Martin v. Loewis в электронном письме под названием Download Visual Studio Express 2008 теперь в списке рассылки python

Python 2.6, 2.7 и 3.1 все собраны с этим выпуском (то есть 2008). По другой давней традиции модули расширения Python должны быть собраны с той же версией компилятора (точнее, с версией CRT), что и сам Python. Поэтому для создания модулей расширения для любого из этих выпусков вам необходимо иметь копию VS 2008 или VS 2008 Express.

В свете приведенных выше утверждений вы должны использовать VS 2008, если вы хотите собрать lxml для Python 2.7, поэтому, хотя настройка VS90COMNTOOLS позаботится о поиске файла vcvarsall.bat, это не решение.

Это сказанное:) люди действительно пытаются использовать более старую CRT с более новым компилятором:
Можно ли использовать компилятор Visual Studio 2010 C++ с библиотекой времени выполнения C++ Visual Studio 2008?
Как заставить C++ компилятор использовать конкретную версию CRT?
VS 2008 - ссылка на более раннюю версию C

Я хотел бы поблагодарить Кева Двайера (за то, что он указал на важность используемой версии VS) и Стефана Бехнела (за то, что он указал мне на distutils как на место, где есть конфигурация компилятора) в теме. Построение проблемы lxml под Windows - ошибка: невозможно найти vcvarsall.bat в списке рассылки lxml. Я также хотел бы поблагодарить agronholm из IRC-канала freenode #distutils за подтверждение того, что distutils содержит код, который ищет файл vcvarsall.bat.

После выполнения рекомендуемого решения:

  1. загрузив VCForPython27.msi от Microsoft,
  2. его установка (Win7, Python(x, y) 2.7.9 32bit),
  3. ввод / обновление переменной среды VS90COMNTOOLS в значение установочного каталога (C:\Program Files (x86)\Common Files\Microsoft\Visual C++ для Python\9.0)

моя проблема все еще существовала (хочу построить расширение Python в C).

Я должен был сделать следующие 2 невероятно грязных настройки, прежде чем все теперь действительно работает:

  1. измените "msvc9compiler.py" в "C: \ Python27 \ Lib \ distutils", функцию find_vcvarsall, чтобы теперь указывать на "Visual C++ для Python" вместо "VC".
  2. скопируйте основателя каталогов в "C:\Program Files (x86)\Common Files\Microsoft\Visual C++ для Python\9.0\" в "C:\Program Files (x86)\Common Files\Microsoft\Visual C++ для Python \" (т.е. на один уровень выше).

Я не могу сказать, кто здесь что-то делал не так, наверное, я.

РЕДАКТИРОВАТЬ. Перемещение каталогов работает из-за проблемы, описанной в этой ошибке distutils.

даже если установлен VS90COMNTOOLS, msvc9compiler не сможет найти vcvarsall.bat, потому что он установлен в %installdir%/vcvarsall.bat и не %installdir%/VC/vcvarsall.bat

Описанный обходной путь использует командную строку Visual C++:

  1. Введите MSVC для командной строки Python

  2. SET DISTUTILS_USE_SDK = 1

  3. SET MSSdk = 1

  4. python.exe setup.py...

Джорж Макки был почти прав: действительно, установки VCForPython27.msi недостаточно, и да, в distutils есть проблема, которая мешает ему найти find_vcvarsall. На самом деле проблема не в distutils, а в том, как был упакован VCForPython27.msi и где размещен vcvarsall.bat (расположение папок отличается от SDK VS2008).

Простой обходной путь, в то время как это исправлено, возможно, в Python 2.7.11: используйте setuptools вместо distutils.

Другой ручной обходной путь, если вы застряли с 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 ...

Сообщение об ошибке и решение проблемы Грегори Сзорц: http://bugs.python.org/issue23246

Дополнительная информация и обходной путь для использования %%cython magic внутри IPython: https://github.com/cython/cython/wiki/CythonExtensionsOnWindows

https://github.com/develersrl/gccwinbinaries

У меня были похожие проблемы. Это работало мгновенно, без использования мастера установки и установки одного предпочтения.

Другие вопросы по тегам