errore: impossibile trovare vcvarsall.bat


851

Ho provato ad installare il pacchetto Python dulwich :

pip install dulwich

Ma ricevo un messaggio di errore criptico:

error: Unable to find vcvarsall.bat

Lo stesso succede se provo a installare il pacchetto manualmente:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat

6
Per riferimento futuro sarebbe bello vedere su quale piattaforma usi questo.
viam0Zah,

47
Se ritieni che si tratti di un messaggio di errore ridicolmente criptico e inutile, vota per l'errore su bugs.python.org/issue2943
Colonnello Panic,

48
Microsoft ora fornisce una soluzione: microsoft.com/en-us/download/details.aspx?id=44266
Martijn Pieters

6
@MartijnPieters Ho provato a scaricare e installare il collegamento fornito con wheel e setuptools 7.0 ma non funziona Ottengo il messaggio: 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 (un ragazzo del team Python di Microsoft) ha scritto un post sul blog su questo argomento che vale la pena leggere: blogs.msdn.microsoft.com/pythonengineering/2016/04/11/…
Cody Piersall

Risposte:


683

Aggiornamento : i commenti sottolineano che le istruzioni qui possono essere pericolose. Prendi in considerazione l'utilizzo dell'edizione Visual C ++ 2008 Express o del compilatore Microsoft Visual C ++ appositamente progettato per Python ( dettagli ) e NON utilizzare la risposta originale di seguito. Il messaggio di errore originale indica che la versione richiesta di Visual C ++ non è installata.


Per le installazioni di Windows:

Durante l'esecuzione di setup.py per le installazioni di pacchetti, Python 2.7 cerca un Visual Studio 2008. È possibile indurre Python a utilizzare un Visual Studio più recente impostando il percorso corretto nella VS90COMNTOOLSvariabile di ambiente prima di chiamare setup.py.

Eseguire il comando seguente in base alla versione di Visual Studio installata:

  • 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%

ATTENZIONE: Come indicato di seguito, è improbabile che questa risposta funzioni se si sta tentando di compilare moduli Python.

Per maggiori dettagli, vedi Creazione di lxml per Python 2.7 su Windows .


21
Lo ha fatto per me :(
fmuecke

8
@Gili: sembra che questo problema sia dovuto agli spazi nella variabile, prova a racchiuderlo tra virgolette. Per me% VS100COMNTOOLS% = "C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools"
legends2k

7
Questo non funzionerà per molte cose, perché Python si affida a VS2008. Date un'occhiata a questa risposta: stackoverflow.com/questions/6551724/...
shezi

182
AVVERTIMENTO!!! Questa è una risposta ERRATA . Si consiglia di non in nessun caso di compilazione estensione Python C utilizzando diversi (versione di) compilatore che quello usato per compilare Python stesso come quei due (versioni) compilatori avrà probabilmente librerie di runtime C incompatibili. Vedi questa risposta per maggiori dettagli.
Piotr Dobrogost,

72
Puoi scaricare Visual C ++ 2008 Express Edition gratuito da go.microsoft.com/?linkid=7729279 , che imposterà la variabile d'ambiente VS90COMNTOOLS durante l'installazione e quindi compilerà con un compilatore compatibile.
Eric Smith,

225

Ho trovato la soluzione Ho avuto lo stesso identico problema ed errore durante l'installazione di "Amara". Avevo installato mingw32, ma era necessario configurare distutils.

  1. Ho Python 2.6 che era già installato.
  2. Ho installato mingw32 su C:\programs\mingw\
  3. Aggiungi la directory bin di mingw32 alla tua variabile d'ambiente: aggiungi c:\programs\MinGW\bin;al PERCORSO
  4. Modifica (crea se non esistente) il file distutils.cfg che si trova in C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32
  5. Adesso corri easy_install.exe amara.

Assicurarsi che l'ambiente sia impostato aprendo un nuovo cmd.exe.


45
Funziona benissimo con Python2.6, ma per qualche motivo non riesco a farlo funzionare su Python2.7. Funziona se scarico il mio pacchetto sorgente e installo usando 'python setup.py install --compile = mingw32', ma per qualche ragione usando easy_install o pip prova ancora a trovare vcvarsall.
Jonathan Hartley,

2
Ho finalmente ottenuto scikits.image da installare in Python (x, y) 2.7 aggiungendo C:\msysgit\mingw\mingw32\bine C:\msysgit\mingw\binall'utente PATH e riavviando Spyder prima di eseguire di pip installnuovo
endolith il

20
Non è necessario riavviare mai a causa di una modifica della variabile di ambiente. L'apertura di un nuovo processo cmd.exe è sufficiente.
Tomalak,

11
Non riuscivo ancora a risolvere questo problema. Questo è l'errore: gcc: error: unrecognized command line option '-mno-cygwin' error: Setup script exited with error: command 'gcc' failed with exit status 1dopoeasy_install.exe amara
utente

5
@utente, dovresti aprire questo file: C:\Python27\Lib\distutils\cygwincompiler.pye rimuovere tutte le sue occorrenze –mno-cygwin; questo perché le versioni recenti di GCC hanno rimosso l' –mno-cygwinopzione e non dovrebbe essere lì.
Zeinab Abbasimazar

220

Puoi installare la versione compilata da http://www.lfd.uci.edu/~gohlke/pythonlibs/


15
solo un suggerimento: è possibile installare il pacchetto da questo sito in virtualenv eseguendo easy_install binary_installer_built_with_distutils.exevirtualenv, accodando a questa risposta .
yangzh,

14
Ogni sviluppatore di Python Windows dovrebbe saperlo
Liceo

1
Puoi anche wheel convert ....exeinstallare questi installatori e installarli con pip quando vuoi.
Zooba,

3
Per essere più precisi, lfd.uci.edu/~gohlke/pythonlibs/#mysql-python e una volta scaricato aperto un terminale come amministratore ed eseguirepython -m pip install <filename>
Arun

Agrifoglio madre di Dio, questo è proprio sul posto. Funziona come un fascino, TY :)
Amir

