error: no se puede encontrar vcvarsall.bat

852

Traté de instalar el paquete de Python dulwich :

pip install dulwich

Pero recibo un mensaje de error críptico:

error: Unable to find vcvarsall.bat

Lo mismo sucede si intento instalar el paquete manualmente:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat
okada
fuente
66
Para referencia futura, sería bueno ver en qué plataforma usa esto.
viam0Zah
47
Si cree que este es un mensaje de error ridículamente críptico e inútil, vote por el error en bugs.python.org/issue2943
Coronel Panic el
48
Microsoft ahora ofrece una solución: microsoft.com/en-us/download/details.aspx?id=44266
Martijn Pieters
66
@MartijnPieters Intenté descargar e instalar el enlace que proporcionó con wheel y setuptools 7.0 pero no funciona, recibo el mensaje: 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
44
Steve Dower (un tipo del equipo de Python de Microsoft) ha escrito una publicación de blog sobre este tema que vale la pena leer: blogs.msdn.microsoft.com/pythonengineering/2016/04/11/…
Cody Piersall el

Respuestas:

683

Actualización : Los comentarios señalan que las instrucciones aquí pueden ser peligrosas. Considere usar la edición Express de Visual C ++ 2008 o el compilador de Microsoft Visual C ++ especialmente diseñado para Python ( detalles ) y NO usar la respuesta original a continuación. El mensaje de error original significa que la versión requerida de Visual C ++ no está instalada.


Para instalaciones de Windows:

Mientras ejecuta setup.py para la instalación de paquetes, Python 2.7 busca un Visual Studio 2008. instalado. Puede engañar a Python para que use un Visual Studio más nuevo configurando la ruta correcta en VS90COMNTOOLSla variable de entorno antes de llamar setup.py.

Ejecute el siguiente comando según la versión de Visual Studio instalada:

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

ADVERTENCIA: como se indica a continuación, es poco probable que esta respuesta funcione si está intentando compilar módulos de Python.

Vea Building lxml for Python 2.7 en Windows para más detalles.

fmuecke
fuente
21
Lo hizo por mí :(
fmuecke
8
@Gili: Parece que este problema se debe a espacios en la variable, intente ajustarlo entre comillas. Para mí% VS100COMNTOOLS% = "C: \ Archivos de programa (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools"
legends2k
77
Esto no funcionará para muchas cosas, porque Python se basa en VS2008. Eche un vistazo a esta respuesta: stackoverflow.com/questions/6551724/…
shezi
182
¡¡¡ADVERTENCIA!!! Esta es una respuesta INCORRECTA . Usted no debe bajo ninguna circunstancia compilación de extensión de Python C utilizando diferentes (versión) compilador que la utilizada para compilar Python como esos dos (versiones de compiladores) probablemente tendrán bibliotecas de tiempo de ejecución C incompatibles. Vea esta respuesta para más detalles.
Piotr Dobrogost
72
Puede descargar la edición Express de Visual C ++ 2008 Express de go.microsoft.com/?linkid=7729279 , que establecerá la variable de entorno VS90COMNTOOLS durante la instalación y, por lo tanto, compilará con un compilador compatible.
Eric Smith
225

Encontré la solución. Tuve exactamente el mismo problema y error al instalar 'amara'. Tenía instalado mingw32, pero distutils necesitaba ser configurado.

  1. Tengo Python 2.6 que ya estaba instalado.
  2. Instalé mingw32 en C:\programs\mingw\
  3. Agregue el directorio bin de mingw32 a su variable de entorno: agregue c:\programs\MinGW\bin;a la RUTA
  4. Edite (cree si no existe) el archivo distutils.cfg ubicado en C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32
    
  5. Ahora corre easy_install.exe amara.

Asegúrese de establecer el entorno abriendo uno nuevo cmd.exe.

ninMonkey
fuente
45
Esto funciona muy bien para Python2.6, pero por alguna razón no puedo hacer que funcione en Python2.7. Funciona si descargo la fuente de mi paquete y la instalo usando 'python setup.py install --compile = mingw32', pero por alguna razón usando easy_install o pip todavía intenta encontrar vcvarsall.
Jonathan Hartley
2
Finalmente obtuve scikits.image para instalar en Python (x, y) 2.7 agregando C:\msysgit\mingw\mingw32\biny C:\msysgit\mingw\binal RUTA del usuario y reiniciando Spyder antes de pip installvolver a ejecutar
endolith
20
No hay necesidad alguna de reiniciar debido a un cambio de variable de entorno. Abrir un nuevo proceso cmd.exe es suficiente.
Tomalak
11
Todavía no pude arreglar esto. Este es el error: gcc: error: unrecognized command line option '-mno-cygwin' error: Setup script exited with error: command 'gcc' failed with exit status 1despuéseasy_install.exe amara
usuario
55
@user, debes abrir este archivo: C:\Python27\Lib\distutils\cygwincompiler.pyy eliminar todas las ocurrencias de –mno-cygwinél; Esto se debe a que las versiones recientes de GCC han eliminado la –mno-cygwinopción y no debería estar allí.
Zeinab Abbasimazar 05 de
220

Puede instalar la versión compilada desde http://www.lfd.uci.edu/~gohlke/pythonlibs/

VolodymyrB
fuente
15
solo un consejo: puede instalar el paquete desde este sitio en virtualenv ejecutando easy_install binary_installer_built_with_distutils.exevirtualenv, de acuerdo con esta respuesta .
yangzh
14
Todos los desarrolladores de Python Windows deberían saber sobre esto
estudiante de secundaria el
1
También puede wheel convert ....exeinstalar estos instaladores y luego instalarlos con pip cuando lo desee.
Zooba
3
Para ser más precisos, lfd.uci.edu/~gohlke/pythonlibs/#mysql-python y una vez descargado abierto un terminal como administrador y ejecutepython -m pip install <filename>
Arun
Holly madre de Dios, esto es justo en el acto. Funciona como un encanto, TY :)
Amir
162

