Kompilieren von Python-Modulen unter Windows x64

Ich beginne einige Projekte in Worten Verarbeitung und ich brauchte NumPy und NLTK. Das war das erste Mal, dass ich easy_install kennen easy_install und wie man neues Modul von Python in das System kompiliert.

Ich habe Python 2.7 x64 plus VS 11 und VS 12. Auch Cygwin (das letzte, was ich vermute). Ich konnte in der Datei sehen, die mit VS kompiliert, dass es nach VS env mit der gleichen Version wie die, die den Python-Code kompiliert, warum? Wenn ich hart kodiert 11.0 was ist meine Version, numpy nicht auf mehrere seltsame Fehler in Bezug auf vcvarsall (es fand vcvarsall , wahrscheinlich missbraucht) zu bauen.

Kann ich keine Python-Binärdateien unter Windows erstellen? Wenn nicht, kann ich Kompilieren auf Linux für Windows? (Mit der gleichen Methode wie Google für das Android SDK)

5 Solutions collect form web for “Kompilieren von Python-Modulen unter Windows x64”

Update: Wie Zooba erwähnt, sind kostenlose x86 und AMD64 (x86-64) VC90 c-Compiler für Python-2.7 jetzt bei Microsoft erhältlich .

Update: Patch vcvarsall.bat zur Verwendung von x64-Compilern von SDK v7.0 direkt mit pip in einer Shell anstelle von SDK-Shell und Einstellung DISTUTILS_USE_SDK und MSSdk Umgebungsvariablen wie in den folgenden Anweisungen. Siehe Fix vcvarsall.bat, um Python-2.7 x64-Erweiterungen mit v90 anstelle von sdk7 zu installieren .

Tl; dr: Verwenden Sie Windows SDK v7.0 Compiler, öffnen Sie die SDK-Shell und rufen Sie an

 C:\> setenv /release /x64 C:\> set DISTUTILS_USE_SDK=1 C:\> MSSdk=1 

Um Python 2.7.x Erweiterungen mit distutils, pip oder easy_install . Siehe Python x64 Paket-Erweiterungen mit Pip, MSVC 2008 Express & SDK 7 .

Hinweis : Sie können Numpy optimiert mit Intel MKL von Christoph Gohlke installieren. Für virtualenv's, versuchen Sie, das Binärverteilungs-Windows-Installationsprogramm in eine Raddatei umzuwandeln, die mit Pip installiert werden kann. Der Aufbau von NumPy aus der Quelle ist nicht trivial. Es ist eine Möglichkeit mit der jüngsten Einführung und Verfügbarkeit von OpenBLAS , einer Gabel von GotoBLAS . Es gibt optimierte Binärdateien für Windows x86 und x86-64 sowie Quelle, die relativ einfacher zu kompilieren als GotoBLAS oder ATLAS ist .

Anmerkung : In der Vergangenheit hatte ich nicht empfohlen, NumPy aus der Quelle zu kompilieren, weil man BLAS für Ihre Plattform optimieren musste, was sehr zeitintensiv war und die Referenz BLAS (FORTRAN) oder CBLAS (C / C ++) Implementierungen relativ gering waren . Auch NumPy hängt von LAPACK ab, was auch von BLAS abhängt, eine zusätzliche Hürde für den Aufbau von NumPy. Allerdings sind OpenBLAS-Binärdateien bereits mit LAPACK kompiliert, so dass dieses Hindernis bereits entfernt wurde. Sehen Sie Carl Kleffners statische MinGW-w64-Toolketten, um NumPy mit OpenBLAS unter Windows zu erstellen – er hat einige der ABI-Inkompatibilitäten gelöst und Probleme mit der richtigen Microsoft Visual C Common Runtime-Bibliothek ( msvcr90.dll für Python-2.7) msvcr90.dll .

So weiter zur Hauptfrage über die Installation von Python-Erweiterungen unter Windows 7 x64.

Der empfohlene Weg, um Erweiterungen zu kompilieren, besteht darin, denselben Compiler zu verwenden, der verwendet wird, um die gemeinsam genutzte Bibliothek von Python zu kompilieren [1-3]. Die offizielle Python 2.7.x für Windows wurde mit Microsoft Visual C ++ Compilers Version 9.0 [4] (aka MSVC90 oder einfach VC90) von Microsoft Visual Studio 2008 Professional kompiliert , die Sie möglicherweise kostenlos von Microsoft DreamSpark erhalten können . Offensichtlich sind die x64-Compiler nicht standardmäßig installiert, also stellen Sie sicher, dass sie zusammen mit den x86-Compilern installiert sind. Hinweis: MS Visual Studio 2008 ist möglicherweise nicht mehr verfügbar, aber MS Visual Studio 2010 ermöglicht es Ihnen, die MSVC90 Toolchain zu verwenden, falls installiert, die von Windows SDK7 installiert werden kann.