162

Se vuoi compilare con Visual Studio C ++ invece di mingw ...

  1. Esegui python.exeper visualizzare la versione di VC ++ con cui è stata compilata (esempio mostrato di seguito).

    E ' importante utilizzare la versione corrispondente del compilatore Visual C ++ che Python è stato compilato con il dato distilutils s' get_build_versionimpedisce la miscelazione versioni ( per gli avvisi di Piotr ).

    • Il giallo (in alto) è Python 2.7, compilato con MSC v.1500 (Visual Studio C ++ 2008)
    • Il rosso (in basso) è Python 3.4.1, compilato con MSC v.1600 (Visual Studio C ++ 2010)

    Esempio dalla riga di comando che mostra Python 2.7 compilato con MSC v.1500 e Python 3.4.1 compilato con MSC v.1600

  2. Utilizzare la tabella di seguito [1] per abbinare la versione VC ++ interna alla versione di Visual Studio corrispondente:

    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. Scarica e installa la versione corrispondente di Visual Studio C ++ dal passaggio precedente.
    Note aggiuntive per versioni specifiche di VC ++ sono elencate di seguito.

    Note per Visual Studio C ++ 2008

    Per solo i compilatori a 32 bit, scaricare Visual Studio C ++ 2008 Express Edition .

    Per i compilatori a 64 bit [2] [3] , scaricare Windows SDK per Windows 7 e .NET Framework 3.5 SP1 .

    • Deseleziona tutto tranne che Developer Tools >> Visual C++ Compilersper risparmiare tempo e spazio su disco dall'installazione di strumenti SDK che altrimenti non ti serviranno.

    Note per Visual Studio C ++ 2010

    Secondo Microsoft, se hai installato Visual Studio 2010 SP1, è possibile che siano stati rimossi i compilatori e le librerie per VC ++.
    In tal caso, scaricare l' aggiornamento del compilatore di Visual C ++ 2010 SP1 .

    Note per Visual Studio C ++ 2015

    Se non hai bisogno dell'IDE di Visual Studio, scarica Visual Studio C ++ 2015 Build Tools .

    Note per Visual Studio C ++ 2017

    Se non hai bisogno dell'IDE di Visual Studio, scarica Build Tools per Visual Studio 2017 .

    Suggerimento : se disponi di un'installazione Python a 32 e 64 bit, puoi anche utilizzare virtualenv per creare ambienti Python separati in modo da poter utilizzare l'uno o l'altro alla volta senza fare confusione con il tuo percorso per scegliere quale versione di Python uso.

Secondo @srodriguex , potresti essere in grado di saltare il caricamento manuale del file batch (passaggi 4-6) copiando invece alcuni file batch in cui Python sta cercando seguendo questa risposta . Se non funziona, ecco i seguenti passaggi che originariamente funzionavano per me.

  1. Apri a cmd.exe

  2. Prima di provare a installare qualcosa che richiede estensioni C, eseguire il seguente file batch per caricare l'ambiente del compilatore VC ++ nella sessione (ovvero variabili di ambiente, percorso del compilatore, ecc.).

    Eseguire:

    • Compilatori a 32 bit:

      Nota : le installazioni di Windows a 32 bit avranno solo C:\Program Files\come previsto

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

    • Compilatori a 64 bit:

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

      Nota : Sì, sono presenti i compilatori nativi a 64 bit Program Files (x86). Non chiedermi perché.
      Inoltre, se ti stai chiedendo quale sia la differenza tra vcvars64.bate vcvarsx86_amd64.bato, soprattutto, la differenza tra amd64e x86_amd64, i primi sono per gli strumenti di compilazione nativi a 64 bit e i secondi sono i compilatori incrociati a 64 bit che possono essere eseguiti su un'installazione di Windows a 32 bit .

    Aggiornamento:
    se per qualche motivo stai arrivando error: ... was unexpected at this time.dove ...sono alcune serie di caratteri, allora devi verificare che la tua variabile di percorso non abbia caratteri estranei come citazioni extra o caratteri vaganti. Il file batch non sarà in grado di aggiornare il percorso della sessione se non ha senso in primo luogo.

  3. Se ciò è andato bene, dovresti ricevere uno dei seguenti messaggi a seconda della versione di VC ++ e del comando che hai eseguito:

    Per gli strumenti del compilatore a 32 bit:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    Per gli strumenti del compilatore a 64 bit:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. Ora , esegui l'installazione tramite python setup.py installopip install pkg-name

  5. Spero e incrocia le dita che i pianeti siano allineati correttamente affinché VC ++ possa cooperare.


