Fehler: vcvarsall.bat konnte nicht gefunden werden

851

Ich habe versucht, das Python-Paket dulwich zu installieren :

pip install dulwich

Aber ich bekomme eine kryptische Fehlermeldung:

error: Unable to find vcvarsall.bat

Das gleiche passiert, wenn ich versuche, das Paket manuell zu installieren:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat
okada
quelle
6
Zum späteren Nachschlagen wäre es schön zu sehen, auf welcher Plattform Sie dies verwenden.
viam0Zah
47
Wenn Sie denken, dass dies eine lächerlich kryptische und nicht hilfreiche Fehlermeldung ist, stimmen Sie bitte für den Fehler unter bugs.python.org/issue2943
Colonel Panic
48
Microsoft bietet jetzt eine Lösung: microsoft.com/en-us/download/details.aspx?id=44266
Martijn Pieters
6
@MartijnPieters Ich habe versucht, den Link herunterzuladen und zu installieren, den Sie mit Wheel und Setuptools 7.0 bereitgestellt haben, aber es funktioniert nicht. Ich erhalte die Meldung: C:\Users\User\libfreenect\wrappers\python>python setup.py install running install running build running build_ext building 'freenect' extension error: Unable to find vcvarsall.bat
compski
4
Steve Dower (ein Mitglied
Cody Piersall

Antworten:

683

Update : Kommentare weisen darauf hin, dass die Anweisungen hier gefährlich sein können. Verwenden Sie möglicherweise die Visual C ++ 2008 Express Edition oder den speziell entwickelten Microsoft Visual C ++ - Compiler für Python ( Details ) und NICHT die unten stehende Originalantwort. Die ursprüngliche Fehlermeldung bedeutet, dass die erforderliche Version von Visual C ++ nicht installiert ist.


Für Windows-Installationen:

Während der Ausführung von setup.py für Paketinstallationen sucht Python 2.7 nach einem installierten Visual Studio 2008. Sie können Python dazu verleiten, ein neueres Visual Studio zu verwenden, indem Sie VS90COMNTOOLSvor dem Aufruf den richtigen Pfad in der Umgebungsvariablen festlegen setup.py.

Führen Sie den folgenden Befehl basierend auf der installierten Version von Visual Studio aus:

  • Visual Studio 2010 (VS10): SET VS90COMNTOOLS=%VS100COMNTOOLS%
  • Visual Studio 2012 (VS11): SET VS90COMNTOOLS=%VS110COMNTOOLS%
  • Visual Studio 2013 (VS12): SET VS90COMNTOOLS=%VS120COMNTOOLS%
  • Visual Studio 2015 (VS14): SET VS90COMNTOOLS=%VS140COMNTOOLS%

WARNUNG: Wie unten erwähnt, funktioniert diese Antwort wahrscheinlich nicht, wenn Sie versuchen, Python-Module zu kompilieren.

Weitere Informationen finden Sie unter Erstellen von lxml für Python 2.7 unter Windows .

fmuecke
quelle
21
Es tat für mich :(
fmuecke
8
@Gili: Es sieht so aus, als ob dieses Problem auf Leerzeichen in der Variablen zurückzuführen ist. Versuchen Sie, es in Anführungszeichen zu setzen. Für mich% VS100COMNTOOLS% = "C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools"
legends2k
7
Dies funktioniert in vielen Fällen nicht, da Python auf VS2008 basiert. Schauen Sie sich diese Antwort an: stackoverflow.com/questions/6551724/…
shezi
182
WARNUNG!!! Das ist eine falsche Antwort. Sie sollten die Python C-Erweiterung unter keinen Umständen mit einem anderen (Version von) Compiler kompilieren, der zum Kompilieren von Python selbst verwendet wurde, da diese beiden (Versionen von) Compilern wahrscheinlich über inkompatible C-Laufzeitbibliotheken verfügen. Siehe diese Antwort für weitere Details.
Piotr Dobrogost
72
Sie können die kostenlose Visual C ++ 2008 Express Edition von go.microsoft.com/?linkid=7729279 herunterladen , mit der die Umgebungsvariable VS90COMNTOOLS während der Installation festgelegt und daher mit einem kompatiblen Compiler erstellt wird.
Eric Smith
225

Ich habe die Lösung gefunden. Ich hatte genau das gleiche Problem und den gleichen Fehler bei der Installation von 'amara'. Ich hatte mingw32 installiert, aber distutils mussten konfiguriert werden.

  1. Ich habe Python 2.6, das bereits installiert wurde.
  2. Ich habe mingw32 installiert C:\programs\mingw\
  3. In mingw32 die bin - Verzeichnis zu Ihrer Umgebungsvariable: Anfügen c:\programs\MinGW\bin;an den PATH
  4. Edit (erstellen , falls nicht vorhanden) distutils.cfg Datei auf sich C:\Python26\Lib\distutils\distutils.cfgzu sein:

    [build]
    compiler=mingw32
  5. Jetzt renn easy_install.exe amara.

Stellen Sie sicher, dass die Umgebung eingestellt ist, indem Sie eine neue öffnen cmd.exe.

ninMonkey
quelle
45
Dies funktioniert gut für Python2.6, aber aus irgendeinem Grund kann ich es nicht für Python2.7 verwenden. Es funktioniert, wenn ich meine Paketquelle herunterlade und mit 'python setup.py install --compile = mingw32' installiere, aber aus irgendeinem Grund mit easy_install oder pip immer noch versucht, vcvarsall zu finden.
Jonathan Hartley
2
Ich endlich scikits.image in Python installieren (x, y) 2.7 durch Zugabe C:\msysgit\mingw\mingw32\binund C:\msysgit\mingw\bindem Benutzer PATH und Spyder neu zu starten , bevor läuft pip installwieder
Endolithe
20
Es besteht keine Notwendigkeit jemals wegen einer Umgebungsvariablen Änderung neu zu starten. Das Öffnen eines neuen cmd.exe-Prozesses reicht aus.
Tomalak
11
Ich konnte das immer noch nicht beheben. Dies ist der Fehler: gcc: error: unrecognized command line option '-mno-cygwin' error: Setup script exited with error: command 'gcc' failed with exit status 1nacheasy_install.exe amara
Benutzer
5
@user, Sie sollten diese Datei öffnen: C:\Python27\Lib\distutils\cygwincompiler.pyund alle Vorkommen von entfernen –mno-cygwin; Dies liegt daran, dass in neueren Versionen von GCC die –mno-cygwinOption entfernt wurde und sie nicht vorhanden sein sollte.
Zeinab Abbasimazar
220

Sie können die kompilierte Version von http://www.lfd.uci.edu/~gohlke/pythonlibs/ installieren.

VolodymyrB
quelle
15
Nur ein Tipp: Sie können das Paket von dieser Site in virtualenv installieren, indem Sie es easy_install binary_installer_built_with_distutils.exein virtualenv ausführen und dieser Antwort entsprechen .
Yangzh
14
Jeder Python Windows-Entwickler sollte darüber Bescheid wissen
Highschooler
1
Sie können wheel convert ....exediese Installationsprogramme auch verwenden und sie dann mit pip installieren, wann immer Sie möchten.
Zooba
3
Um genauer zu sein, lfd.uci.edu/~gohlke/pythonlibs/#mysql-python und einmal heruntergeladen ein Terminal als Admin öffnen und ausführenpython -m pip install <filename>
arun
Holly Mutter Gottes, das ist genau richtig. Funktioniert wie ein Zauber, TY :)
Amir
162

Wenn Sie mit Visual Studio C ++ kompilieren möchten, anstatt mingw ...

  1. Führen Sie python.exediese Option aus, um anzuzeigen, mit welcher Version von VC ++ kompiliert wurde (Beispiel unten).

    Es ist wichtig , die entsprechende Version des Visual C ++ Compiler zu verwenden , dass Python mit kompiliert wurde seit distilutils ‚s get_build_versionverhindert Versionen Mischen ( pro Piotrs Warnung ).

    • Gelb (oben) ist Python 2.7, kompiliert mit MSC v.1500 (Visual Studio C ++ 2008)
    • Rot (unten) ist Python 3.4.1, kompiliert mit MSC v.1600 (Visual Studio C ++ 2010)

    Beispiel aus der Befehlszeile mit Python 2.7, kompiliert mit MSC v.1500 und Python 3.4.1, kompiliert mit MSC v.1600

  2. Verwenden Sie die folgende Tabelle [1] , um die interne VC ++ - Version mit der entsprechenden Visual Studio-Version abzugleichen:

    MSC v.1000 -> Visual C++ 4.x        
    MSC v.1100 -> Visual C++ 5          
    MSC v.1200 -> Visual C++ 6          
    MSC v.1300 -> Visual C++ .NET       
    MSC v.1310 -> Visual C++ .NET 2003  
    MSC v.1400 -> Visual C++ 2005  (8.0)
    MSC v.1500 -> Visual C++ 2008  (9.0)
    MSC v.1600 -> Visual C++ 2010 (10.0)
    MSC v.1700 -> Visual C++ 2012 (11.0)
    MSC v.1800 -> Visual C++ 2013 (12.0)
    MSC v.1900 -> Visual C++ 2015 (14.0)
    MSC v.1910 -> Visual C++ 2017 (15.0)
    MSC v.1911 -> Visual C++ 2017 (15.3)
    MSC v.1912 -> Visual C++ 2017 (15.5)
    MSC v.1913 -> Visual C++ 2017 (15.6)
    MSC v.1914 -> Visual C++ 2017 (15.7)
    MSC v.1915 -> Visual C++ 2017 (15.8)
    MSC v.1916 -> Visual C++ 2017 (15.9)   
  3. Laden Sie die entsprechende Version von Visual Studio C ++ aus dem vorherigen Schritt herunter und installieren Sie sie.
    Zusätzliche Hinweise für bestimmte Versionen von VC ++ sind unten aufgeführt.

    Hinweise für Visual Studio C ++ 2008

    Laden Sie für nur die 32-Bit-Compiler Visual Studio C ++ 2008 Express Edition herunter .

    Laden Sie für die 64-Bit-Compiler [2] [3] das Windows SDK für Windows 7 und .NET Framework 3.5 SP1 herunter .

    • Deaktivieren Sie alles außer Developer Tools >> Visual C++ CompilersZeit und Speicherplatz zu sparen, wenn Sie SDK-Tools installieren, die Sie sonst nicht benötigen.

    Hinweise für Visual Studio C ++ 2010

    Laut Microsoft wurden bei der Installation von Visual Studio 2010 SP1 möglicherweise die Compiler und Bibliotheken für VC ++ entfernt.
    Laden Sie in diesem Fall das Visual C ++ 2010 SP1-Compiler-Update herunter .

    Hinweise für Visual Studio C ++ 2015

    Wenn Sie die Visual Studio-IDE nicht benötigen, laden Sie die Visual Studio C ++ 2015-Build-Tools herunter .

    Hinweise für Visual Studio C ++ 2017

    Wenn Sie die Visual Studio-IDE nicht benötigen, laden Sie Build Tools für Visual Studio 2017 herunter .

    Vorschlag : Wenn Sie sowohl eine 32- als auch eine 64-Bit-Python-Installation haben, möchten Sie möglicherweise auch virtualenv verwenden , um separate Python-Umgebungen zu erstellen, sodass Sie die eine oder die andere gleichzeitig verwenden können, ohne Ihren Pfad zu ändern , um die Python-Version auszuwählen verwenden.

Laut @srodriguex können Sie das manuelle Laden der Batchdatei möglicherweise überspringen (Schritte 4 bis 6), indem Sie stattdessen einige Batchdateien an die Stelle kopieren, an der Python sucht, indem Sie dieser Antwort folgen . Wenn das nicht funktioniert, sind hier die folgenden Schritte, die ursprünglich für mich funktioniert haben.

  1. Öffnen Sie a cmd.exe

  2. Bevor Sie versuchen, etwas zu installieren, für das C-Erweiterungen erforderlich sind, führen Sie die folgende Batchdatei aus, um die Umgebung des VC ++ - Compilers in die Sitzung zu laden (z. B. Umgebungsvariablen, den Pfad zum Compiler usw.).

    Ausführen:

    • 32-Bit-Compiler:

      Hinweis : 32-Bit-Windows-Installationen werden nur C:\Program Files\wie erwartet ausgeführt

      "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"

    • 64-Bit-Compiler:

      "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars64.bat"

      Hinweis : Ja, die nativen 64-Bit-Compiler befinden sich in Program Files (x86). Frag mich nicht warum.
      Wenn Sie sich fragen, was der Unterschied zwischen vcvars64.batund vcvarsx86_amd64.batoder , was noch wichtiger ist, der Unterschied zwischen amd64und ist x86_amd64, gelten die ersteren für die nativen 64-Bit-Compiler-Tools und die letzteren für die 64-Bit-Cross-Compiler, die auf einer 32-Bit-Windows-Installation ausgeführt werden können .

    Update:
    Wenn Sie aus irgendeinem Grund feststellen, error: ... was unexpected at this time.wo ...sich eine Reihe von Zeichen befindet, müssen Sie überprüfen, ob Ihre Pfadvariable keine irrelevanten Zeichen wie zusätzliche Anführungszeichen oder streunende Zeichen enthält. Die Batch-Datei kann Ihren Sitzungspfad nicht aktualisieren, wenn dies überhaupt keinen Sinn ergibt.

  3. Wenn das gut gelaufen ist, sollten Sie eine der folgenden Meldungen erhalten, je nachdem, welche Version von VC ++ und welchen Befehl Sie ausgeführt haben:

    Für die 32-Bit-Compiler-Tools:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    Für die 64-Bit-Compiler-Tools:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. Nun führen Sie das Setup über python setup.py installoderpip install pkg-name

  5. Hoffe und drücke die Daumen, dass die Planeten richtig ausgerichtet sind, damit VC ++ zusammenarbeiten kann.

Josh Bowden
quelle
Kann nicht genug empfehlen , dass Sie sich durch den Schmerz gehen gerade zu 64 Bit zu bewegen. Es ist nur eine Frage der Zeit, bis Sie mehr als 4 GB Adressraum benötigen. Ich spreche aus schmerzhafter Erfahrung, nachdem ich 32 Bit gegangen bin, weil es viel einfacher war, dann alles deinstallieren zu müssen, einschließlich Abhängigkeiten und 64 Bit. Fast ein ganzes Wochenende.
Thomas Browne
1
Andererseits vergesse ich, wie viele Leute Python für solche größeren Aufgaben verwenden müssen. Und @ThomasBrowne, ich bin sicher, das war eine schmerzhafte und unnötige Übelkeit einer Erfahrung. Ich schaue hinein und hoffe, dass ich etwas finden kann. Das Hauptproblem war, dass Visual Studio C ++ 2008 Express keinen 64-Bit-Compiler enthält, aber ich bin mir sicher, dass es hier irgendwo ist.
Josh Bowden
Aktualisieren Sie es einfach mit weiteren Informationen darüber, wie Sie bei Bedarf auch die 64-Bit-Compiler herunterladen können.
Josh Bowden
In meinem Fall folge ich Schritt 1 oben und überspringe den Rest nach dieser Antwort . Jetzt kann ich Pakete installieren, ohne den Ärger zu verursachen, .bat auszuführen.
Srodriguex
@srodriguex auch in diesem Fall sieht es aus wie Python geht davon aus, dass die 64-Bit - Compiler - Tools in die PATH geladen werden mit , dass sie sucht ...\VC\bin\vcvarsamd64.batund ...\VC\bin\amd64\vcvarsamd64.bat.
Josh Bowden
73

Was ist los? Python-Module können teilweise in C oder C ++ geschrieben sein (normalerweise aus Gründen der Geschwindigkeit). Wenn Sie versuchen, ein solches Paket mit Pip (oder setup.py) zu installieren , muss es dieses C / C ++ aus dem Quellcode kompilieren. Pip geht unverschämt davon aus, dass Sie den Compiler Microsoft Visual C ++ installiert haben. Wenn Sie es nicht haben, wird die kryptische Fehlermeldung "Fehler: vcvarsall.bat kann nicht gefunden werden" angezeigt.

Die vorgeschriebene Lösung besteht darin, einen C / C ++ - Compiler zu installieren, entweder Microsoft Visual C ++ oder MinGW (ein Open-Source-Projekt). Die Installation und Konfiguration von beiden ist jedoch unerschwinglich schwierig. (Edit 2014: Microsoft hat einen speziellen C ++ - Compiler für Python 2.7 veröffentlicht.)

Die einfachste Lösung besteht darin, die Windows-Installationsprogramme (.msi) von Christoph Gohlke für beliebte Python-Pakete zu verwenden. Er erstellt Installationsprogramme für Python 2.x und 3.x, 32 Bit und 64 Bit. Sie können sie von http://www.lfd.uci.edu/~gohlke/pythonlibs/ herunterladen.


Wenn auch Sie der Meinung sind, dass "Fehler: vcvarsall.bat kann nicht gefunden werden" eine lächerlich kryptische und nicht hilfreiche Nachricht ist, kommentieren Sie den Fehler unter http://bugs.python.org/issue2943 , um ihn durch eine hilfreichere und benutzerfreundlichere zu ersetzen. freundliche Nachricht.

Zum Vergleich wird Ruby mit einem Paketmanager Gem ausgeliefert und bietet einen quasi offiziellen C / C ++ - Compiler, DevKit. Wenn Sie versuchen, ein Paket ohne dieses Paket zu installieren, wird diese hilfreiche, freundliche und nützliche Meldung angezeigt:

Bitte aktualisieren Sie Ihren PATH, um Build-Tools einzuschließen, oder laden Sie das DevKit von http://rubyinstaller.org/downloads herunter und folgen Sie den Anweisungen unter http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Eine längere Beschreibung der Python-Verpackung finden Sie unter https://stackoverflow.com/a/13445719/284795

Oberst Panik
quelle
Wie kann ich pip verwenden, um diese vorkompilierte ausführbare Datei in meiner virtuellen Umgebung zu installieren?
Shailen
@shailenTJ gute Frage. Ich habe es noch nie gemacht, aber versuche es mit stackoverflow.com/a/5442340/284795
Colonel Panic
Dies war die beste / einfachste Lösung, die mir bekannt ist. Vielen Dank.
user1477388
Das Edit 2014 ist die beste Antwort für mich. Leicht zu übersehende Anleitung: Stellen Sie sicher, dass Sie aktualisierensetuptools auf Version 6.0oder höherpip install setuptools --upgrade .
Orlade
64

Sie müssen einen Microsoft-Compiler installieren, der mit dem zum Erstellen von Python verwendeten Compiler kompatibel ist. Dies bedeutet, dass Sie Visual C ++ 2008 benötigen (oder neuer, mit einigen Optimierungen ).

Microsoft liefert nun einen gebündelten Compiler und Header nur die Lage sein , Python - Erweiterungen zu kompilieren, an der unvergesslichen URL:

Microsoft Visual C ++ - Compiler für Python 2.7

http://aka.ms/vcpython27

Dies ist ein relativ kleines Paket; 85 MB zum Herunterladen, installierbar ohne Administratorrechte, kein Neustart erforderlich. Der Name ist etwas irreführend. Der Compiler funktioniert für jede Python-Version, die ursprünglich mit Visual C ++ 2008 kompiliert wurde, nicht nur für Python 2.7.

Wenn Sie eine interaktive Python-Eingabeaufforderung starten oder drucken sys.version, suchen Sie nach der MSCVersionszeichenfolge. Wenn MSC v.1500ja, können Sie dieses Tool verwenden.

Von der ursprünglichen Ankündigung bis zur Distutils-Liste :

Microsoft hat ein Compiler-Paket für Python 2.7 veröffentlicht, um Benutzern das Erstellen und Verteilen ihrer C-Erweiterungsmodule unter Windows zu erleichtern. Der Microsoft Visual C ++ - Compiler für Python 2.7 (auch bekannt als VC9) ist verfügbar unter: http://aka.ms/vcpython27

Dieses Paket enthält alle Tools und Header, die zum Erstellen von C-Erweiterungsmodulen für Python 2.7 32-Bit und 64-Bit erforderlich sind (beachten Sie, dass einige Erweiterungsmodule Abhängigkeiten von Drittanbietern wie OpenSSL oder libxml2 erfordern, die nicht enthalten sind). Andere mit Visual C ++ 2008 erstellte Versionen von Python werden ebenfalls unterstützt, sodass "Python 2.7" nur Werbung ist - es funktioniert gut mit 2.6 und 3.2.

Beachten Sie, dass setuptools6.0 oder neuer installiert sein muss (siehe Systemanforderungen auf der Download-Seite). Das Projekt, das Sie installieren, muss verwendet werdensetuptools.setup() , distutilssonst funktioniert die automatische Erkennung nicht.

Microsoft hat erklärt, dass die URL stabil bleiben soll, damit automatisierte Skripte problemlos darauf verweisen können.

Martijn Pieters
quelle
2
Gemäß meinem anderen Kommentar können Sie sicherstellen, dass Sie setuptoolsauf dem neuesten Stand sind pip install setuptools --upgrade.
Orlade
Ich schaute in die Sache , warum die entsprechende Logik in ist und setuptoolsnicht distutils- immerhin Module Aufbau Kernfunktionalität ist, und es macht den entsprechenden Code, sondern eine ältere Version davon. Es sieht so aus, als hätten die distutilsBetreuer einfach aufgegeben, alle möglichen MSSDK-Variationen zu unterstützen, und diese Arbeit ihren setuptoolseifrigeren Kollegen überlassen .
ivan_pozdeev
1
@ivan_pozdeev: setuptoolsKann auch weitaus häufiger veröffentlicht werden als distutilsim Python-Release-Zyklus enthalten. Und distitutilsist in der Tat in eine Art Wartungsmodus übergegangen, in dem an neuen Systemen gearbeitet werden soll, um ihn zu ersetzen. Diese Arbeit kam stattdessen zum Stillstand.
Martijn Pieters
Cython verwendet Distutils. Sie müssen Setuptools importieren, die Distutils mit Affen-Patches versehen: github.com/cython/cython/wiki/CythonExtensionsOnWindows
denfromufa
54

Ich hatte gerade das gleiche Problem, also erzähle ich meine Geschichte hier in der Hoffnung, dass sie jemand anderem mit den gleichen Problemen hilft und ihnen die paar Stunden erspart, die ich gerade verbracht habe:

Ich habe mingw (g ++ (GCC) 4.6.1) und Python 2.7.3 in einer Windows 7-Box und versuche, PyCrypto zu installieren.

Alles begann mit diesem Fehler beim Ausführen von setup.py install:

error: Unable to find vcvarsall.bat

Einfach zu lösen, nachdem der Fehler gegoogelt wurde, indem mingw als Compiler der Wahl angegeben wurde:

setup.py install build --compiler=mingw32

Das Problem ist, dass ich dann einen anderen Fehler bekommen habe:

configure: error: cannot run C compiled programs.

Es stellt sich heraus, dass mein Antivirus die Ausführung einer frisch kompilierten EXE-Datei blockiert hat. Ich habe gerade das Antiviren-System "Resident Shield" deaktiviert und bin zum nächsten Fehler übergegangen:

cc1.exe: error: unrecognized command line option '-mno-cygwin' 
error: command 'gcc' failed with exit status 1

Dies löste das Problem: "Installieren Sie entweder eine etwas ältere Version von MinGW oder bearbeiten Sie distutils \ cygwinccompiler.py in Ihrem Python-Verzeichnis, um alle Instanzen von -mno-cygwin zu entfernen." (von hier )

Jetzt kann ich endlich anfangen zu arbeiten.

fpessoa
quelle
7
Sie benötigen außerdem eine MinGW-kompatible Version der Python-Bibliothek. Siehe eli.thegreenplace.net/2008/06/28/… für weitere Informationen
Gili
Drehungen und Wendungen: D
Xilpex
23

Sieht so aus, als würde es nach VC-Compilern suchen, also könnten Sie versuchen, den Compilertyp mit zu erwähnen -c mingw32, da Sie msys haben

python setup.py install -c mingw32
DU
quelle
16
Nur um zu klären, ist der Befehl, der funktioniert: python setup.py build --compiler=mingw32gefolgt vonpython setup.py install
Emil Stenström
Nach dem Ausführen von python setup.py build --compiler = mingw32 erhalte ich ImportError: Kein Modul namens Cython.Distutils, während Cython unter Anaconda installiert ist. Irgendwelche Vorschläge?
Serendipity
20

Ich habe Python 2.73 und Windows 7. Die Lösung, die für mich funktioniert hat, war:

  1. Das bin-Verzeichnis von mingw32 wurde der Umgebungsvariablen hinzugefügt: PATH mit anhängenC:\programs\mingw\bin;
  2. Erstellt distutils.cfg an sich C:\Python27\Lib\distutils\distutils.cfgenthält:

    [build]
    compiler=mingw32

Um zu verhindern, dass MinGW das Flag -mno-cygwin nicht mehr erkennt, entfernen Sie das Flag in den Zeilen 322 bis 326 in C: \ Python27 \ Lib \ distutils \ cygwincompiler.py. Es sieht also folgendermaßen aus:

  self.set_executables(compiler='gcc -O -Wall',
                         compiler_so='gcc -mdll -O -Wall',
                         compiler_cxx='g++ -O -Wall',
                         linker_exe='gcc',
                         linker_so='%s %s %s'
                                    % (self.linker_dll, shared_option,
                                       entry_point))
LDN
quelle
15

Schauen Sie in die setup.pyDatei des Pakets, das Sie installieren möchten. Wenn es sich um ein älteres Paket handelt, wird es möglicherweise eher importiert distutils.core.setup()als setuptools.setup().

Ich bin darauf (im Jahr 2015) mit einer Kombination dieser Faktoren gestoßen:

  1. Der Microsoft Visual C ++ - Compiler für Python 2.7 von http://aka.ms/vcpython27

  2. Ein älteres Paket, das verwendet distutils.core.setup()

  3. Ich versuche es zu tun python setup.py buildanstatt es zu benutzen pip.

Wenn Sie eine neuere Version von pip verwenden, wird das Paket gezwungen (monkeypatch), setuptools zu verwenden, selbst wenn es setup.pydistutils erfordert. Wenn Sie jedoch nicht pip verwenden und stattdessen nur dies tun python setup.py build, wird der Erstellungsprozess verwendet distutils.core.setup(), der den Installationsort des Compilers nicht kennt.


Lösung

Schritt 1: Öffnen Sie die entsprechende Visual C ++ 2008-Eingabeaufforderung

Öffnen Sie das Startmenü oder den Startbildschirm und suchen Sie nach "Visual C ++ 2008 32-Bit-Eingabeaufforderung" (wenn Ihr Python 32-Bit ist) oder "Visual C ++ 2008 64-Bit-Eingabeaufforderung" (wenn Ihr Python 64-Bit ist). . Starte es. Die Eingabeaufforderung sollte Visual C ++ 2008 ... in der Titelleiste anzeigen.

Schritt 2: Umgebungsvariablen festlegen

Legen Sie diese Umgebungsvariablen in der gerade geöffneten Eingabeaufforderung fest.

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

Referenz http://bugs.python.org/issue23246

Schritt 3: Erstellen und installieren

cdzu dem Paket , das Sie bauen wollen, und führen Sie python setup.py builddann python setup.py install. Wenn Sie eine virtuelle Umgebung installieren möchten, aktivieren Sie diese vor dem Erstellen.

Christian Long
quelle
Sie können Ihr Paket auch mit <code> pip </ code> anstelle von <code> python setup.py build </ code>
erstellen
9

Vielleicht kann jemand interessiert sein, das Folgende hat für mich für das py2exe-Paket funktioniert. (Ich habe Windows 7 64-Bit und portables Python 2.7, Visual Studio 2005 Express mit Windows SDK für Windows 7 und .NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

dann:

python.exe setup.py install
Stefano Fenu
quelle
Nein, Sie haben Recht, ich bin nicht sicher, was passiert ist. Ich werde den ursprünglichen Kommentar löschen.
Dave Challis
1
Sehr hilfreich!! In meinem Fall habe ich 'set VS90COMNTOOLS =% VS110COMNTOOLS%' gemacht.
Jrvidotti
@Exzile: Ja, Sie geben diese Befehle in derselben Eingabeaufforderungssitzung ein
Stefano Fenu
MACH DAS NICHT!!! Siehe diese Antwort für weitere Details.
Anonym
8

Ich habe fast 2 Tage damit verbracht, herauszufinden, wie ich dieses Problem in meiner Python 3.4 64-Bit-Version beheben kann: Python 3.4.3 (v3.4.3: 9b73f1c3e601, 24. Februar 2015, 22:44:40) [MSC v.1600 64-Bit (AMD64) )] auf win32

Lösung 1, schwer: (Bevor Sie dies lesen, lesen Sie zuerst Lösung 2 unten) Schließlich hat mir Folgendes geholfen:

  1. Installieren Sie Visual C ++ 2010 Express
  2. Installieren Sie Microsoft Windows SDK v7.1 für Windows 7
  3. manuell erstellen Datei vcvars64.batin C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64denen enthält CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64oder anderen Pfad je nachdem , wo Sie Ihr installiert
  4. (Dies scheint optional zu sein.) Installieren Sie Microsoft Visual Studio 2010 Service Pack 1 zusammen mit Microsoft Visual C ++ 2010 Service Pack 1 Compiler-Update für das Windows SDK 7.1
  5. Danach habe ich versucht, pip install numpyaber den folgenden Fehler erhalten:

    File "numpy\core\setup.py", line 686, in get_mathlib_info
    raise RuntimeError("Broken toolchain: cannot link a simple C program")
    RuntimeError: Broken toolchain: cannot link a simple C program

    Ich mfinfohabe per https://stackoverflow.com/a/23099820/4383472 zu Nonein gewechseltC:\Python34\Lib\distutils\msvc9compiler.py

  6. Schließlich pip install numpyversuchte mein Avast Antivirus nach dem Befehl, in den Installationsprozess einzugreifen, aber ich deaktivierte ihn schnell

Es dauerte sehr lange - einige Minuten, bis numpy kompiliert war. Ich dachte sogar, dass ein Fehler aufgetreten war, aber schließlich war alles in Ordnung.

Lösung 2, einfach: (Ich weiß, dass dieser Ansatz bereits in einer hoch bewerteten Antwort erwähnt wurde , aber lassen Sie mich wiederholen, da es wirklich einfacher ist.) Nachdem ich all diese Arbeiten durchgearbeitet hatte, verstand ich, dass der beste Weg für mich darin besteht, ihn bereits zu verwenden vorkompilierte Binärdateien von http://www.lfd.uci.edu/~gohlke/pythonlibs/ in Zukunft. Es besteht nur eine sehr geringe Wahrscheinlichkeit, dass ich jemals ein Paket (oder eine Version eines Pakets) benötige, das diese Site nicht enthält. Der Installationsvorgang ist auf diese Weise auch viel schneller. Zum Beispiel zum Installieren numpy:

  1. Donwload numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(wenn Sie Python 3.4 64-Bit haben) von dieser Site
  2. Installieren Sie es in der Eingabeaufforderung oder in der Powershell mit pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(oder im vollständigen Pfad zur Datei, je nachdem, wie die Eingabeaufforderung geöffnet wird).
Schlecht
quelle
numpy - 1.9.2 + mkl - cp34 - none - win_amd64.whl - kann diese Datei unter dem obigen Link nicht finden.
Amresh Giri
7

Ich wollte pysph unter Windows 10 unter Python 2.7 ausführen und bekam vcvarsall.bat wurde nicht gefunden (von distutils)

Meine Lösung war folgende:

Installieren Sie Microsoft Visual C ++ für Python 2.7 (wie von @Michael vorgeschlagen)

Unter Windows 10 wurde es installiert (mein Benutzername ist Andreas):

C:\Users\Andreas\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0

Setzen Sie die Umgebungsvariable VS90COMNTOOLS auf den Installationspfad von Visual C ++ für Python 2.7 (siehe obigen Pfad).

Wenn es immer noch nicht funktioniert, ändern Sie es im Modul

C:/Python27/lib/distutils

die Datei msvc9compiler.py . Suchen Sie darin die Funktion find_vcvarsall und führen Sie die folgenden Änderungen durch.

Ersetzen Sie die Leitung:

productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")

mit

productdir = os.path.join(toolsdir)

Hier befindet sich in meinem Fall vcvarsall.bat (überprüfen Sie, wo sich vcvarsall.bat in Ihrer Installation befindet).

Chiefenne
quelle
Interessanterweise %userprofile%\Appdata\Local\Programs\Commonist leer für mich.
Bryce Guinta
Auch nach der Installation von Microsoft Visual C ++ für Python 2.7?
Chiefenne
7

Dieses Problem trat auf, als ich versuchte, die Numpy-Bibliothek auf meinem Python 3.5 zu installieren. Die Lösung besteht darin, VS2015 zu installieren. Ich hatte VS2008, 2012, 2013, von denen keines mit Python 3.5 kompatibel ist. Anscheinend ist eine neuere Version von Python von neueren Versionen von VS abhängig.

Stellen Sie außerdem sicher, dass C ++ Common Tools mit Visual Studio installiert sind.

Geben Sie hier die Bildbeschreibung ein

DG
quelle
6

Ich habe alle oben genannten Antworten ausprobiert und festgestellt, dass alle nicht funktionieren. Vielleicht habe ich Windows 8 verwendet und Visual Studio 2012 installiert. In diesem Fall tun Sie dies.

Die vcvarsall.batDatei befindet sich hier: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

Wählen Sie einfach die Datei aus und kopieren Sie sie.

Dann gehen Sie in dieses Verzeichnis: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

und fügen Sie die Datei ein. Und dann sollte alles gut sein.

Spiele Brainiac
quelle
Nein, alles ist nicht gut. Ich bin Ihrer Antwort gefolgt, aber ich erhalte immer noch den gleichen Fehler.
Stupid_Intern
6

Sie können die kostenlose Visual C ++ 2008 Express Edition von http://go.microsoft.com/?linkid=7729279 herunterladen , mit der die Umgebungsvariable VS90COMNTOOLS während der Installation festgelegt und daher mit einem kompatiblen Compiler erstellt wird.

Wie @PiotrDobrogost in einem Kommentar erwähnt hat, geht seine Antwort auf diese andere Frage detailliert darauf ein, warum Visual C ++ 2008 das richtige Build ist. Dies kann sich jedoch ändern, wenn der Windows-Build von Python auf neuere Versionen von Visual Studio: Building lxml umgestellt wird für Python 2.7 unter Windows

Eric Smith
quelle
Stellen Sie außerdem sicher, dass keine anderen Versionen installiert sind. Ich hatte es schwer damit. Ich habe den Computer neu formatiert und nur diese Version installiert. Da das Entfernen mehrerer VS-Versionen genauso lange gedauert hätte.
jmunsch
6

Ich hatte dieses Problem mit Python 3.4.1 unter Windows 7 x64 , und leider hatten die benötigten Pakete keine geeignete Exe oder Räder, die ich verwenden konnte. Dieses System erfordert einige "Problemumgehungen", die unten aufgeführt sind (und TLDR unten ).

Unter Verwendung der Informationen in der obigen Antwort von Jaxrtech stellte ich fest, dass ich Visual Studio C ++ 2010 benötigte (sys.version return MSC v.1600), und installierte Visual C ++ 2010 Express über den Link in seiner Antwort, der http://go.microsoft lautet .com /? linkid = 9709949 . Ich habe alles mit Updates installiert, aber wie Sie unten lesen können, war dies ein Fehler. Zu diesem Zeitpunkt sollte nur die Originalversion von Express installiert sein (nichts aktualisiert).

vcvarsall.bat war jetzt vorhanden, aber bei der Installation des Pakets ist ein neuer Fehler aufgetreten query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']. Es gibt andere Fragen zum Stapelüberlauf mit diesem Fehler, z. B. Fehler beim Erstellen / Installieren des C-Moduls für Python 2.7

Aus dieser Antwort habe ich festgestellt, dass 2010 Express nur 32-Bit-Compiler installiert. Um 64-Bit-Compiler (und andere) zu erhalten, müssen Sie das Windows 7.1 SDK installieren. Siehe http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

Dies würde für mich jedoch nicht installiert werden, und das Installationsprogramm hat den Fehler zurückgegeben installation failed with return code 5100. Ich habe die Lösung unter folgendem Link gefunden: http://support.microsoft.com/kb/2717426 . Kurz gesagt, wenn neuere Versionen von x86 und x64 Microsoft Visual C ++ 2010 Redistributable installiert werden, stehen diese in Konflikt mit denen im SDK-Installationsprogramm und müssen zuerst deinstalliert werden.

Das SDK wurde dann installiert, aber ich bemerkte, dass vcvars64.bat noch nicht in C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\binseinen Unterordnern vorhanden war. vcvarsall.bat führt die vcvars64-Batchdatei aus. Ohne sie würde das Python-Paket immer noch nicht installiert werden (ich habe den Fehler vergessen, der zu diesem Zeitpunkt angezeigt wurde).

Ich habe dann hier einige Anweisungen gefunden: http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1 Nach den Anweisungen hatte ich bereits Express und 7.1 SDK installiert und SDK 7.1 SP1 installiert Fix der fehlenden Header-Datei. Ich habe dann manuell vcvars64.bat mit dem Inhalt erstellt CALL setenv /x64. Ich werde all diese Anweisungen hier einfügen, damit sie nicht verloren gehen.

Schritt 1 ist das Herunterladen von Visual Studio Express 2010.

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express ist ein guter Anfang. Laden Sie das Installationsprogramm herunter und führen Sie es aus (vc_web.exe). Sie benötigen keinen zusätzlichen SQL 2008-Download.

Sie benötigen auch das Windows SDK (derzeit 7.1) für die 64-Bit-Compiler - es sei denn, Sie möchten nur 32-Bit-Builds erstellen, die nicht vollständig unterstützt werden ...

http://www.microsoft.com/en-us/download/details.aspx?id=8279 ist ein guter Ausgangspunkt, um dies herunterzuladen - Sie möchten wondk_web.exe beim Herunterladen ausführen!

Die Standardinstallation hier ist in Ordnung.

Laden Sie abschließend das Windows SDK 7.1 SP1-Update herunter und installieren Sie es: http://www.microsoft.com/en-us/download/details.aspx?id=4422

Und um fehlende Header-Datei zu beheben, VS2010 SP1. http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

Und, verdammt noch mal, reparieren Sie die fehlende Batch-Datei für VS2010 Express. Das wird geradezu absurd.

Erstellen Sie unter C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64 "vcvars64.bat" wie folgt (Sie müssen als Administrator ausgeführt werden):

CALL setenv / x64

Mein Python-Paket wurde immer noch nicht installiert (Fehler kann nicht zurückgerufen werden). Ich fand dann einige Anweisungen (unten kopiert) zur Verwendung der speziellen SDK 7.1-Eingabeaufforderung, siehe: https://mail.python.org/pipermail/distutils-sig/2012-February/018300.html

Macht nichts aus dieser Frage. Jemand hier hat diesen Punkt im Menü bemerkt: Start-> Alle Programme-> Microsoft Windows SDK v7.1 -> Windows SDK 7.1-Eingabeaufforderung

Dadurch wird ein Stapeljob ausgeführt, der anscheinend eine Arbeitsumgebung für den Compiler einrichtet. An dieser Eingabeaufforderung können Sie "setup.py build" oder "setup.py install" eingeben.

Ich habe die Windows SDK 7.1-Eingabeaufforderung wie angegeben geöffnet und damit easy_install für das Python-Paket ausgeführt. Und endlich Erfolg!


TLDR ;

  1. Installieren Sie Visual Studio Express 2010 (vorzugsweise ohne aktualisierte Redistributables oder SQL Server).
  2. Installieren Sie das Windows 7.1 SDK
  3. Installieren Sie das SDK 7.1 SP1-Update und korrigieren Sie die VS2010 SP1-Headerdatei (dieser Schritt ist möglicherweise nicht erforderlich).
  4. Manuell C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batmit Inhalten erstellenCALL setenv /x64
  5. Start-> Alle Programme-> Microsoft Windows SDK v7.1 -> Windows SDK 7.1 Eingabeaufforderung zum Öffnen einer speziellen x64-Eingabeaufforderung, die dann mit python / easy_install / pip / etc (einschließlich der in virtual_envs) verwendet werden kann.
neRok
quelle
4

Die folgenden Schritte haben dieses Problem für mich behoben. Ich habe versucht, ein Setup mit der Erweiterung cython zu erstellen.

  1. Installieren Sie Microsoft Visual C ++ Compiler für Python 2.7
  2. Der Standardinstallationsspeicherort wäre @ C: \ Benutzer \ PC-Benutzer \ AppData \ Local \ Programme \ Common \ Microsoft \ Visual C ++ für Python. Dies kann das Problem möglicherweise beheben. Testen Sie es einmal, bevor Sie fortfahren.
  3. Wenn dies fehlschlägt, überprüfen Sie, wo sich die Datei VCcarsall.bat in VC ++ für Python befindet
  4. Öffnen Sie die Datei msvc9compiler.py des distutils-Pakets im Editor.
  5. In meiner Box war dies die Funktion @ C: \ Anaconda2 \ Lib \ distutils \ msvc9compiler.py find_vcvarsall in dieser Datei. Bestimmen Sie die Version von VC, indem Sie das Versionsargument ausdrucken. Für Python 2.7 ist es wahrscheinlich 9.0
  6. Erstellen Sie nun eine Umgebungsvariable VS90COMNTOOLS, die auf C: \ Benutzer \ PC-Benutzer \ AppData \ Local \ Programme \ Common \ Microsoft \ Visual C ++ für Python \ 9.0 \ VC \ bin verweist
  7. Aus irgendeinem Grund erwartet distutils, dass sich die Datei vcvarsall.bat im VC-Verzeichnis befindet, aber VC ++ für Python-Tools hat sie im Stammverzeichnis von 9.0. Um dies zu beheben, entfernen Sie "VC" aus der Datei path.join (ungefähr in Zeile 247).

    #productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC") productdir = os.path.join(toolsdir, os.pardir, os.pardir)

Die obigen Schritte haben das Problem für mich behoben.

Riyas Deen
quelle
Ich bin immer auf die oben genannten Schritte LINK Verknüpfung Fehler: Fehler LNK2001: extern Symbol init__init__ build \ temp.win-amd64-2.7 \ Release_ init_ Lib: fatal error LNK1120: 1 nicht aufgelöste externe Fehler: Befehl ‚C: \\ Users \\ ma306477 \\ AppData \\ Lokale \\ Programme \\ Allgemein \\ Microsoft \\ Visual C ++ für Python \\ 9.0 \\ VC \\ Bin \\ amd64 \\ link.exe 'fehlgeschlagen mit Exit-Status 1120
manish Prasad
3

Ich habe viele Lösungen ausprobiert, aber nur eine hat für mich funktioniert, die Installation von Microsoft Visual Studio 2008 Express C ++.

Ich habe dieses Problem mit einem in C geschriebenen Python 2.7-Modul (yEnc, das andere Probleme mit MS VS hat). Beachten Sie, dass Python 2.7 mit MS VS 2008 Version erstellt wurde, nicht mit 2010!

Trotz der Tatsache, dass es kostenlos ist, ist es ziemlich schwer zu finden, da MS für VS 2010 wirbt. Die offiziellen, sehr direkten Links von MSDN funktionieren immer noch: Download-Links finden Sie unter https://stackoverflow.com/a/15319069/2227298 .

KrisWebDev
quelle
Ja, der beste Weg ist, VS2008 zu installieren.
Pylover
3

Wenn Sie mingw installiert haben

pip install --global-option build_ext --global-option --compiler=mingw32 packagename

funktioniert und zwingt pip, mit dem mingw-Compiler anstelle von Microsoft zu erstellen. Weitere Informationen finden Sie hier https://github.com/pypa/pip/issues/18 (letzter Beitrag).

Nicolas78
quelle
3

Ist Microsoft Visual C ++ Compiler für Python 2.7 unter http://www.microsoft.com/en-us/download/details.aspx?id=44266 keine Lösung?

Michael
quelle
Hat für mich gearbeitet. Fehlermeldung am Ende der Pip-Installation pysftp hatte diese Lösungerror: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
Bob Stein
3

Der einfachste Weg, dies im Jahr 2016 zu lösen, ist die Installation von Chocolatey und anschließend des vcpython27Pakets. Open Powershell:

> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
> choco install python2 -y
> choco install vcpython27 -y
Chris S.
quelle
2

Ich habe das gleiche Problem und habe es im Moment gelöst.

"Google" hat mir mitgeteilt, dass ich "Microsoft Visual C ++ Compiler für Python 2.7" installieren muss. Ich installiere nicht nur das Tool, sondern auch Visual C ++ 2008 Reditributable, aber es hat nicht geholfen. Ich habe dann versucht, Visual C ++ 2008 Express Edition zu installieren. Und das Problem ist weg!

Versuchen Sie einfach, Visual C ++ 2008 Express Edition zu installieren!

Vova
quelle
2

Beim Aufrufen import setuptoolswerden Affen-Patch-Distutils verwendet, um die Kompatibilität mit Visual Studio zu erzwingen. Durch vcvars32.batmanuelles Aufrufen wird die virtuelle Umgebung eingerichtet und andere häufige Fehler, die der Compiler auslöst, werden vermieden. Für VS 2017 befindet sich die Datei unter

"C: \ Programme (x86) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ Auxiliary \ Build \ vcvars32.bat"

Hier ist das Setup-Skript, mit dem ich .pyx-Dateien schnell zu .pyd kompiliere: (Hinweis: Es verwendet das Drittanbieter-Modul send2trash

# cython_setup.py
import sys, os, time, platform, subprocess
from setuptools import setup, find_packages
from Cython.Build import cythonize
from traceback import format_exc

# USAGE:
#
#   from cython_setup import run
#   run(pyx_path)

# vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"

# NOTE: to use visual studio 2017 you must have setuptools version 34+
vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars32.bat"


def _build_ext():
    try:
        pyx_path = sys.argv.pop(-1)
        pyx_path = os.path.abspath(pyx_path)
        if not os.path.exists(pyx_path):
            raise FileNotFoundError(f"{pyx_path} does not exist")
        project_name = sys.argv.pop(-1)
        os.chdir(os.path.abspath(os.path.dirname(pyx_path)))

        print("cwd: %s" % os.getcwd())
        print(os.path.abspath("build"))
        setup(
            name=project_name,
            # cmdclass = {'build_ext': build_ext},
            packages=find_packages(),
            # ext_modules=cythonize(extensions)
            ext_modules=cythonize(pyx_path,
                                  compiler_directives={'language_level': 3, 'infer_types': True, 'binding': False},
                                  annotate=True),
            # include_dirs = [numpy.get_include()]
            build_dir=os.path.abspath("build")
        )
    except:
        input(format_exc())


def retry(func):
    def wrapper(*args, **kw):
        tries = 0
        while True:
            try:
                return func(*args, **kw)
            except Exception:
                tries += 1
                if tries > 4:
                    raise
                time.sleep(0.4)

    return wrapper


@retry
def cleanup(pyx_path):
    from send2trash import send2trash
    c_file = os.path.splitext(pyx_path)[0] + ".c"
    if os.path.exists(c_file):
        os.remove(c_file)

    if os.path.exists("build"):
        send2trash("build")


def move_pyd_files(pyx_path):
    pyx_dir = os.path.dirname(pyx_path)
    build_dir = os.path.join(pyx_dir, "build")
    if not os.path.exists(build_dir):
        raise RuntimeError(f"build_dir {build_dir} did not exist....")
    found_pyd = False
    for top, dirs, nondirs in os.walk(build_dir):
        for name in nondirs:
            if name.lower().endswith(".pyd") or name.lower().endswith(".so"):
                found_pyd = True
                old_path = os.path.join(top, name)
                new_path = os.path.join(pyx_dir, name)
                if os.path.exists(new_path):
                    print(f"removing {new_path}")
                    os.remove(new_path)
                print(f"file created at {new_path}")
                os.rename(old_path, new_path)
    if not found_pyd:
        raise RuntimeError("Never found .pyd file to move")

def run(pyx_path):
    """
    :param pyx_path:
    :type pyx_path:
    :return: this function creates the batch file, which in turn calls this module, which calls cythonize, once done
    the batch script deletes itself... I'm sure theres a less convoluted way of doing this, but it works
    :rtype:
    """
    try:
        project_name = os.path.splitext(os.path.basename(pyx_path))[0]
        run_script(project_name, os.path.abspath(pyx_path))
    except:
        input(format_exc())


def run_script(project_name, pyx_path):
    dirname = os.path.dirname(pyx_path)
    # ------------------------------
    os.chdir(dirname)
    if os.path.exists(vcvars):
        #  raise RuntimeError(
        # f"Could not find vcvars32.bat at {vcvars}\nis Visual Studio Installed?\nIs setuptools version > 34?")
        subprocess.check_call(f'call "{vcvars}"', shell=True)

    cmd = "python" if platform.system() == "Windows" else "python3"
    subprocess.check_call(f'{cmd} "{__file__}" build_ext "{project_name}" "{pyx_path}"', shell=True)
    move_pyd_files(pyx_path)
    cleanup(pyx_path)


if len(sys.argv) > 2:
    _build_ext()
user2682863
quelle
In der Tat setuptoolshilft der Import auch bei der Cython-Kompilierung .
Basj
Könntest du etwas ausführlicher erklären? Wie rufe ich die vcvars32.bat manuell auf? Ich habe Cython-Zusammenstellung
Juni Wang
2

Verwenden Sie diesen Link, um Visual C ++ 2015 Build Tools herunterzuladen und zu installieren . Visual C ++ 14.0 wird automatisch heruntergeladen visualcppbuildtools_full.exeund installiert, ohne dass Visual Studio installiert wird. Versuchen Sie nach Abschluss der Installation erneut, pip zu installieren, und Sie erhalten den Fehler nicht erneut.

Ich habe es auf folgenden Plattformen und Versionen getestet:

Python 3.6 on Windows 7 64-bit
Python 3.7 on Windows Server 2016 (64-bit system)
Python 3.8 on Windows 10 64-bit
Lalit Kumar B.
quelle
1

Wenn Sie schauen , auf einem Windows - Box installieren Pyodbc , die nicht funktioniert haben Visual Studio eine andere Option installiert ist, manuell zu installieren Pyodbc die Binärdistribution verwenden.

Dies ist besonders nützlich, wenn Sie auf dem Computer, mit dem Sie arbeiten, keine Administratorrechte haben und versuchen, eine virtuelle Umgebung einzurichten .

Schritte:

  1. Laden Sie die neuesten Windows - Installer von hier (Pyodbc-XXXwin-Y-py2.7.exe)
  2. Öffnen Sie die ausführbare Installationsdatei mit 7-Zip (oder WinRAR oder was auch immer).
  3. Extrahieren Sie pyodbc.pyd und pyodbc-XXX-py2.7.egg-info und platzieren Sie sie in [python installation directory or virtualenv]\Lib\site-packages
  4. Es gibt keinen Schritt 4 :)
Däne B.
quelle
1

Mit Python 3.4 ist die Abhängigkeit von Visual Studio 2010. Die Installation von Visual C ++ 2010 Express hat das Problem für mich behoben.

Die Verwendung der VS 2008- oder 2013-Installationen, die ich zufällig hatte, hat nicht funktioniert.

gmjonker
quelle
1

Sie können easy_install anstelle von pip verwenden, es funktioniert für mich.

Abdul Majeed
quelle
Gleicher Fehlererror: Setup script exited with error: Unable to find vcvarsall.bat
Stephan Schielke
1

Die Antwort von @monkey ist eine der richtigen, aber unvollständig.

Wenn Sie MinGW verwenden möchten , sollten Sie C, C ++ und andere Entwicklungstools auswählen, die während des MinGW-Installationsprozesses vorgeschlagen wurden, um auch "make.exe" zu erhalten.

Sie müssen auch den Pfad auf make.exe in der Umgebung festgelegt haben.

Um seine Antwort zu vervollständigen, sind hier die Schritte:

  1. Fügen Sie das bin-Verzeichnis von mingw32 zu Ihren Umgebungsvariablen hinzu
  2. An den PFAD C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;anhängen
  3. Bearbeiten Sie (erstellen Sie, wenn es nicht existiert) die distutils.cfgDatei, die sich unter C:\Python26\Lib\distutils\distutils.cfgbefindet:

    [build]
    compiler=mingw32

Stellen Sie sicher, dass die Umgebungsvariablen festgelegt sind, indem Sie eine neue cmd.exe öffnen.

Olivier N.
quelle
32-Bit-Python-Module sollten mit 32-Bit-Mingw kompiliert werden, während 64-Bit-Python-Module mit 64-Bit-Mingw kompiliert werden sollten. Auf Cygwin 64-Bit sind 2 ausführbare Mingw-Dateien verfügbar: x86_64-w64-mingw32-gccund i686-w64-mingw32-gcc. Diese ausführbaren Dateien sind anscheinend die gleichen wie die, die Sie normalerweise von Mingw erhalten (nur in einer Cygwin-Umgebung kompiliert).
CMCDragonkai