Создание lxml для Python 2.7 на Windows

Я пытаюсь создать lxml для Python 2.7 на 64-битной машине Windows. Я не мог найти lxml яйцо для версии 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 из командной строки.. но у python возникают проблемы

Ответ 1

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

Там def find_vcvarsall (версия): функция (угадайте, что она ищет vcvarsall.bat) в distutils со следующим комментарием

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

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

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

При этом посмотрите 11.4. distutils.msvccompiler - Microsoft Compiler в документах Python, в которых указано

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

Мартин против Лоувис в электронном письме под названием Загрузите Visual Studio Express 2008 сейчас в списке рассылки python-list, который содержит те же

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

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

Говоря об этом, люди стараются использовать более старый CRT с более новым компилятором:
Могу ли я использовать компилятор Visual Studio 2010 С++ с Visual Studio 2008 С++ Runtime Library?
Как заставить компилятор С++ использовать определенную версию CRT?
VS 2008 - Ссылка на более раннее время выполнения C

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

Ответ 2

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

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

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

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

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

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

ИЗМЕНИТЬ. Перемещение каталогов работает из-за проблемы, описанной в этой ошибке distutils.

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

В описанном обходном пути используется командная строка Visual С++:

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

  • SET DISTUTILS_USE_SDK = 1

  • SET MSSdk = 1

  • python.exe setup.py...

Ответ 3

Jorj McKie был почти прав: на самом деле установка 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 внутри IPython: https://github.com/cython/cython/wiki/CythonExtensionsOnWindows

Ответ 4

https://github.com/develersrl/gccwinbinaries

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