Non posso raccomandare abbastanza che si fa passare attraverso il dolore di passare direttamente a 64 bit. È solo questione di tempo prima che avrai bisogno di oltre 4 GB di spazio di indirizzi. Parlo per esperienza dolorosa dopo essere andato a 32 bit perché era molto più semplice, quindi dover disinstallare tutto compreso le dipendenze e andare a 64 bit. Quasi un intero fine settimana.
Thomas Browne,

1
Inoltre, dimentico quante persone dovranno usare Python per compiti molto più grandi come quello. E @ThomasBrowne, sono sicuro che sia stata un'esperienza dolorosa e inutile. Ci sto esaminando e spero di trovare qualcosa. Il problema principale era che Visual Studio C ++ 2008 Express non veniva fornito con un compilatore a 64 bit, ma sono sicuro che sia qui da qualche parte.
Josh Bowden,

L'ho appena aggiornato con ulteriori informazioni su come ottenere anche i compilatori a 64 bit se ne hai bisogno.
Josh Bowden,

Nel mio caso, seguo il passaggio 1 sopra e ho saltato il resto dopo questa risposta . Ora sono in grado di installare pacchetti evitando il fastidio di eseguire .bat.
srodriguex,

@srodriguex bene in quel caso, sembra che Python stia supponendo che gli strumenti del compilatore a 64 bit vengano caricati nel PERCORSO usando quello che sta cercando ...\VC\bin\vcvarsamd64.bate ...\VC\bin\amd64\vcvarsamd64.bat.
Josh Bowden,

73

Cosa sta succedendo? I moduli Python possono essere scritti in parte in C o C ++ (in genere per velocità). Se si tenta di installare un tale pacchetto con Pip (o setup.py), è necessario compilare quel C / C ++ dal sorgente. All'improvviso, Pip ti assumerà sfacciatamente il compilatore Microsoft Visual C ++ installato. Se non lo possiedi, visualizzerai questo messaggio di errore criptico "Errore: impossibile trovare vcvarsall.bat".

La soluzione prescritta è installare un compilatore C / C ++, Microsoft Visual C ++ o MinGW (un progetto open source). Tuttavia, l'installazione e la configurazione di entrambi sono proibitivamente difficili. (Modifica 2014: Microsoft ha pubblicato uno speciale compilatore C ++ per Python 2.7)

La soluzione più semplice è utilizzare gli installer di Windows (.msi) di Christoph Gohlke per i popolari pacchetti Python. Costruisce programmi di installazione per Python 2.xe 3.x, 32 bit e 64 bit. Puoi scaricarli da http://www.lfd.uci.edu/~gohlke/pythonlibs/


Se anche tu pensi che "Errore: impossibile trovare vcvarsall.bat" sia un messaggio ridicolmente criptico e inutile, commenta il bug su http://bugs.python.org/issue2943 per sostituirlo con un più utile e user- messaggio amichevole.

Per fare un confronto, Ruby viene fornito con un gestore di pacchetti Gem e offre un compilatore C / C ++ quasi ufficiale, DevKit. Se si tenta di installare un pacchetto senza di esso, viene visualizzato questo messaggio utile e utile utile:

Aggiorna il tuo PERCORSO per includere strumenti di compilazione o scarica DevKit da http://rubyinstaller.org/downloads e segui le istruzioni su http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Puoi leggere una versione più lunga della confezione di Python all'indirizzo https://stackoverflow.com/a/13445719/284795


Come posso usare pip per installare questo eseguibile precompilato nel mio ambiente virtuale?
Shailen,

@shailenTJ buona domanda. Non l'ho mai fatto, ma prova stackoverflow.com/a/5442340/284795
Colonnello Panic,

Questa è stata la soluzione migliore / più semplice di cui sono a conoscenza. Grazie.
user1477388

That Edit 2014 è la risposta migliore per me. Istruzioni facili da perdere: assicurati di aggiornare setuptoolsalla versione 6.0o successive con pip install setuptools --upgrade.
Orlade,

64

Dovrai installare un compilatore Microsoft, compatibile con il compilatore utilizzato per compilare Python. Ciò significa che è necessario Visual C ++ 2008 (o più recente, con alcune modifiche ).

Microsoft ora fornisce un compilatore e intestazioni in bundle solo per essere in grado di compilare estensioni Python, all'URL memorabile:

Compilatore Microsoft Visual C ++ per Python 2.7

http://aka.ms/vcpython27