Sie können sagen, welche Version Ihr Python gebaut wurde, indem Sie den Header betrachten, wenn Sie den Python-Interpreter aus einer Befehlszeile ausführen. Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32 : Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32 bedeutet, dass es mit VS 2008 C ++ gebaut wurde. Sie können Python selbst aus der Quelle bauen, aber das ist auch eine schwierige Aufgabe. Im Allgemeinen ist es nicht empfehlenswert, Compiler-Laufzeiten zu mischen, obwohl in der Praxis können Sie feststellen, dass sie noch arbeiten.

Wenn du dein Herz mit GNU GCC einsetzest , dann musst du mingw-w64 verwenden weil MinGW nur für native x86 Applikationen, nicht AMD64 / x86-64 ist. Du wirst brauchen

  • Erstellen Sie eine distutils-Konfigurationsdatei, um den Mingw-Compiler anzugeben ,
  • Entfernen Sie die -mno-cygwin Bug von distutils.cygwinccompiler.Mingw32ccompiler und
  • Exportiere eine Bibliotheksdefinitionsdatei mit entweder pexports.exe von msys oder gendef.exe von msys2 und mache eine statische Bibliothek libpython27.a mit dlltool.exe (msys / msys2) (aber die neuesten Releases von Official Python für Windows haben bereits diese Datei in Der Python27\lib Ordner, danke!) .

Doch am Ende musst du noch gegen die Laufzeit, die python gebaut wurde, mit msvcr90.dll , also brauchst du Visual C ++ 2008 umverteilbar . Hinweis: Windows GCC von mingw-w64 verwendet msvcrt.dll die nicht das gleiche wie msvcr90.dll oder höher ist .

Wenn du es kostenlos machen möchtest, kannst du Microsoft Visual C ++ 2008 Express SP1 verwenden, aber du musst das Windows SDK 7 für .NET Frameworks 3.5 SP1 hinzufügen, da die Expressversion nicht die x64 Compiler hat. Die Vorgehensweise für die Installation von x64 C ++ – Erweiterungen mit VS2008 Express & SDK 7 sind denjenigen auf der Cython-Site für Windows x64-Erweiterungen sehr ähnlich. Hinweis: MS Visual Studio 2008 Express ist nicht mehr verfügbar oder unterstützt.

FYI: Sie brauchen nicht unbedingt Visual Studio, um mit Microsoft Compilers zu bauen. Sie sind mit dem entsprechenden SDK-Paket kostenlos erhältlich. CL.EXE ist der Compiler ausführbar, aber Sie müssen alle Plattformoptionen festlegen, die normalerweise von Autotools oder einem anderen Tool wie CMAKE konfiguriert werden. CMAKE spielt gut mit MSVC, aber Autotools AFAIK funktioniert nicht mit MSVC und würde einige POSIX-Umgebung und Dienstprogramme erfordern, die unter Windows in MSYS verfügbar sind.

Für viele Python-Pakete, die distutils oder setuptools verwenden, können sie Erweiterungen mit Windows SDK 7 kompilieren, indem sie den Anweisungen folgen, die an verschiedenen Orten durch die Referenzdokumentation und Wikis gepostet werden:

  1. Wählen Sie im Startmenü Alle Programme und dann Microsoft Windows SDK v7.0 und starten Sie CMD Shell , um ein für Windows SDK optimiertes Befehlsfenster zu öffnen.
  2. Schritt # 1 ist das Äquivalent der Eingabe der folgenden in der Run- Box aus dem Start-Menü oder aus einer Eingabeaufforderung (aka C:\Windows\System32\cmd.exe ):

     %COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" 

    HINWEIS: Die Flags /E:ON , die Befehlserweiterungen ermöglicht, und /V:ON , die eine verzögerte Variablenerweiterung ermöglicht, sind für die Funktion SetEnv.cmd notwendig, oder Sie erhalten eine Meldung, dass die x64-Compiler nicht installiert sind , & C.

  3. Dann geben Sie setenv /Release /x64 das die SDK-Umgebungsvariablen speziell für die Windows 7 x64-Version (vs debug oder x86, die die Standardeinstellung) sind.

  4. set DISTUTILS_USE_SDK=1 Treffer zurück und geben Sie dann set MSSdk=1 und kehren Sie zurück, um distutils.msvccompiler zu sagen, dass Sie das SDK verwenden und dass das SDK alle Umgebungsvariablen ermittelt.
  5. Verwenden Sie nun Ihre Installationsmethode:
    • pip install pyyaml ntlk das ist der empfohlene weg, siehe ntlk , aber du musst setuptools und pip installiert haben.
    • python setup.py install für jeden heruntergeladenen, extrahierten tarball
    • easy_install pyyaml ntlk das ist der alte Weg und die einzige Möglichkeit, Eier zu installieren.