Si desea compilar con Visual Studio C ++ en lugar de mingw ...

  1. Ejecute python.exepara mostrar con qué versión de VC ++ se compiló (el ejemplo se muestra a continuación).

    Es importante utilizar la versión correspondiente del compilador de Visual C ++ que Python fue compilado con desde distilutils 's get_build_versionpreviene versiones de mezcla ( por la advertencia de Piotr ).

    • El amarillo (arriba) es Python 2.7, compilado con MSC v.1500 (Visual Studio C ++ 2008)
    • El rojo (abajo) es Python 3.4.1, compilado con MSC v.1600 (Visual Studio C ++ 2010)

    Ejemplo de la línea de comando que muestra Python 2.7 compilado con MSC v.1500 y Python 3.4.1 compilado con MSC v.1600

  2. Use la tabla a continuación [1] para hacer coincidir la versión interna de VC ++ con la versión correspondiente de Visual Studio:

    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. Descargue e instale la versión correspondiente de Visual Studio C ++ del paso anterior.
    A continuación se enumeran notas adicionales para versiones específicas de VC ++.

    Notas para Visual Studio C ++ 2008

    Para sólo los compiladores de 32 bits, descargar Visual Studio C ++ 2008 Express Edition .

    Para los compiladores de 64 bits [2] [3] , descargue Windows SDK para Windows 7 y .NET Framework 3.5 SP1 .

    • Desmarque todo excepto Developer Tools >> Visual C++ Compilersahorrar tiempo y espacio en disco al instalar herramientas SDK que de otro modo no necesitaría.

    Notas para Visual Studio C ++ 2010

    Según Microsoft, si instaló Visual Studio 2010 SP1, es posible que haya eliminado los compiladores y las bibliotecas para VC ++.
    Si ese es el caso, descargue la actualización del compilador Visual C ++ 2010 SP1 .

    Notas para Visual Studio C ++ 2015

    Si no necesita el IDE de Visual Studio, descargue las herramientas de compilación de Visual Studio C ++ 2015 .

    Notas para Visual Studio C ++ 2017

    Si no necesita el IDE de Visual Studio, descargue Build Tools para Visual Studio 2017 .

    Sugerencia : Si tiene una instalación de Python de 32 y 64 bits, también puede usar virtualenv para crear entornos de Python separados para que pueda usar uno u otro a la vez sin alterar su ruta para elegir qué versión de Python elegir utilizar.

Según @srodriguex , es posible que pueda omitir la carga manual del archivo por lotes (Pasos 4-6) copiando algunos archivos por lotes en donde Python está buscando siguiendo esta respuesta . Si eso no funciona, aquí están los siguientes pasos que originalmente funcionaron para mí.

  1. Abrir un cmd.exe

  2. Antes de intentar instalar algo que requiera extensiones C, ejecute el siguiente archivo por lotes para cargar el entorno del compilador VC ++ en la sesión (es decir, variables de entorno, la ruta al compilador, etc.).

    Ejecutar:

    • Compiladores de 32 bits:

      Nota : las instalaciones de Windows de 32 bits solo tendrán C:\Program Files\lo esperado

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

    • Compiladores de 64 bits:

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

      Nota : Sí, están los compiladores nativos de 64 bits Program Files (x86). No me preguntes por qué.
      Además, si se pregunta cuál es la diferencia vcvars64.baty, vcvarsx86_amd64.bato más importante, la diferencia entre amd64y x86_amd64, los primeros son para las herramientas de compilación nativas de 64 bits y los segundos son los compiladores cruzados de 64 bits que pueden ejecutarse en una instalación de Windows de 32 bits .

    Actualización:
    si por alguna razón está llegando a error: ... was unexpected at this time.donde ...hay una serie de caracteres, entonces debe verificar que su variable de ruta no tenga caracteres extraños como citas extra o caracteres extraviados. El archivo por lotes no podrá actualizar su ruta de sesión si no puede tener sentido en primer lugar.

  3. Si eso salió bien, debería recibir uno de los siguientes mensajes según la versión de VC ++ y el comando que ejecutó:

    Para las herramientas de compilación de 32 bits:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    Para las herramientas del compilador de 64 bits:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. Ahora , ejecute la configuración a través de python setup.py installopip install pkg-name

  5. Espere y cruce los dedos para que los planetas estén alineados correctamente para que VC ++ coopere.