Questo è un pacchetto relativamente piccolo; 85 MB da scaricare, installabile senza privilegi di amministratore, non è necessario riavviare. Il nome è un po 'fuorviante, il compilatore funzionerà con qualsiasi versione di Python originariamente compilata con Visual C ++ 2008, non solo con Python 2.7.

Se avvii un prompt interattivo o stampa Python sys.version, cerca la MSCstringa di versione; se lo è MSC v.1500, puoi usare questo strumento.

Dall'annuncio originale all'elenco distutils :

Microsoft ha rilasciato un pacchetto compilatore per Python 2.7 per rendere più semplice per le persone creare e distribuire i loro moduli di estensione C su Windows. Il compilatore Microsoft Visual C ++ per Python 2.7 (aka VC9) è disponibile da: http://aka.ms/vcpython27

Questo pacchetto contiene tutti gli strumenti e le intestazioni necessari per creare moduli di estensione C per Python 2.7 a 32 e 64 bit (si noti che alcuni moduli di estensione richiedono dipendenze di terze parti come OpenSSL o libxml2 che non sono inclusi). Sono supportate anche altre versioni di Python create con Visual C ++ 2008, quindi "Python 2.7" è solo pubblicità: funzionerà perfettamente con 2.6 e 3.2.

Nota che devi avere setuptools6.0 o più recenti installati (elencati nei requisiti di sistema nella pagina di download). È necessario utilizzare il progetto che si sta installando setuptools.setup(), distutilsaltrimenti il ​​rilevamento automatico non funzionerà.

Microsoft ha dichiarato di voler mantenere stabile l'URL, in modo che gli script automatici possano fare riferimento facilmente.


2
Come per il mio altro commento, puoi assicurarti che setuptoolssia aggiornato pip install setuptools --upgrade.
Orlade,

Ho esaminato il motivo per cui la logica pertinente si trova setuptoolspiuttosto che distutils- dopotutto, la creazione di moduli è la funzionalità principale e ha il codice pertinente, ma una versione precedente di esso. Sembra che i distutilsmanutentori abbiano rinunciato a supportare tutte le possibili variazioni di MSSDK e abbiano scaricato questo lavoro sui loro setuptoolscolleghi più desiderosi.
ivan_pozdeev,

1
@ivan_pozdeev: setuptoolspuò anche essere rilasciato molto più spesso di distutils, incluso nel ciclo di rilascio di Python. Ed distitutilsè effettivamente entrato in una sorta di modalità di manutenzione, con il lavoro su nuovi sistemi in programma per sostituirlo. Quel lavoro invece è bloccato.
Martijn Pieters

cython usa distutils, è necessario importare setuptools che patch patch scimmia distutils: github.com/cython/cython/wiki/CythonExtensionsOnWindows
denfromufa

54

Ho appena avuto lo stesso problema, quindi racconterò la mia storia qui sperando che aiuti qualcun altro con gli stessi problemi e li salvi le ore che ho appena trascorso:

Ho mingw (g ++ (GCC) 4.6.1) e python 2.7.3 in una scatola di Windows 7 e sto cercando di installare PyCrypto.

Tutto è iniziato con questo errore durante l'esecuzione di setup.py install:

error: Unable to find vcvarsall.bat

Facilmente risolto dopo aver cercato su Google l'errore specificando mingw come compilatore preferito:

setup.py install build --compiler=mingw32

Il problema è che poi ho ricevuto un errore diverso:

configure: error: cannot run C compiled programs.

Si scopre che il mio antivirus stava bloccando l'esecuzione di un file exe appena compilato. Ho appena disabilitato lo "scudo residente" antivirus e sono passato al prossimo errore:

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

Questo ha risolto: "Installa una versione leggermente più vecchia di MinGW o modifica distutils \ cygwinccompiler.py nella tua directory Python per rimuovere tutte le istanze di -mno-cygwin." (da qui )

Ora posso finalmente iniziare a lavorare.


7
Avrai anche bisogno di una versione compatibile con MinGW della libreria Python. Vedi eli.thegreenplace.net/2008/06/28/… per maggiori informazioni
Gili

Colpi di
scena

23

Sembra -c mingw32che stia cercando compilatori VC, quindi potresti provare a menzionare il tipo di compilatore , dato che hai msys

python setup.py install -c mingw32

16
Giusto per chiarire, il comando che funziona è: python setup.py build --compiler=mingw32seguito dapython setup.py install
Emil Stenström,

Dopo aver eseguito python setup.py build --compiler = mingw32 Ricevo ImportError: nessun modulo chiamato Cython.Distutils mentre Cython è installato in Anaconda. Eventuali suggerimenti?
Serendipity,

20

Ho Python 2.73 e Windows 7. La soluzione che ha funzionato per me è stata:

  1. Aggiunta la directory bin di mingw32 alla variabile d'ambiente: aggiungi PATH conC:\programs\mingw\bin;
  2. Creato distutils.cfg situato in C:\Python27\Lib\distutils\distutils.cfgcontenente:

    [build]
    compiler=mingw32