[1] C und C ++ – Erweiterungen unter Windows aufbauen
[2] distutils.msvccompiler – Microsoft Compiler
[3] Python Dev Guide: Erste Schritte: Windows
[4] Welche Version von Visual Studio ist diese Python kompiliert mit

Da die anderen Antworten sind, hat Microsoft ein Compiler-Paket speziell für den Aufbau von Erweiterungen für Python 2.7 (und jede Version von Python, die VS 2008 / VC9 verwendet) veröffentlicht. Hier ist, wie man es benutzt:

  1. Gehen Sie zu http://aka.ms/vcpython27 , downloaden und installieren Sie das Paket (es ist ziemlich klein und erfordert keine Administratorrechte)

  2. Update setuptools auf 6.0 oder höher ( pip install -U setuptools )

  3. Installiere dein Paket ( pip install <whatever> )

Die Kombination der neuesten setuptools Version und dieses Compiler Pack sollte es wirklich einfach, dies zu tun.

Es gibt mehrere Möglichkeiten, es scheinbar zu tun.

  1. Bauen mit mingw
  2. Bau Python 2.7 mit VS 2008 Express.
  3. Ich bin mir nicht sicher, welche Version gut ist, um 3.2 zu bauen, aber es könnte VS 2010 sein.
  4. Sie können python x64 von der Quelle mit Ihrem gewünschten VS kompilieren, aber Sie haben Konkurrenzprobleme mit anderen vorgebauten Paketen.

Das hat mir am besten gearbeitet

  1. Installiere Visual Studio Express 2008
  2. Installieren Sie Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 von http://www.microsoft.com/en-us/download/details.aspx?id=3138
  3. Gehen Sie zu C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin und öffnen Sie die Visual Studio 2008 x64 Win64 Command Prompt
  4. In dieser Shell, führen Sie pip install <package>

Sie sollten keine umverteilbaren Pakete auf Client-Systemen installieren, wenn dies auf diese Weise durchgeführt wird.

Für Windows 10, Python 2.7.11, Cygwin 2.5.2 und x86_64-w64-mingw32-gcc 4.9.2 oder 5.4.0 (aber siehe Hinweis unter 1 unten), zog zusammen Kommentare von woanders, hier ist was ich zu tun hatte Meine Python-Erweiterung zu kompilieren, zu verknüpfen und schlagen eine Race-Bedingung zwischen msvcrt.dll und msvcr90.dll:

  1. Bearbeiten Sie distutils / cygwinccompiler und in der class Mingw32CCompiler

    • Ersetzen Sie die alte -mno-cygwin fix mit

       if self.gcc_version < '4' or is_cygwingcc(): no_cygwin = ' -nostdlib -lgcc' 

      Für gcc 4.9.2 – note für 5.4.0, nein 'if', nur

       no_cygwin = '' 
    • Holen Sie sich den richtigen Compiler an Ort und Stelle:

        self.set_executables(compiler='x86_64-w64-mingw32-gcc%s -O -Wall' % no_cygwin, compiler_so='x86_64-w64-mingw32-gcc%s -mdll -O -Wall' % no_cygwin, compiler_cxx='x86_64-w64-mingw32-g++%s -O -Wall' % no_cygwin, linker_exe='x86_64-w64-mingw32-gcc%s' % no_cygwin, linker_so='x86_64-w64-mingw32-%s%s %s %s' 
    • Hinweis für x86_64-w64-mingw32-gcc 5.4.0, scheint es besser zu funktionieren, ohne msvcr90, so machen den Aufruf zu get_msvcr bedingt:

        if self.gcc_version < '5': self.dll_libraries = get_msvcr() 
  2. Verwenden Sie eine setup.py mit dem folgenden

     libdirs=['C:\\Python27\\libs',...] macros=[('MS_WIN64','1'),...] platform="WIN32" 
  3. Patch eine meiner Quelldatei Header zu enthalten

     #ifdef MS_WIN64 #define strdup _strdup #endif 
  4. Endlich,

      /c/Python27/python [editted setup].py -v build --compiler=mingw32 /c/Python27/python [editted setup].py -v install 

Einige der oben genannten können nicht ganz am besten sein, aber es hat meine Erweiterung funktioniert …

Python ist die beste Programmiersprache der Welt.