Josh Bowden
fuente
No puedo recomendar lo suficiente que no pasar por el dolor de pasar directamente a 64 bits. Es solo cuestión de tiempo antes de que necesite más de 4 gb de espacio de direcciones. Hablo por experiencia dolorosa después de haber pasado 32 bits porque era mucho más fácil, luego tener que desinstalar todo, incluidas las dependencias y pasar a 64 bits. Casi todo un fin de semana.
Thomas Browne
1
Por otra parte, olvido cuántas personas van a tener que usar Python para tareas mucho más grandes como esa. Y @ThomasBrowne, estoy seguro de que fue una experiencia dolorosa e innecesaria. Lo estoy investigando y espero poder encontrar algo. El problema principal fue que Visual Studio C ++ 2008 Express no viene con un compilador de 64 bits, pero estoy seguro de que está por aquí en alguna parte.
Josh Bowden
Simplemente lo actualicé con más información sobre cómo obtener también los compiladores de 64 bits si los necesita.
Josh Bowden
En mi caso, sigo el paso 1 anterior y salté el resto después de esta respuesta . Ahora puedo instalar paquetes evitando la molestia de ejecutar .bat.
srodriguex
@srodriguex, en ese caso, parece que Python está asumiendo que las herramientas del compilador de 64 bits se cargan en la RUTA usando lo que está buscando ...\VC\bin\vcvarsamd64.baty ...\VC\bin\amd64\vcvarsamd64.bat.
Josh Bowden
73

¿Que esta pasando? Los módulos de Python pueden estar escritos en parte en C o C ++ (generalmente para velocidad). Si intenta instalar dicho paquete con Pip (o setup.py), tiene que compilar ese C / C ++ desde la fuente. Fuera de la caja, Pip asumirá descaradamente el compilador que instaló Microsoft Visual C ++. Si no lo tiene, verá este mensaje de error críptico "Error: no se puede encontrar vcvarsall.bat".

La solución prescrita es instalar un compilador C / C ++, ya sea Microsoft Visual C ++ o MinGW (un proyecto de código abierto). Sin embargo, instalar y configurar cualquiera es prohibitivamente difícil. (Edición 2014: Microsoft ha publicado un compilador especial de C ++ para Python 2.7)

La solución más fácil es usar los instaladores de Windows (.msi) de Christoph Gohlke para los paquetes populares de Python. Construye instaladores para Python 2.xy 3.x, 32 bits y 64 bits. Puede descargarlos desde http://www.lfd.uci.edu/~gohlke/pythonlibs/


Si también piensa que "Error: no se puede encontrar vcvarsall.bat" es un mensaje ridículamente críptico e inútil, entonces comente el error en http://bugs.python.org/issue2943 para reemplazarlo por otro más útil y útil para el usuario. Mensaje amistoso.

A modo de comparación, Ruby se envía con un gestor de paquetes Gem y ofrece un compilador C / C ++ casi oficial, DevKit. Si intenta instalar un paquete sin él, verá este mensaje útil, útil y útil:

Actualice su RUTA para incluir herramientas de compilación o descargue DevKit desde http://rubyinstaller.org/downloads y siga las instrucciones en http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Puede leer una queja más larga sobre el empaquetado de Python en https://stackoverflow.com/a/13445719/284795

Coronel Panic
fuente
¿Cómo puedo usar pip para instalar este ejecutable precompilado en mi entorno virtual?
Shailen
@shailenTJ buena pregunta. Nunca lo he hecho, pero prueba stackoverflow.com/a/5442340/284795
Coronel Panic el
Esta fue la mejor / más fácil solución que conozco. Gracias.
user1477388
That Edit 2014 es la mejor respuesta para mí. Instrucciones fáciles de perder: asegúrese de actualizar setuptoolsa la versión 6.0o superior con pip install setuptools --upgrade.
orlade
64

Deberá instalar un compilador de Microsoft, compatible con el compilador utilizado para construir Python. Esto significa que necesita Visual C ++ 2008 (o más reciente, con algunos ajustes ).

Microsoft ahora proporciona un compilador y encabezados agrupados solo para poder compilar extensiones de Python, en la URL memorable:

Compilador de Microsoft Visual C ++ para Python 2.7

http://aka.ms/vcpython27

Este es un paquete relativamente pequeño; 85 MB para descargar, instalable sin privilegios de administrador, no se requiere reiniciar. El nombre es un poco engañoso, el compilador funcionará para cualquier versión de Python compilada originalmente con Visual C ++ 2008, no solo Python 2.7.