Per far fronte a MinGW che non riconosce più il flag -mno-cygwin, rimuovi il flag nella riga da 322 a 326 di C: \ Python27 \ Lib \ distutils \ cygwincompiler.py, quindi assomiglia a questo:

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

15

Cerca nel setup.pyfile del pacchetto che stai tentando di installare. Se si tratta di un pacchetto precedente, potrebbe importare distutils.core.setup()anziché setuptools.setup().

Mi sono imbattuto in questo (nel 2015) con una combinazione di questi fattori:

  1. Il compilatore Microsoft Visual C ++ per Python 2.7 da http://aka.ms/vcpython27

  2. Un pacchetto precedente che utilizza distutils.core.setup()

  3. Cercare di fare python setup.py buildpiuttosto che usare pip.

Se usi una versione recente di pip, forzerà (monkeypatch) il pacchetto a usare setuptools, anche se setup.pyrichiede distutils. Tuttavia, se non si utilizza pip e invece lo si sta semplicemente facendo python setup.py build, verrà utilizzato il processo di generazione distutils.core.setup(), che non conosce il percorso di installazione del compilatore.


Soluzione

Passaggio 1: aprire il prompt dei comandi di Visual C ++ 2008 appropriato

Apri il menu Start o la schermata Start e cerca "Prompt dei comandi a 32 bit di Visual C ++ 2008" (se il tuo python è a 32 bit) o ​​"Prompt dei comandi a 64 bit di Visual C ++ 2008" (se il tuo python è a 64 bit) . Eseguirlo. Il prompt dei comandi dovrebbe indicare Visual C ++ 2008 ... nella barra del titolo.

Passaggio 2: impostare le variabili di ambiente

Impostare queste variabili di ambiente nel prompt dei comandi appena aperto.

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

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

Passaggio 3: compilare e installare

cdal pacchetto che si desidera compilare ed eseguire python setup.py build, quindi python setup.py install. Se vuoi installarlo su un virtualenv, attivalo prima di compilare.


puoi anche creare il tuo pacchetto usando <code> pip </code> invece di <code> python setup.py build </code>
aronadaal

9

