Сборка lxml для Python 2.7 в Windows - PullRequest
35 голосов
/ 15 июня 2010

Я пытаюсь собрать 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 ]

61 голосов
/ 25 февраля 2011

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

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

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

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

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

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

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

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

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

В свете вышеприведенных утверждений вы должны использовать 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.

4 голосов
/ 20 января 2015

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

  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Файлы (x86) \ Общие файлы \ Microsoft \ Visual C ++ для Python \ 9.0 \ " до " C: \ Program Files (x86) \ Общие файлы \ 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 ...

3 голосов
/ 05 апреля 2015

Джорж Макки был почти прав: на самом деле установки 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 ...

Отчет об ошибках и обходной путь от Gregory Szorc: http://bugs.python.org/issue23246

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

0 голосов
/ 18 июля 2015

https://github.com/develersrl/gccwinbinaries

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

...