Si inicia una solicitud interactiva de Python o imprime sys.version, busque la MSCcadena de versión; si es MSC v.1500así, puedes usar esta herramienta.

Desde el anuncio original hasta la lista distutils :

Microsoft ha lanzado un paquete compilador para Python 2.7 para facilitar a las personas la creación y distribución de sus módulos de extensión C en Windows. El compilador de Microsoft Visual C ++ para Python 2.7 (también conocido como VC9) está disponible en: http://aka.ms/vcpython27

Este paquete contiene todas las herramientas y encabezados necesarios para construir módulos de extensión C para Python 2.7 de 32 bits y 64 bits (tenga en cuenta que algunos módulos de extensión requieren dependencias de terceros como OpenSSL o libxml2 que no están incluidos). También se admiten otras versiones de Python creadas con Visual C ++ 2008, por lo que "Python 2.7" es solo publicidad: funcionará bien con 2.6 y 3.2.

Tenga en cuenta que necesita tener setuptools6.0 o más reciente instalado (enumerado en los requisitos del sistema en la página de descarga). El proyecto que está instalando debe usar setuptools.setup(), no, distutilso la detección automática no funcionará.

Microsoft ha declarado que desean mantener estable la URL, de modo que las secuencias de comandos automatizadas puedan hacer referencia a ella fácilmente.

Martijn Pieters
fuente
2
Según mi otro comentario, puede asegurarse de que setuptoolsesté actualizado pip install setuptools --upgrade.
orlade
Investigué por qué la lógica relevante está en setuptoolslugar de distutils, después de todo, la creación de módulos es la funcionalidad principal, y tiene el código relevante, pero una versión anterior. Parece que los distutilsmantenedores simplemente dejaron de admitir todas las variaciones posibles de MSSDK y volcaron este trabajo en sus setuptoolscolegas que estaban más ansiosos.
ivan_pozdeev
1
@ivan_pozdeev: setuptoolstambién puede lanzar mucho más a menudo que distutils, incluido en el ciclo de lanzamiento de Python. Y, de distitutilshecho, ha entrado en una especie de modo de mantenimiento, con trabajos en nuevos sistemas programados para reemplazarlo. Ese trabajo se estancó en su lugar.
Martijn Pieters
cython usa distutils, debe importar las herramientas de configuración que los parches de mono distutils: github.com/cython/cython/wiki/CythonExtensionsOnWindows
denfromufa
54

Acabo de tener el mismo problema, así que contaré mi historia aquí con la esperanza de que ayude a alguien más con los mismos problemas y les ahorre el par de horas que acabo de pasar:

Tengo mingw (g ++ (GCC) 4.6.1) y python 2.7.3 en un cuadro de Windows 7 y estoy tratando de instalar PyCrypto.

Todo comenzó con este error al ejecutar setup.py install:

error: Unable to find vcvarsall.bat

Se resuelve fácilmente después de buscar en Google el error especificando mingw como el compilador de elección:

setup.py install build --compiler=mingw32

El problema es que luego recibí un error diferente:

configure: error: cannot run C compiled programs.

Resulta que mi antivirus estaba bloqueando la ejecución de un .exe recién compilado. Acabo de deshabilitar el "escudo residente" del antivirus y pasé al siguiente error:

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

Esto lo resolvió: "Instale una versión un poco más antigua de MinGW o edite distutils \ cygwinccompiler.py en su directorio de Python para eliminar todas las instancias de -mno-cygwin". (desde aquí )

Ahora, finalmente puedo comenzar a trabajar.

fpessoa
fuente
77
También necesitará una versión compatible con MinGW de la biblioteca Python. Ver eli.thegreenplace.net/2008/06/28/… para más información
Gili
Giros y vueltas: D
Xilpex
23

Parece que está buscando compiladores de VC, por lo que podría intentar mencionar el tipo de compilador con -c mingw32, ya que tiene msys

python setup.py install -c mingw32

fuente
16
Solo para aclarar, el comando que funciona es: python setup.py build --compiler=mingw32seguido porpython setup.py install
Emil Stenström
Después de ejecutar python setup.py build --compiler = mingw32 recibo ImportError: ningún módulo llamado Cython.Distutils mientras Cython está instalado en Anaconda. ¿Alguna sugerencia?
Serendipity
20

Tengo Python 2.73 y Windows 7. La solución que funcionó para mí fue:

  1. Se agregó el directorio bin de mingw32 a la variable de entorno: agregue RUTA conC:\programs\mingw\bin;
  2. Distutils.cfg creado ubicado en que C:\Python27\Lib\distutils\distutils.cfgcontiene:

    [build]
    compiler=mingw32

Para tratar con MinGW que ya no reconoce la bandera -mno-cygwin, elimine la bandera en la línea C: \ Python27 \ Lib \ distutils \ cygwincompiler.py 322 a 326, por lo que se ve así:

  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
fuente
15

Busque en el setup.pyarchivo del paquete que está intentando instalar. Si es un paquete anterior, puede estar importando en distutils.core.setup()lugar de setuptools.setup().