Forse qualcuno potrebbe essere interessato, quanto segue ha funzionato per me per il pacchetto py2exe. (Ho Windows 7 64 bit e Portable Python 2.7, Visual Studio 2005 Express con Windows SDK per Windows 7 e .NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

poi:

python.exe setup.py install

No, hai ragione, non sono sicuro di cosa sia successo, eliminerò il commento originale.
Dave Challis,

1
Molto utile!! Nel mio caso, ho creato 'set VS90COMNTOOLS =% VS110COMNTOOLS%'.
jrvidotti,

@Exzile: sì, digiti questi comandi nella stessa sessione del prompt dei comandi
Stefano Fenu,

NON FARLO!!! Vedi questa risposta per maggiori dettagli.
Anonimo

8

Ho trascorso quasi 2 giorni a capire come risolvere questo problema nella mia versione a 64 bit di Python 3.4: Python 3.4.3 (v3.4.3: 9b73f1c3e601, 24 febbraio 2015, 22:44:40) [MSC v.1600 64 bit (AMD64 )] su win32

Soluzione 1, difficile: (prima di leggere questo, leggi prima la Soluzione 2 di seguito) Infine, questo è ciò che mi ha aiutato:

  1. installare Visual C ++ 2010 Express
  2. installa Microsoft Windows SDK v7.1 per Windows 7
  3. crea manualmente il file vcvars64.batin C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64cui contiene CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64o altro percorso a seconda di dove hai installato il tuo
  4. (sembra facoltativo) installare Microsoft Visual Studio 2010 Service Pack 1 insieme a Microsoft Visual C ++ 2010 Service Pack 1 Aggiornamento del compilatore per Windows SDK 7.1
  5. successivamente ho provato a pip install numpyma ho ricevuto il seguente errore:

    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

    Ho cambiato mfinfoin Nonein C:\Python34\Lib\distutils\msvc9compiler.pyquesto https://stackoverflow.com/a/23099820/4383472

  6. finalmente dopo il pip install numpycomando il mio antivirus avast ha tentato di interferire nel processo di installazione, ma l'ho disabilitato rapidamente

Ci sono voluti molto tempo - diversi minuti per la compilazione numpy, ho persino pensato che ci fosse un errore, ma alla fine era tutto ok.

Soluzione 2, facile: (so che questo approccio è già stato menzionato in una risposta molto votata , ma lasciatemi ripetere poiché è davvero più facile) Dopo aver svolto tutto questo lavoro ho capito che il modo migliore per me è già usare binari precompilati da http://www.lfd.uci.edu/~gohlke/pythonlibs/ in futuro. Ci sono poche possibilità che avrò mai bisogno di un pacchetto (o di una versione di un pacchetto) che questo sito non contiene. Anche il processo di installazione è molto più veloce in questo modo. Ad esempio, per installare numpy:

  1. scarica numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(se hai Python 3.4 a 64 bit) da quel sito
  2. nel prompt dei comandi o PowerShell installarlo con pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(o percorso completo del file a seconda di come viene aperto il prompt dei comandi)

numpy ‑ 1.9.2 + mkl ‑ cp34 ‑ none ‑ win_amd64.whl - impossibile trovare questo file sul link sopra.
Amresh Giri,

7

Volevo eseguire pysph su Windows 10 in Python 2.7 e non ho trovato vcvarsall.bat (da distutils)

La mia soluzione era la seguente:

Installa Microsoft Visual C ++ per Python 2.7 (come suggerito da @Michael)

Su Windows 10 è stato installato (il mio nome utente è Andreas):

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

Impostare la variabile di ambiente VS90COMNTOOLS sul percorso di installazione di Visual C ++ per Python 2.7 (vedere il percorso sopra).

Se il problema persiste, modificalo nel modulo

C:/Python27/lib/distutils

il file msvc9compiler.py . Trova in esso la funzione find_vcvarsall ed esegui le seguenti modifiche.

Sostituisci la linea:

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

con

productdir = os.path.join(toolsdir)

Questo è dove vcvarsall.bat risiede nel mio caso (controlla, dove vcvarsall.bat è nella tua installazione).


È interessante notare che %userprofile%\Appdata\Local\Programs\Commonè vuoto per me.
Bryce Guinta,

Anche dopo aver installato Microsoft Visual C ++ per Python 2.7?
capo

7

Ho riscontrato questo problema quando ho provato a installare la libreria numpy sul mio python 3.5. La soluzione è installare VS2015. Ho avuto VS2008, 2012, 2013, nessuno dei quali è compatibile con Python 3.5. Apparentemente la versione più recente di Python dipende dalle versioni più recenti di VS.

Assicurati anche che C ++ Common Tools sia installato con Visual Studio.

inserisci qui la descrizione dell'immagine


6

Ho provato tutte le risposte di cui sopra e ho scoperto che tutte non funzionavano, forse stavo usando Windows 8 e avevo installato Visual Studio 2012. In questo caso, questo è quello che fai.

Il vcvarsall.batfile si trova qui: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

Basta selezionare il file e copiarlo.

Quindi vai a questa directory: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

e incolla il file. E poi, tutto dovrebbe andare bene.


No, non tutto va bene Ho seguito la tua risposta, ma ricevo sempre lo stesso errore.
Stupid_Intern

6

Puoi scaricare Visual C ++ 2008 Express Edition gratuito da http://go.microsoft.com/?linkid=7729279 , che imposterà la variabile d'ambiente VS90COMNTOOLS durante l'installazione e quindi compilerà con un compilatore compatibile.

Come @PiotrDobrogost ha menzionato in un commento, la sua risposta a questa altra domanda va nei dettagli sul motivo per cui Visual C ++ 2008 è la cosa giusta con cui costruire, ma questo può cambiare quando la build di Windows di Python passa alle versioni più recenti di Visual Studio: Building lxml per Python 2.7 su Windows


Assicurati anche che non ci siano altre versioni installate. Ho avuto delle difficoltà con questo. Ho riformattato il computer e ho installato solo questa versione. Dal momento che rimuovere più versioni di VS mi avrebbe impiegato altrettanto tempo.
jmunsch,

6

Ho avuto questo problema usando Python 3.4.1 su Windows 7 x64 , e sfortunatamente i pacchetti di cui avevo bisogno non avevano exe o ruote adatte che potevo usare. Questo sistema richiede alcuni 'soluzioni alternative', che sono dettagliati di seguito (e TLDR in basso ).

Usando le informazioni nella risposta di Jaxrtech sopra , ho determinato che avevo bisogno di Visual Studio C ++ 2010 (sys.version return MSC v.1600), quindi ho installato Visual C ++ 2010 Express dal link nella sua risposta, che è http://go.microsoft .com /? linkid = 9709949 . Ho installato tutto con gli aggiornamenti, ma come puoi leggere di seguito, questo è stato un errore. Al momento è necessario installare solo la versione originale di Express (nessun aggiornamento).

vcvarsall.bat ora era presente, ma c'era un nuovo errore quando si installa il pacchetto query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']. Esistono altre domande di stackoverflow con questo errore, ad esempio Errori durante la creazione / installazione del modulo C per Python 2.7

Ho determinato da quella risposta che 2010 Express installa solo compilatori a 32 bit. Per ottenere compilatori a 64 bit (e altri), è necessario installare l'SDK di Windows 7.1. Vedere http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

Questo non sarebbe stato installato per me, e il programma di installazione ha restituito l'errore installation failed with return code 5100. Ho trovato la soluzione al seguente link: http://support.microsoft.com/kb/2717426 . In breve, se sono installate versioni più recenti di ridistribuibile di Microsoft Visual C ++ 2010 x86 e x64, sono in conflitto con quelle del programma di installazione dell'SDK e devono essere prima disinstallate.

