webentwicklung-frage-antwort-db.com.de

Lxml für Python 2.7 unter Windows erstellen

Ich versuche, Lxml für Python 2.7 auf einem Windows 64-Bit-Computer zu erstellen. Ich konnte lxml Egg für Python 2.7 nicht finden. Ich kompiliere es also aus Quellen. Ich folge den Anweisungen auf dieser Site

http://lxml.de/build.html

unter statischen Linken. Ich bekomme Fehler

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

Kann mir einer dabei helfen? Ich habe versucht, den Pfad so einzustellen, dass er Microsoft Visual Studio hat ... __ Ich kann vcvarsall.bat von der Befehlszeile aus ausführen

34
Kamal

Ich wette, Sie verwenden VS 2008 nicht dafür :) 

Es gibt def find_vcvarsall (version): function (raten Sie mal, was es nach vcvarsall.bat sucht) in distutils mit dem folgenden Kommentar

Zuerst versucht es, das .__ zu finden. Produktverzeichnis von VS 2008 in der Registry . Wenn dies fehlschlägt, wird auf die .__ zurückgegriffen. VS90COMNTOOLS env var.

Wenn Sie nicht mit VS 2008 arbeiten, haben Sie weder den Registrierungsschlüssel noch eine geeignete Umgebungsvariable. Deshalb kann distutils die Datei vcvarsall.bat nicht finden. Es prüft nicht, ob die bat-Datei über die Umgebungsvariable PATH erreichbar ist. 

Die Lösung besteht darin, die VS90COMNTOOLS-Variable so zu definieren, dass sie auf das Tools-Verzeichnis von Visual Studio verweist.

Werfen Sie einen Blick auf 11.4. distutils.msvccompiler - Microsoft Compiler Abschnitt in den Python-Dokumenten, in denen angegeben wird

In der Regel müssen Erweiterungsmodule mit demselben Compiler kompiliert werden das wurde verwendet, um Python zu kompilieren.

Martin v. Loewis in der E-Mail mit dem Titel Laden Sie Visual Studio Express 2008 jetzt herunter auf der Python-List-Mailingliste heißt es

Python 2.6, 2.7 und 3.1 sind alle erstellt mit dieser Veröffentlichung (d. h. 2008). Weil von einer anderen langen Tradition, Python Erweiterungsmodule müssen mit .__ erstellt werden. die gleiche Compilerversion (genauer insbesondere CRT-Version) wie Python selbst. So bauen Sie Erweiterungsmodule Für jede dieser Versionen müssen Sie habe eine Kopie von VS 2008 oder VS 2008 Ausdrücken.

In Anbetracht der obigen Anweisungen verwenden Sie sollten VS 2008, wenn Sie lxml für Python 2.7 erstellen möchten. Wenn Sie jedoch VS90COMNTOOLS festlegen, um die Datei vcvarsall.bat zu finden, ist dies nicht die Lösung the.

Das wird gesagt :) Leute versuchen, ältere CRT mit neueren Compiler zu verwenden:
Kann ich den C++ - Compiler von Visual Studio 2010 mit der C++ - Laufzeitbibliothek von Visual Studio 2008 verwenden?
Wie erzwinge ich einen C++ - Compiler, um bestimmte CRT-Versionen zu verwenden?
VS 2008 - Verknüpfung mit älterer C-Laufzeit

Ich möchte mich bei Kev Dwyer (für den Hinweis auf die Wichtigkeit der verwendeten Version von VS) und bei Stefan Behnel (für den Hinweis auf distutils als Ort, der sich mit der Konfiguration des Compilers befasst) im Thread Problem beim Erstellen von Lxml unter Windows - Fehler : Vcvarsall.bat kann nicht in der lxml-Mailingliste gefunden werden. Ich möchte auch dem agronholm vom freenode #distutils IRC -Kanal für die Bestätigung danken, dass distutils Code enthält, der nach der Datei vcvarsall.bat sucht.

59
Piotr Dobrogost

Nachdem Sie die empfohlene Lösung befolgt haben:

  1. VCForPython27.msi von Microsoft herunterladen,
  2. es zu installieren (Win7, Python (x, y) 2.7.9 32bit),
  3. eingabe/Aktualisierung der Umgebungsvariablen VS90COMNTOOLS auf Der Installationsverzeichniswert (C:\Programme (x86)\Allgemein Dateien\Microsoft\Visual C++ für Python\9.0)

mein Problem bestand immer noch (möchte eine Python-Erweiterung in C erstellen).

Ich musste die folgenden 2 unglaublich dreckigen Anpassungen vornehmen, bevor jetzt wirklich alles funktioniert:

  1. Ändern Sie "msvc9compiler.py" in "C:\Python27\Lib\distutils", function find_vcvarsall, um jetzt auf "Visual C++ für " anstelle von " VC ".
  2. kopieren Sie den Verzeichnis-Gründer unter "C:\Programme (x86)\Common Files\Microsoft\Visual C++ für Python\9.0 \" nach "C:\Programme (x86)."\Gemeinsame Dateien\Microsoft\Visual C++ für Python\" (dh ein Verzeichnis mit Ebene).

Ich kann nicht sagen, wer hier etwas falsch gemacht hat - wahrscheinlich ich.

BEARBEITEN. Das Verschieben von Verzeichnissen funktioniert aufgrund des in this distutils bug beschriebenen Problems.

selbst wenn VS90COMNTOOLS gesetzt ist, kann der msvc9compiler vcvarsall.bat nicht finden, da er in %installdir%/vcvarsall.bat und nicht %installdir%/VC/vcvarsall.bat installiert ist.

Die beschriebene Problemumgehung verwendet den Visual C++ - Befehl Eingabeaufforderung:

  1. Geben Sie MSVC für die Python-Eingabeaufforderung ein

  2. SET DISTUTILS_USE_SDK = 1

  3. SET MSSdk = 1

  4. python.exe setup.py ...

4
Jorj McKie

Jorj McKie war fast richtig: Die Installation von VCForPython27.msi ist nicht genug, und ja, es gibt ein Problem in distutils, das verhindert, dass find_vcvarsall gefunden wird. In der Tat liegt das Problem nicht direkt in distutils, sondern darin, wie VCForPython27.msi gepackt wurde und wo vcvarsall.bat platziert ist (das Ordner-Layout unterscheidet sich vom VS2008-SDK).

Eine einfache Problemumgehung wird in der Zwischenzeit möglicherweise in Python 2.7.11 gepatcht: Verwenden Sie setuptools anstelle von distutils.

Eine weitere manuelle Problemumgehung, wenn Sie mit Distutils nicht weiterkommen:

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 ...

Fehlerbericht und Workaround von Gregory Szorc: http://bugs.python.org/issue23246

Weitere Informationen und eine Lösung für die Verwendung von %% cython magic in IPython: https://github.com/cython/cython/wiki/CythonExtensionsOnWindows

3
gaborous

https://github.com/develersrl/gccwinbinaries

Ich hatte ähnliche Probleme. Dies funktionierte sofort, ohne einen Installationsassistenten zu verwenden und eine Einstellung festzulegen.

0
Robbie Capps