Me encontré con esto (en 2015) con una combinación de estos factores:

  1. El compilador de Microsoft Visual C ++ para Python 2.7 de http://aka.ms/vcpython27

  2. Un paquete anterior que usa distutils.core.setup()

  3. Intentando hacer en python setup.py buildlugar de usar pip.

Si usa una versión reciente de pip, forzará (monkeypatch) al paquete a usar herramientas de configuración, incluso si setup.pyrequiere distutils. Sin embargo, si no está utilizando pip y, en cambio, solo lo está haciendo python setup.py build, se utilizará el proceso de compilación distutils.core.setup(), que no conoce la ubicación de instalación del compilador.


Solución

Paso 1: abra el símbolo del sistema de Visual C ++ 2008 apropiado

Abra el menú Inicio o la pantalla de Inicio y busque "Símbolo del sistema de Visual C ++ 2008 de 32 bits" (si su Python es de 32 bits) o "Símbolo del sistema de Visual C ++ 2008 de 64 bits" (si su Python es de 64 bits) . Ejecutarlo. El símbolo del sistema debe decir Visual C ++ 2008 ... en la barra de título.

Paso 2: establecer variables de entorno

Establezca estas variables de entorno en el símbolo del sistema que acaba de abrir.

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

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

Paso 3: compila e instala

cdal paquete que desea compilar y ejecutar python setup.py build, entonces python setup.py install. Si desea instalar en un virtualenv, actívelo antes de compilar.

Cristiano largo
fuente
también puede compilar su paquete usando <code> pip </code> en lugar de <code> python setup.py build </code>
aronadaal
9