L'SDK si è quindi installato, ma ho notato che vcvars64.bat non esisteva ancora C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin, né nelle sue sottocartelle. vcvarsall.bat esegue il file batch vcvars64, quindi senza di esso il pacchetto python non verrebbe ancora installato (ho dimenticato l'errore mostrato in questo momento).

Ho quindi trovato alcune istruzioni qui: http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1 Seguendo le istruzioni, avevo già installato Express e 7.1 SDK, quindi installato SDK 7.1 SP1 e fatto il SDK 7.1 SP1 correzione del file di intestazione mancante. Ho quindi creato manualmente vcvars64.bat con il contenuto CALL setenv /x64. Incollerò tutte queste istruzioni qui, così non si perderanno.

Il passaggio 1 è scaricare Visual Studio Express 2010.

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express è un buon punto di partenza. Scarica il programma di installazione ed eseguilo (vc_web.exe). Non è necessario il download aggiuntivo di SQL 2008.

Avrai anche bisogno dell'SDK di Windows (attualmente 7.1) per i compilatori a 64 bit - a meno che tu non voglia fare solo build a 32 bit, che non sono completamente supportate ...

http://www.microsoft.com/en-us/download/details.aspx?id=8279 è un buon punto di partenza per scaricare questo: ti consigliamo di eseguire winsdk_web.exe quando scaricato!

L'installazione predefinita qui va bene.

Infine, scarica e installa l'aggiornamento di Windows SDK 7.1 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=4422

E, per correggere il file di intestazione mancante, VS2010 SP1. http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

E, maledizione, correggi il file batch mancante per VS2010 Express. Questo sta diventando assolutamente assurdo.

In C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64, crea "vcvars64.bat" con il seguente comando (dovrai eseguire come amministratore):

CHIAMA setenv / x64

Il mio pacchetto python non è stato ancora installato (impossibile richiamare l'errore). Ho quindi trovato alcune istruzioni (copiate di seguito) per utilizzare lo speciale prompt dei comandi dell'SDK 7.1, consultare: https://mail.python.org/pipermail/distutils-sig/2012-February/018300.html

Non importa questa domanda. Qualcuno qui ha notato questo elemento nel menu: Start-> Tutti i programmi-> Microsoft Windows SDK v7.1 -> Prompt dei comandi di Windows SDK 7.1

Questo esegue un processo batch che sembra impostare un ambiente di lavoro per il compilatore. Da quel prompt, puoi digitare "setup.py build" o "setup.py install".

Ho aperto il prompt dei comandi di Windows SDK 7.1 come indicato e l'ho usato per eseguire easy_install sul pacchetto python. E finalmente, successo!


TLDR ;

  1. Installare Visual Studio Express 2010 (preferibilmente senza ridistribuibili aggiornati o server SQL).
  2. Installa l'SDK di Windows 7.1
  3. Installa aggiornamento SDK 7.1 SP1 e correzione del file di intestazione VS2010 SP1 (questo passaggio potrebbe non essere necessario).
  4. Crea manualmente C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batcon il contenutoCALL setenv /x64
  5. Start-> Tutti i programmi-> Microsoft Windows SDK v7.1 -> Windows SDK 7.1 Prompt dei comandi per aprire il prompt dei comandi x64 speciale, che può quindi essere utilizzato con python / easy_install / pip / etc (compresi quelli in virtual_envs).

4

Sotto i passaggi risolto questo problema per me, stavo cercando di creare l'installazione con l'estensione cython.

  1. Installa il compilatore Microsoft Visual C ++ per Python 2.7
  2. Il percorso di installazione predefinito sarebbe @ C: \ Users \ PC-user \ AppData \ Local \ Programmi \ Common \ Microsoft \ Visual C ++ per Python Questo potrebbe effettivamente risolvere il problema, testare una volta prima di procedere.
  3. Se fallisce, controlla dove si trova in VC ++ il file vcvarsall.bat python
  4. Aprire il file msvc9compiler.py del pacchetto distutils nel blocco note.
  5. Nella mia scatola c'era questa funzione @ C: \ Anaconda2 \ Lib \ distutils \ msvc9compiler.py find_vcvarsall in questo file, determinare la versione di VC stampando l'argomento versione. Per Python 2.7 è probabile che sia 9.0
  6. Ora crea una variabile d'ambiente VS90COMNTOOLS, puntando a C: \ Users \ PC-user \ AppData \ Local \ Programmi \ Common \ Microsoft \ Visual C ++ per Python \ 9.0 \ VC \ bin
  7. Per qualche ragione distutils si aspetta che il file vcvarsall.bat sia all'interno della directory VC, ma VC ++ per gli strumenti python lo ha nella radice di 9.0 Per risolvere questo problema, rimuovere "VC" dal path.join (all'incirca intorno alla linea 247)

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

I passaggi precedenti hanno risolto il problema per me.


Ricevo errore di collegamento seguendo i passaggi precedenti LINK: errore LNK2001: simbolo esterno non risolto init__init__ build \ temp.win-amd64-2.7 \ Release_ init_ .lib : errore irreversibile LNK1120: 1 errore esterno non risolto: comando 'C: \\ Utenti \\ ma306477 \\ AppData \\ Local \\ Programmi \\ Common \\ Microsoft \\ Visual C ++ per Python \\ 9.0 \\ VC \\ Bin \\ amd64 \\ link.exe 'non riuscito con stato di uscita 1120
manish Prasad

