2013-05-28 15 views
5

Il tentativo di chiamare cffi.FFI.verify() su Windows produrrà questo errore:Come configurare la libreria python cffi per utilizzare mingw?

distutils.errors.DistutilsPlatformError: Unable to find vcvarsall.bat 

voglio usare MinGW per compilare invece di msvc. Ho provato a fare distutils MinGW usano con la creazione di c: \ Python27 \ Lib \ distutils \ distutils.cfg con

[build] 
compiler = mingw32 

ma questo non sembra influenzare CFFI, ho ancora vcvarsall.bat errore mancante.

Quindi, come posso fare cffi usare gcc/mingw (o in generale altro compilatore C)?

+0

Cosa restituisce 'gcc --version' in un prompt dei comandi? Il percorso di 'MinGW/bin' è impostato correttamente nell'env' PATH'. var. ? –

+0

Sì, lo sono. Posso invocare gcc (GCC) 4.7.2 dallo stesso prompt del cmd che voglio eseguire lo script python. Il percorso di Windows contiene MinGW/bin dir – vanem

risposta

1

Provare a reinstallare cffi, ora che distutils è configurato correttamente. Ad esempio, utilizzando easy_install

easy_install cffi 

O anche ricostruire & installarlo dai sorgenti usando MinGW in questo modo:

cd cffi-src-dir 
python setup.py config --compiler=mingw32 build --compiler=mingw32 install 
cd .. 

Questo farà in modo che CFFI è configurato correttamente per l'uso con MinGW ... immagino ...

+0

bene, usando pip o easy_install non si riesce prima con un errore di distutils che si lamenta di un argomento "-mno-cygwin" errato. Dopo aver rimosso detto argomento del compilatore da distutils/cygwincompiler.py (come da questo problema http://bugs.python.org/issue12641), la compilazione inizia ma scende in altri errori gcc. Mi arrenderò per il momento. – vanem

+0

La compilazione da fonti non aiuta, in quanto setup.py utilizza distutils, quindi si verificano esattamente gli stessi problemi con pip o easy_install. A proposito, inizialmente ho installato cffi usando i binari non ufficiali da qui http://www.lfd.uci.edu/~gohlke/pythonlibs/. Funziona se si utilizza solo ABI, ma quando si tenta di utilizzare l'API (e quindi compilare C) fallisce come descritto nella mia domanda originale – vanem

Problemi correlati