Quizás alguien pueda estar interesado, lo siguiente funcionó para mí para el paquete py2exe. (Tengo Windows 7 de 64 bits y Python 2.7 portátil, Visual Studio 2005 Express con Windows SDK para Windows 7 y .NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

entonces:

python.exe setup.py install
Stefano Fenu
fuente
No, tienes razón, no estoy seguro de lo que pasó, borraré el comentario original.
Dave Challis
1
¡¡Muy útil!! En mi caso, hice 'set VS90COMNTOOLS =% VS110COMNTOOLS%'.
jrvidotti
@Exzile: sí, escribe estos comandos en la misma sesión del símbolo del sistema
Stefano Fenu
¡¡¡NO HAGAS ESTO!!! Vea esta respuesta para más detalles.
Anónimo
8

Pasé casi 2 días descubriendo cómo solucionar este problema en mi versión de 64 bits de Python 3.4: Python 3.4.3 (v3.4.3: 9b73f1c3e601, 24 de febrero de 2015, 22:44:40) [MSC v.1600 64 bit (AMD64 )] en win32

Solución 1, difícil: (antes de leer esto, lea primero la Solución 2 a continuación) Finalmente, esto es lo que me ayudó:

  1. instalar Visual C ++ 2010 Express
  2. instale Microsoft Windows SDK v7.1 para Windows 7
  3. crear el archivo manualmente vcvars64.baten C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64que contiene CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64u otra ruta dependiendo de donde ha instalado el suyo
  4. (esto parece ser opcional) instale Microsoft Visual Studio 2010 Service Pack 1 junto con la actualización del compilador de Microsoft Visual C ++ 2010 Service Pack 1 para Windows SDK 7.1
  5. después de eso intenté pip install numpypero recibí el siguiente error:

    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

    He cambiado mfinfoa Noneen C:\Python34\Lib\distutils\msvc9compiler.pypor este https://stackoverflow.com/a/23099820/4383472

  6. Finalmente, después del pip install numpycomando, mi antivirus avast intentó interferir en el proceso de instalación, pero lo desactivé rápidamente

Tomó mucho tiempo, varios minutos para que compilara numpy, incluso pensé que había un error, pero finalmente todo estuvo bien.

Solución 2, fácil: (Sé que este enfoque ya se ha mencionado en una respuesta muy votada , pero permítanme repetirlo ya que realmente es más fácil) Después de pasar por todo este trabajo, entendí que la mejor manera para mí es simplemente usar binarios precompilados de http://www.lfd.uci.edu/~gohlke/pythonlibs/ en el futuro. Hay muy pocas posibilidades de que alguna vez necesite algún paquete (o una versión de un paquete) que este sitio no contiene. El proceso de instalación también es mucho más rápido de esta manera. Por ejemplo, para instalar numpy:

  1. descargue numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(si tiene Python 3.4 de 64 bits) de ese sitio
  2. en el símbolo del sistema o PowerShell, instálelo con pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(o ruta completa al archivo, dependiendo de cómo se abra el símbolo del sistema)
Malo
fuente
numpy ‑ 1.9.2 + mkl ‑ cp34 ‑ none ‑ win_amd64.whl - no puedo encontrar este archivo en el enlace de arriba.
Amresh Giri
7

Quería ejecutar pysph en Windows 10 en Python 2.7 y obtuve vcvarsall.bat no se encontró (de distutils)

Mi solución fue la siguiente:

Instale Microsoft Visual C ++ para Python 2.7 (como sugirió @Michael)

En Windows 10 se instaló en (mi nombre de usuario es Andreas):

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

Establezca la variable de entorno VS90COMNTOOLS en la ruta de instalación de Visual C ++ para Python 2.7 (consulte la ruta anterior).

Si aún no funciona, modifíquelo en el módulo

C:/Python27/lib/distutils

el archivo msvc9compiler.py . Busque en él la función find_vcvarsall y realice la siguiente modificación.

Reemplace la línea:

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

con

productdir = os.path.join(toolsdir)

Aquí es donde reside vcvarsall.bat en mi caso (verifique dónde está vcvarsall.bat en su instalación).

Chiefenne
fuente
Curiosamente %userprofile%\Appdata\Local\Programs\Commonestá vacío para mí.
Bryce Guinta
¿Incluso después de instalar Microsoft Visual C ++ para Python 2.7?
chiefenne
7

Encontré este problema cuando intenté instalar la biblioteca numpy en mi python 3.5. La solución es instalar VS2015. Tuve VS2008, 2012, 2013, ninguno de los cuales es compatible con Python 3.5. Aparentemente, la versión más nueva de python depende de las versiones más nuevas de VS.

También asegúrese de que las herramientas comunes de C ++ estén instaladas con Visual Studio.

ingrese la descripción de la imagen aquí

DG
fuente
6

Intenté todas las respuestas anteriores y descubrí que no funcionaban, quizás estaba usando Windows 8 y había instalado Visual Studio 2012. En este caso, esto es lo que debe hacer.

El vcvarsall.batarchivo se encuentra aquí: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

Simplemente seleccione el archivo y cópielo.

Luego vaya a este directorio: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

y pegue el archivo. Y luego, todo debería estar bien.

Juegos Brainiac
fuente
No, todo no está bien. Seguí tu respuesta, pero aún recibo el mismo error.
Stupid_Intern
6

Puede descargar la edición Express de Visual C ++ 2008 Express de http://go.microsoft.com/?linkid=7729279 , que configurará la variable de entorno VS90COMNTOOLS durante la instalación y, por lo tanto, compilará con un compilador compatible.

Como @PiotrDobrogost mencionó en un comentario, su respuesta a esta otra pregunta entra en detalles sobre por qué Visual C ++ 2008 es lo correcto para construir, pero esto puede cambiar a medida que la compilación de Windows de Python se mueva a versiones más nuevas de Visual Studio: Building lxml para Python 2.7 en Windows

Eric Smith
fuente
También asegúrese de que no haya otras versiones instaladas. Tuve un momento difícil con esto. Reformateé la computadora e instalé solo esta versión. Desde que eliminé varias versiones de VS me hubiera llevado el mismo tiempo.
jmunsch
6

Tuve este problema al usar Python 3.4.1 en Windows 7 x64 , y desafortunadamente los paquetes que necesitaba no tenían exe o ruedas adecuadas que pudiera usar. Este sistema requiere algunas 'soluciones', que se detallan a continuación (y TLDR en la parte inferior ).

Utilizando la información en la respuesta de Jaxrtech anterior , determiné que necesitaba Visual Studio C ++ 2010 (sys.version return MSC v.1600), así que instalé Visual C ++ 2010 Express desde el enlace en su respuesta, que es http://go.microsoft .com /? linkid = 9709949 . Instalé todo con actualizaciones, pero como puedes leer a continuación, esto fue un error. Solo se debe instalar la versión original de Express en este momento (sin actualizar nada).

vcvarsall.bat ahora estaba presente, pero había un nuevo error al instalar el paquete, query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']. Hay otras preguntas de stackoverflow con este error, como Errores al construir / instalar el módulo C para Python 2.7

A partir de esa respuesta, determiné que 2010 Express solo instala compiladores de 32 bits. Para obtener compiladores de 64 bits (y otros), debe instalar Windows 7.1 SDK. Ver http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

Sin embargo, esto no se instalaría para mí y el instalador devolvió el error installation failed with return code 5100. Encontré la solución en el siguiente enlace: http://support.microsoft.com/kb/2717426 . En resumen, si se instalan versiones más nuevas de x86 y x64 de Microsoft Visual C ++ 2010 Redistributable, entran en conflicto con las del instalador de SDK y primero deben desinstalarse.

Luego se instaló el SDK, pero noté que vcvars64.bat todavía no existía C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\binni sus subcarpetas. vcvarsall.bat ejecuta el archivo por lotes vcvars64, por lo que sin él, el paquete python aún no se instalaría (olvidé el error que se mostró en este momento).

Luego encontré algunas instrucciones aquí: http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1 Siguiendo las instrucciones, ya instalé Express y 7.1 SDK, instalé SDK 7.1 SP1, e hice el falta el arreglo del archivo de encabezado. Luego creé manualmente vcvars64.bat con el contenido CALL setenv /x64. Pegaré todas esas instrucciones aquí, para que no se pierdan.

El paso 1 es descargar Visual Studio Express 2010.

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express es un buen lugar para comenzar. Descargue el instalador y ejecútelo (vc_web.exe). No necesita la descarga adicional de SQL 2008.

También necesitará el SDK de Windows (actualmente 7.1) para los compiladores de 64 bits, a menos que quiera hacer compilaciones de solo 32 bits, que no son totalmente compatibles ...

http://www.microsoft.com/en-us/download/details.aspx?id=8279 es un buen punto de partida para descargar esto: ¡querrá ejecutar winsdk_web.exe cuando lo descargue!

La instalación predeterminada aquí está bien.

Finalmente, descargue e instale la actualización de Windows SDK 7.1 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=4422

Y, para corregir el archivo de encabezado faltante, VS2010 SP1. http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

Y, maldita sea, arregle el archivo por lotes que falta para VS2010 Express. Esto se está volviendo completamente absurdo.

En C: \ Archivos de programa (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64, cree "vcvars64.bat" con lo siguiente (deberá ejecutarlo como administrador):

LLAMADA setenv / x64

Mi paquete de Python todavía no se instaló (no puedo recordar el error). Luego encontré algunas instrucciones (copiadas a continuación) para usar el símbolo del sistema especial SDK 7.1, consulte: https://mail.python.org/pipermail/distutils-sig/2012-February/018300.html

No importa esta pregunta. Alguien aquí notó este elemento en el menú: Inicio-> Todos los programas-> Microsoft Windows SDK v7.1 -> Símbolo del sistema de Windows SDK 7.1

Esto ejecuta un trabajo por lotes que parece configurar un entorno de trabajo para el compilador. Desde ese indicador, puede escribir "setup.py build" o "setup.py install".

Abrí el símbolo del sistema de Windows SDK 7.1 según las instrucciones y lo usé para ejecutar easy_install en el paquete de Python. Y al fin, ¡éxito!


TLDR ;

  1. Instale Visual Studio Express 2010 (preferiblemente sin redistribuibles actualizados o servidor SQL).
  2. Instalar Windows 7.1 SDK
  3. Actualización de Instal SDK 7.1 SP1 y corrección del archivo de encabezado VS2010 SP1 (este paso puede no ser necesario).
  4. Crear manualmente C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batcon contenidoCALL setenv /x64
  5. Inicio-> Todos los programas-> Microsoft Windows SDK v7.1 -> Símbolo del sistema de Windows SDK 7.1 para abrir el símbolo del sistema especial x64, que luego se puede usar con python / easy_install / pip / etc (incluidos los de virtual_envs).
neRok
fuente
4

Los pasos a continuación solucionaron este problema para mí, estaba tratando de crear la configuración con la extensión cython.

  1. Instale el compilador de Microsoft Visual C ++ para Python 2.7
  2. La ubicación de instalación predeterminada sería @ C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ for Python. Esto podría solucionar el problema, pruebe una vez antes de continuar.
  3. Si falla, verifique en qué lugar de VC ++ se encuentra el archivo vcvarsall.bat de python
  4. Abra el archivo msvc9compiler.py del paquete distutils en el bloc de notas.
  5. En mi caja, esta fue la función @ C: \ Anaconda2 \ Lib \ distutils \ msvc9compiler.py find_vcvarsall en este archivo, determine la versión de VC imprimiendo el argumento de la versión. Para Python 2.7 es probable que sea 9.0
  6. Ahora cree una variable de entorno VS90COMNTOOLS, apuntando a C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ para Python \ 9.0 \ VC \ bin
  7. Por alguna razón, distutils espera que el archivo vcvarsall.bat esté dentro del directorio VC, pero VC ++ para las herramientas de Python lo tiene en la raíz de 9.0. Para solucionar esto, elimine "VC" del path.join (aproximadamente alrededor de la línea 247)

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

Los pasos anteriores me solucionaron el problema.

Riyas Deen
fuente
Recibo un error de enlace al seguir los pasos anteriores ENLACE: error LNK2001: símbolo externo no resuelto init__init__ build \ temp.win-amd64-2.7 \ Release_ init_ .lib: error fatal LNK1120: 1 error externo no resuelto: comando 'C: \\ Usuarios \\ ma306477 \\ AppData \\ Local \\ Programas \\ Común \\ Microsoft \\ Visual C ++ para Python \\ 9.0 \\ VC \\ Bin \\ amd64 \\ link.exe 'falló con el estado de salida 1120
manish Prasad
3

Probé muchas soluciones, pero solo una funcionó para mí, la instalación de Microsoft Visual Studio 2008 Express C ++.

Tengo este problema con un módulo Python 2.7 escrito en C (yEnc, que tiene otros problemas con MS VS). ¡Tenga en cuenta que Python 2.7 está construido con la versión MS VS 2008, no 2010!

A pesar de que es gratis, es bastante difícil de encontrar ya que MS está promocionando VS 2010. Aún así, los enlaces muy directos oficiales de MSDN siguen funcionando: consulte https://stackoverflow.com/a/15319069/2227298 para ver los enlaces de descarga.

KrisWebDev
fuente
Sí, la mejor manera es instalar VS2008.
pylover
3

Si tienes instalado mingw

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

funciona, forzando a pip a construir usando el compilador mingw en lugar del de Microsoft. Vea aquí https://github.com/pypa/pip/issues/18 para más detalles (última publicación).

Nicolas78
fuente
3

¿El compilador de Microsoft Visual C ++ para Python 2.7 en http://www.microsoft.com/en-us/download/details.aspx?id=44266 no es una solución?

Miguel
fuente
Trabajó para mi. Mensaje de error al final de la instalación de pip pysftp tenía esta soluciónerror: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
Bob Stein
3

La forma más fácil de resolver esto en 2016 es instalar Chocolatey y luego el vcpython27paquete. Powershell abierto:

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

Tengo el mismo problema y lo he resuelto en este momento.

"Google" me dijo que necesitaba instalar el "Compilador Microsoft Visual C ++ para Python 2.7". Instalé no solo la herramienta, sino también Visual C ++ 2008 Reditributable, pero no ayudó. Luego intenté instalar Visual C ++ 2008 Express Edition. ¡Y el problema se ha ido!

¡Solo intente instalar Visual C ++ 2008 Express Edition!

Vova
fuente
2

llamar import setuptoolsa mono parche distutils para forzar la compatibilidad con Visual Studio. Llamar vcvars32.batmanualmente configurará el entorno virtual y evitará otros errores comunes que arrojará el compilador. Para VS 2017, el archivo se encuentra en

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

Aquí está el script de configuración que uso para compilar rápidamente archivos .pyx a .pyd: (Nota: utiliza el módulo de terceros 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()
usuario2682863
fuente
De hecho, la importación setuptoolsayuda, también en el caso de la compilación de cython .
Basj
¿podrías explicar un poco más en detalle? ¿Cómo llamar a vcvars32.bat manualmente? Tengo una compilación de cython
June Wang
2

Use este enlace para descargar e instalar Visual C ++ 2015 Build Tools . Automáticamente descargará visualcppbuildtools_full.exee instalará Visual C ++ 14.0 sin instalar Visual Studio. Una vez completada la instalación, vuelva a intentar la instalación de pip y no volverá a recibir el error.

Lo he probado en las siguientes plataformas y versiones:

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
fuente
1

Si está buscando instalar pyodbc en un cuadro de Windows que no tiene instalado Visual Studio, otra opción es instalar manualmente pyodbc utilizando la distribución binaria.

Esto es particularmente útil si no tiene privilegios de administrador en la máquina con la que está trabajando y está tratando de configurar un virtualenv .

Pasos:

  1. Descargue el último instalador de Windows desde aquí (pyodbc-XXXwin-Y-py2.7.exe)
  2. Abra el ejecutable del instalador usando 7-Zip (o WinRAR o lo que sea)
  3. Extraiga pyodbc.pyd y pyodbc-XXX-py2.7.egg-info y colóquelos en [python installation directory or virtualenv]\Lib\site-packages
  4. No hay paso 4 :)
Danés B
fuente
1

Con Python 3.4, la dependencia está en Visual Studio 2010. La instalación de Visual C ++ 2010 Express solucionó el problema para mí.

Engañarlo para que use las instalaciones VS 2008 o 2013 que resultó que no funcionó.

gmjonker
fuente
1

Puede usar easy_install en lugar de pip, me funciona.

Abdul Majeed
fuente
Mismo errorerror: Setup script exited with error: Unable to find vcvarsall.bat
Stephan Schielke
1

La respuesta dada por @monkey es una de las correctas, pero está incompleta.

En caso de que desee utilizar MinGW , debe seleccionar C, C ++ y también otras herramientas de desarrollo sugeridas durante el proceso de instalación de MinGW para obtener también "make.exe".

También debe tener la ruta establecida en make.exe en el entorno.

Para completar su respuesta, estos son los pasos:

  1. Agregue el directorio bin de mingw32 a sus variables de entorno
  2. Anexar C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;a la RUTA
  3. Edite (cree si no existe) el distutils.cfgarchivo ubicado en C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32

Asegúrese de establecer las variables de entorno abriendo un nuevo cmd.exe.

Olivier N
fuente
Los módulos python de 32 bits deben compilarse con mingw de 32 bits, mientras que los módulos python de 64 bits deben compilarse con mingw de 64 bits. En Cygwin 64 bit, hay 2 ejecutables mingw disponibles: x86_64-w64-mingw32-gccy i686-w64-mingw32-gcc. Estos ejecutables son aparentemente los mismos que obtendría de Mingw normalmente (solo compilados dentro de un entorno Cygwin).
CMCDragonkai