3

Ho provato molte soluzioni, ma una sola ha funzionato per me, l'installazione di Microsoft Visual Studio 2008 Express C ++.

Ho riscontrato questo problema con un modulo Python 2.7 scritto in C (yEnc, che ha altri problemi con MS VS). Nota che Python 2.7 è realizzato con la versione MS VS 2008, non 2010!

Nonostante sia gratuito, è abbastanza difficile da trovare poiché MS sta promuovendo VS 2010. Tuttavia, i collegamenti molto diretti ufficiali MSDN funzionano ancora: controllare https://stackoverflow.com/a/15319069/2227298 per i collegamenti di download.


Sì, il modo migliore è installare VS2008.
pylover l'

3

Se hai installato mingw

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

funziona, costringendo pip a compilare usando il compilatore mingw invece di quello di Microsoft. Vedi qui https://github.com/pypa/pip/issues/18 per i dettagli (ultimo post).



3

Il modo più semplice per risolverlo nel 2016 è installare Chocolatey e quindi il vcpython27pacchetto. Apri Powershell:

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


2

Ho avuto lo stesso problema e l'ho risolto al momento.

"Google" mi ha detto che devo installare "Compilatore Microsoft Visual C ++ per Python 2.7". Installo non solo lo strumento, ma anche Visual C ++ 2008 Reditributable, ma non ha aiutato. Ho quindi provato a installare Visual C ++ 2008 Express Edition. E il problema è andato!

Prova a installare Visual C ++ 2008 Express Edition!


2

call import setuptoolschiamerà monkey patch distutils per forzare la compatibilità con Visual Studio. La chiamata vcvars32.batmanuale imposterà l'ambiente virtuale e impedirà altri errori comuni generati dal compilatore. Per VS 2017 il file si trova in

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

Ecco lo script di installazione che utilizzo per compilare rapidamente file .pyx in .pyd: (Nota: utilizza il modulo di terze parti 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()

In effetti, l'importazione setuptoolsaiuta, anche nel caso della compilazione cython .
Basj,

potresti spiegarci un po 'più in dettaglio? come chiamare manualmente vcvars32.bat? Sto avendo una compilation cython
June Wang,

2

Utilizzare questo collegamento per scaricare e installare Visual C ++ 2015 Build Tools . Scaricherà visualcppbuildtools_full.exee installerà automaticamente Visual C ++ 14.0 senza installare Visual Studio. Al termine dell'installazione, riprovare a installare pip e non si verificherà nuovamente l'errore.

L'ho testato sulla seguente piattaforma e versione:

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

1

Se stai cercando di installare pyodbc su una finestra di Windows su cui non è installato Visual Studio, un'altra opzione è quella di installare manualmente pyodbc usando la distribuzione binaria.

Ciò è particolarmente utile se non disponi dei privilegi di amministratore sul computer con cui stai lavorando e stai provando a configurare un virtualenv .

passi:

  1. Scarica l'ultimo installer di Windows da qui (pyodbc-XXXwin-Y-py2.7.exe)
  2. Apri l'eseguibile del programma di installazione usando 7-Zip (o WinRAR o altro)
  3. Estrarre pyodbc.pyd e pyodbc-XXX-py2.7.egg-info e posizionarli in [python installation directory or virtualenv]\Lib\site-packages
  4. Non c'è passaggio 4 :)

1

Con Python 3.4, la dipendenza è da Visual Studio 2010. L'installazione di Visual C ++ 2010 Express ha risolto il problema per me.

Ingannarlo usando le installazioni VS 2008 o 2013 che mi è capitato di non aver funzionato.



1

La risposta data da @monkey è una delle giuste, ma è incompleta.

Nel caso in cui desideri utilizzare MinGW , devi selezionare C, C ++ e anche altri strumenti di sviluppo suggeriti durante il processo di installazione di MinGW per ottenere anche "make.exe".

È inoltre necessario che il percorso sia impostato su make.exe in env.

Per completare la sua risposta, ecco i passaggi:

  1. Aggiungi la directory bin di mingw32 alle variabili di ambiente
  2. Aggiungi C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;al PERCORSO
  3. Modifica (crea se non esiste) il distutils.cfgfile che si trova in C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32

Assicurarsi che le variabili di ambiente siano impostate aprendo un nuovo cmd.exe.


I moduli python a 32 bit devono essere compilati con mingw a 32 bit, mentre i moduli python a 64 bit devono essere compilati con mingw a 64 bit. Su Cygwin 64 bit, sono disponibili 2 eseguibili mingw: x86_64-w64-mingw32-gcce i686-w64-mingw32-gcc. Questi eseguibili sono apparentemente uguali a quelli che otterresti normalmente da Mingw (appena compilato in un ambiente Cygwin).
CMCDragonkai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.