erro: Não foi possível encontrar vcvarsall.bat

851

Eu tentei instalar o pacote Python dulwich :

pip install dulwich

Mas recebo uma mensagem de erro enigmática:

error: Unable to find vcvarsall.bat

O mesmo acontece se eu tentar instalar o pacote manualmente:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat
okada
fonte
6
Para referência futura, seria bom ver em qual plataforma você usa isso.
precisa saber é o seguinte
47
Se você acha que essa é uma mensagem de erro ridiculamente críptica e inútil, vote no bug em bugs.python.org/issue2943
Coronel Panic
48
Microsoft agora fornece uma solução: microsoft.com/en-us/download/details.aspx?id=44266
Martijn Pieters
6
@MartijnPieters Eu tentei baixar e instalar o link fornecido com roda e setuptools 7.0, mas ele não funciona eu recebo a mensagem: 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 (a cara na equipe Python da Microsoft) escreveu um post sobre isso vale a pena ler tópico: blogs.msdn.microsoft.com/pythonengineering/2016/04/11/...
Cody Piersall

Respostas:

683

Atualização : os comentários apontam que as instruções aqui podem ser perigosas. Considere usar a edição do Visual C ++ 2008 Express ou o Microsoft Visual C ++ Compiler para Python ( detalhes ) e NÃO usar a resposta original abaixo. Mensagem de erro original significa que a versão necessária do Visual C ++ não está instalada.


Para instalações do Windows:

Ao executar o setup.py para instalações de pacotes, o Python 2.7 procura um Visual Studio 2008 instalado. Você pode enganar o Python a usar um Visual Studio mais novo, definindo o caminho correto na VS90COMNTOOLSvariável de ambiente antes de chamar setup.py.

Execute o seguinte comando com base na versão do 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%

AVISO: Como observado abaixo, é improvável que esta resposta funcione se você estiver tentando compilar módulos python.

Consulte Criando lxml para Python 2.7 no Windows para obter detalhes.

fmuecke
fonte
21
Ele fez por mim :(
fmuecke
8
@ Gili: Parece que esse problema é devido a espaços na variável, tente envolvê-lo entre aspas. Para mim% VS100COMNTOOLS% = "C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools"
legends2k
7
Isso não funcionará para muitas coisas, porque o Python depende do VS2008. Dê uma olhada nesta resposta: stackoverflow.com/questions/6551724/…
shezi
182
ATENÇÃO!!! Esta é a resposta errada . Em nenhuma circunstância você deve compilar a extensão Python C usando um compilador (versão do) diferente daquele usado para compilar o próprio Python, pois esses dois (versões do) compilador provavelmente terão bibliotecas de tempo de execução C incompatíveis. Veja esta resposta para mais detalhes.
Piotr Dobrogost
72
Você pode baixar o Visual C ++ 2008 Express Edition gratuito em go.microsoft.com/?linkid=7729279 , que definirá a variável de ambiente VS90COMNTOOLS durante a instalação e, portanto, criará um compilador compatível.
Eric Smith
225

Eu encontrei a solução. Eu tive exatamente o mesmo problema e erro ao instalar o 'amara'. Eu tinha o mingw32 instalado, mas os distutils precisavam ser configurados.

  1. Eu tenho o Python 2.6 que já foi instalado.
  2. Eu instalei o mingw32 para C:\programs\mingw\
  3. Adicione o diretório bin do mingw32 à sua variável de ambiente: anexe c:\programs\MinGW\bin;ao PATH
  4. Edite (crie, se não existir) o arquivo distutils.cfg localizado em C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32
  5. Agora corra easy_install.exe amara.

Verifique se o ambiente está definido abrindo um novo cmd.exe.

ninMonkey
fonte
45
Isso funciona muito bem para o Python2.6, mas por algum motivo não consigo fazê-lo funcionar no Python2.7. Funciona se eu estiver baixando a fonte do meu pacote e instalando usando 'python setup.py install --compile = mingw32', mas por algum motivo, usando o easy_install ou o pip ainda tenta encontrar o vcvarsall.
11138 Jonathan Hartley
2
Eu finalmente consegui instalar o scikits.image no Python (x, y) 2.7 adicionando C:\msysgit\mingw\mingw32\bine C:\msysgit\mingw\binao usuário PATH e reiniciando o Spyder antes de executar pip installnovamente
endolith
20
Nunca é necessário reiniciar devido a uma alteração na variável de ambiente. Abrir um novo processo cmd.exe é suficiente.
amigos estão
11
Eu ainda não consegui consertar isso. Este é o erro: gcc: error: unrecognized command line option '-mno-cygwin' error: Setup script exited with error: command 'gcc' failed with exit status 1apóseasy_install.exe amara
usuário
5
@ usuário, você deve abrir este arquivo: C:\Python27\Lib\distutils\cygwincompiler.pye remover todas as ocorrências –mno-cygwindele; isso ocorre porque as versões recentes do GCC removeram a –mno-cygwinopção e ela não deveria estar lá.
Zeinab Abbasimazar
220

Você pode instalar a versão compilada em http://www.lfd.uci.edu/~gohlke/pythonlibs/

VolodymyrB
fonte
15
apenas uma dica: você pode instalar o pacote deste site no virtualenv executando easy_install binary_installer_built_with_distutils.exeem virtualenv, de acordo com esta resposta .
yangzh
14
Todo desenvolvedor de Python para Windows deve saber sobre isso
Ensino médio
1
Você também pode wheel convert ....exeinstalar esses instaladores e instalá-los com o pip sempre que quiser.
Zooba 29/09
3
Para ser mais preciso, lfd.uci.edu/~gohlke/pythonlibs/#mysql-python e uma vez baixado aberto um terminal como administrador e executarpython -m pip install <filename>
arun
Holly, mãe de Deus, isso está certo no local. Funciona como um encanto, TY :)
Amir
162

Se você deseja compilar com o Visual Studio C ++ em vez de ...

  1. Execute python.exepara exibir com qual versão do VC ++ foi compilada (exemplo mostrado abaixo).

    É importante utilizar a versão correspondente de compilador o Visual C ++ que Python foi compilada com desde distilutils 's get_build_versionimpede a mistura versões ( por aviso de Pedro ).

    • O amarelo (em cima) é o Python 2.7, compilado com o MSC v.1500 (Visual Studio C ++ 2008)
    • Vermelho (abaixo) é o Python 3.4.1, compilado com o MSC v.1600 (Visual Studio C ++ 2010)

    Exemplo da linha de comando mostrando o Python 2.7 compilado com o MSC v.1500 e o Python 3.4.1 compilado com o MSC v.1600

  2. Use a tabela abaixo [1] para corresponder a versão interna do VC ++ com a versão correspondente do 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. Baixe e instale a versão correspondente do Visual Studio C ++ da etapa anterior.
    Notas adicionais para versões específicas do VC ++ estão listadas abaixo.

    Notas para o Visual Studio C ++ 2008

    Por apenas os compiladores de 32 bits, baixe Visual Studio C ++ 2008 Express Edition .

    Para os compiladores de 64 bits [2] [3] , baixe o Windows SDK para Windows 7 e .NET Framework 3.5 SP1 .

    • Desmarque tudo, exceto Developer Tools >> Visual C++ Compilerspara economizar tempo e espaço em disco ao instalar as ferramentas do SDK que você não precisa.

    Notas para o Visual Studio C ++ 2010

    De acordo com a Microsoft, se você instalou o Visual Studio 2010 SP1, ele poderá ter removido os compiladores e as bibliotecas do VC ++.
    Se for esse o caso, baixe a Atualização do compilador do Visual C ++ 2010 SP1 .

    Notas para o Visual Studio C ++ 2015

    Se você não precisar do IDE do Visual Studio, baixe as Ferramentas de Compilação do Visual Studio C ++ 2015 .

    Notas para o Visual Studio C ++ 2017

    Se você não precisar do IDE do Visual Studio, faça o download das Ferramentas de Construção para o Visual Studio 2017 .

    Sugestão : Se você possui uma instalação Python de 32 e 64 bits, convém usar o virtualenv para criar ambientes Python separados, para que você possa usar um ou outro por vez sem mexer no caminho para escolher qual versão do Python deve ser usada. usar.

De acordo com @srodriguex , você pode pular o carregamento manual do arquivo em lotes (etapas 4 a 6), copiando alguns arquivos em lotes para onde o Python está pesquisando, seguindo esta resposta . Se isso não funcionar, aqui estão as etapas a seguir que originalmente funcionaram para mim.

  1. Abra um cmd.exe

  2. Antes de tentar instalar algo que exija extensões C, execute o seguinte arquivo em lotes para carregar o ambiente do compilador VC ++ na sessão (ou seja, variáveis ​​de ambiente, o caminho para o compilador, etc.).

    Executar:

    • Compiladores de 32 bits:

      Nota : as instalações do Windows de 32 bits terão apenas o C:\Program Files\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 : Sim, os compiladores nativos de 64 bits estão presentes Program Files (x86). Não me pergunte o porquê.
      Além disso, se você está se perguntando qual a diferença entre vcvars64.bate, vcvarsx86_amd64.batou mais importante, a diferença entre amd64e x86_amd64, o primeiro é para as ferramentas nativas de compilador de 64 bits e o último são os compiladores cruzados de 64 bits que podem ser executados em uma instalação do Windows de 32 bits. .

    Atualização:
    se, por algum motivo, você estiver chegando error: ... was unexpected at this time.a ...uma série de caracteres, será necessário verificar se a variável do caminho não possui caracteres estranhos, como citações extras ou caracteres dispersos. O arquivo em lotes não poderá atualizar o caminho da sua sessão se, em primeiro lugar, não puder fazer sentido.

  3. Se tudo der certo, você deve receber uma das seguintes mensagens, dependendo da versão do VC ++ e do comando que você executou:

    Para as ferramentas do compilador de 32 bits:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    Para as ferramentas do compilador de 64 bits:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. Agora , execute a instalação via python setup.py installoupip install pkg-name

  5. Espere e cruze os dedos para que os planetas estejam alinhados corretamente para que o VC ++ coopere.

Josh Bowden
fonte
Não posso recomendar o suficiente para que você não passar pela dor de se mover em linha reta para 64 bits. É apenas uma questão de tempo até que você precise de mais de 4 GB de espaço de endereço. Falo por experiência dolorosa depois de ter completado 32 bits porque era muito mais fácil, depois ter que desinstalar tudo, incluindo dependências e continuar com 64 bits. Quase um fim de semana inteiro.
Thomas Browne
1
Então, novamente, esqueço quantas pessoas terão que usar o Python para tarefas muito maiores como essa. E @ThomasBrowne, tenho certeza de que foi uma experiência dolorosa e desnecessária. Estou investigando e espero encontrar alguma coisa. O principal problema era que o Visual Studio C ++ 2008 Express não vem com um compilador de 64 bits, mas tenho certeza de que está por aqui em algum lugar.
Josh Bowden
Apenas atualizei com mais informações sobre como obter os compiladores de 64 bits, se você precisar deles.
21714 Josh Bowden
No meu caso, sigo a etapa 1 acima e pulei o restante após esta resposta . Agora eu sou capaz de instalar pacotes evitando o incômodo de executar .bat.
srodriguex
@srodriguex: nesse caso, parece que o Python está assumindo que as ferramentas do compilador de 64 bits são carregadas no PATH usando o que ele está procurando ...\VC\bin\vcvarsamd64.bate ...\VC\bin\amd64\vcvarsamd64.bat.
Josh Bowden
73

O que está acontecendo? Os módulos Python podem ser escritos em parte em C ou C ++ (normalmente para velocidade). Se você tentar instalar esse pacote com o Pip (ou setup.py), ele precisará compilar esse C / C ++ da fonte. Pronto, o Pip assumirá descaradamente o compilador Microsoft Visual C ++ instalado. Se você não o tiver, verá a mensagem de erro enigmático "Erro: Não foi possível encontrar o vcvarsall.bat".

A solução prescrita é instalar um compilador C / C ++, Microsoft Visual C ++ ou MinGW (um projeto de código aberto). No entanto, instalar e configurar qualquer um é proibitivamente difícil. (Edição de 2014: a Microsoft publicou um compilador C ++ especial para Python 2.7)

A solução mais fácil é usar os instaladores do Windows de Christoph Gohlke (.msi) para pacotes populares do Python. Ele constrói instaladores para Python 2.xe 3.x, 32 e 64 bits. Você pode baixá-los em http://www.lfd.uci.edu/~gohlke/pythonlibs/


Se você também acha que "Erro: não é possível encontrar o vcvarsall.bat" é uma mensagem ridiculamente enigmática e inútil, comente o bug em http://bugs.python.org/issue2943 para substituí-lo por um mais útil e mensagem amigável.

Para comparação, o Ruby é enviado com um gerenciador de pacotes Gem e oferece um compilador C / C ++ quase oficial, o DevKit. Se você tentar instalar um pacote sem ele, verá esta mensagem útil:

Atualize seu PATH para incluir ferramentas de construção ou faça o download do DevKit em http://rubyinstaller.org/downloads e siga as instruções em http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Você pode ler um discurso mais longo sobre o pacote Python em https://stackoverflow.com/a/13445719/284795

Coronel Panic
fonte
Como posso usar o pip para instalar este executável pré-compilado no meu ambiente virtual?
Shailen
@shailenTJ boa pergunta. Eu nunca fiz isso, mas tente stackoverflow.com/a/5442340/284795
Coronel Pânico
Esta foi a melhor / mais fácil solução que eu conheço. Obrigado.
user1477388
que Edit 2014 é a melhor resposta para mim. Fácil de perder instruções: garanta a atualização setuptoolspara a versão 6.0ou superior pip install setuptools --upgrade.
orlade
64

Você precisará instalar um compilador da Microsoft, compatível com o compilador usado para criar o Python. Isso significa que você precisa do Visual C ++ 2008 (ou mais recente, com alguns ajustes ).

A Microsoft agora fornece um compilador e cabeçalhos em pacote apenas para poder compilar extensões Python, na URL memorável:

Compilador do Microsoft Visual C ++ para Python 2.7

http://aka.ms/vcpython27

Este é um pacote relativamente pequeno; 85 MB para download, instalável sem privilégios de administrador, sem necessidade de reinicialização. O nome é um pouco enganador, o compilador funcionará para qualquer versão do Python originalmente compilada com o Visual C ++ 2008, não apenas para o Python 2.7.

Se você iniciar um prompt interativo do Python ou imprimir sys.version, procure a MSCstring da versão; se for, MSC v.1500você pode usar esta ferramenta.

Do anúncio original à lista de distutils :

A Microsoft lançou um pacote de compilador para o Python 2.7 para facilitar a criação e distribuição de módulos de extensão C no Windows. O Microsoft Visual C ++ Compiler para Python 2.7 (aka VC9) está disponível em: http://aka.ms/vcpython27

Este pacote contém todas as ferramentas e cabeçalhos necessários para criar módulos de extensão C para Python 2.7 de 32 e 64 bits (observe que alguns módulos de extensão requerem dependências de terceiros, como OpenSSL ou libxml2, que não estão incluídas). Outras versões do Python criadas com o Visual C ++ 2008 também são suportadas; portanto, o "Python 2.7" é apenas publicidade - funcionará bem com 2.6 e 3.2.

Observe que você precisa ter setuptools 6.0 ou mais recente instalado (listado nos requisitos do sistema na página de download). O projeto que você está instalando deve usar setuptools.setup(), não distutilsou a detecção automática não funcionará.

A Microsoft declarou que deseja manter a URL estável, para que scripts automatizados possam fazer referência facilmente a ela.

Martijn Pieters
fonte
2
Conforme meu outro comentário, você pode garantir que setuptoolsestá atualizado pip install setuptools --upgrade.
orlade
Examinei o assunto por que a lógica relevante está em setuptoolsvez de distutils- afinal, construir módulos é a funcionalidade principal e possui o código relevante, mas uma versão mais antiga. Parece que os distutilsmantenedores desistiram de apoiar todas as variações possíveis do MSSDK e lançaram esse trabalho nos setuptoolscolegas que estavam mais ansiosos.
precisa saber é o seguinte
1
@ivan_pozdeev: setuptoolstambém pode ser lançado com muito mais frequência do que o distutilsincluído no ciclo de lançamento do Python. E distitutils, de fato, entrou em um tipo de modo de manutenção, com o trabalho em novos sistemas programados para substituí-lo. Esse trabalho parou em vez disso.
Martijn Pieters
Cython usos distutils, você precisa setuptools de importação que macaco-patches distutils: github.com/cython/cython/wiki/CythonExtensionsOnWindows
denfromufa
54

Acabei de ter esse mesmo problema, por isso vou contar minha história aqui, esperando que ajude alguém com os mesmos problemas e economize as duas horas que passei:

Eu tenho mingw (g ++ (GCC) 4.6.1) e python 2.7.3 em uma caixa do Windows 7 e estou tentando instalar o PyCrypto.

Tudo começou com este erro ao executar a instalação setup.py:

error: Unable to find vcvarsall.bat

Resolvido facilmente após pesquisar o erro, especificando mingw como o compilador preferido:

setup.py install build --compiler=mingw32

O problema é que, então, recebi um erro diferente:

configure: error: cannot run C compiled programs.

Acontece que meu antivírus estava bloqueando a execução de um .exe recém compilado. Acabei de desativar o anti-vírus "residente shield" e fui para o próximo erro:

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

Isso resolveu o problema: "Instale uma versão um pouco mais antiga do MinGW ou edite distutils \ cygwinccompiler.py no diretório Python para remover todas as instâncias do -mno-cygwin." ( daqui )

Agora, finalmente posso começar a trabalhar.

fpessoa
fonte
7
Você também precisará de uma versão compatível com MinGW da biblioteca Python. Veja eli.thegreenplace.net/2008/06/28/… para obter mais informações
Gili
Voltas e mais voltas: D
Xilpex 21/04/19
23

Parece que ele está procurando compiladores de VC, então você pode tentar mencionar o tipo de compilador -c mingw32, já que possui msys

python setup.py install -c mingw32
VOCÊ
fonte
16
Apenas para clarificar, o comando que funciona é: python setup.py build --compiler=mingw32seguido porpython setup.py install
Emil Stenström 12/12/12
Após executar o python setup.py build --compiler = mingw32, recebo ImportError: nenhum módulo chamado Cython.Distutils enquanto o Cython está instalado no Anaconda. Alguma sugestão?
Serendipity
20

Eu tenho python 2.73 e Windows 7. A solução que funcionou para mim foi:

  1. Adicionado o diretório bin do mingw32 à variável de ambiente: acrescente PATH comC:\programs\mingw\bin;
  2. Criado distutils.cfg localizado em C:\Python27\Lib\distutils\distutils.cfgcontendo:

    [build]
    compiler=mingw32

Para lidar com o MinGW que não reconhece mais o sinalizador -mno-cygwin, remova o sinalizador nas linhas C: \ Python27 \ Lib \ distutils \ cygwincompiler.py 322 a 326, para que fique assim:

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

Procure no setup.pyarquivo do pacote que você está tentando instalar. Se for um pacote mais antigo, pode estar importando distutils.core.setup()e nãosetuptools.setup() .

Corri para isso (em 2015) com uma combinação desses fatores:

  1. O Microsoft Visual C ++ Compiler para Python 2.7 em http://aka.ms/vcpython27

  2. Um pacote mais antigo que usa distutils.core.setup()

  3. Tentando fazer em python setup.py buildvez de usar pip.

Se você usar uma versão recente do pip, ele forçará (monkeypatch) o pacote a usar setuptools, mesmo que setup.pyexija distutils. No entanto, se você não estiver usando o pip e estiver apenas fazendo python setup.py build, o processo de compilação será usado distutils.core.setup(), o qual não sabe sobre o local de instalação do compilador.


Solução

Passo 1: Abra o prompt de comando do Visual C ++ 2008 apropriado

Abra o menu Iniciar ou a tela Iniciar e procure "Prompt de Comando do Visual C ++ 2008 de 32 bits" (se o seu python for 32 bits) ou "Prompt de Comando do Visual C ++ 2008 de 64 bits" (se o python for de 64 bits) . Executá-lo. O prompt de comando deve dizer Visual C ++ 2008 ... na barra de título.

Etapa 2: definir variáveis ​​de ambiente

Defina essas variáveis ​​de ambiente no prompt de comando que você acabou de abrir.

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

Referência http://bugs.python.org/issue23246

Etapa 3: criar e instalar

cdpara o pacote que você deseja criar e executar python setup.py build, então python setup.py install. Se você deseja instalar um virtualenv, ative-o antes de criar.

Christian Long
fonte
você também pode construir o seu pacote usando <code> pip </ code> em vez de <code> python setup.py build </ code>
aronadaal
9

Talvez alguém possa estar interessado, o seguinte funcionou para mim no pacote py2exe. (Eu tenho o windows 7 de 64 bits e o python portátil 2.7, Visual Studio 2005 Express com Windows SDK para Windows 7 e .NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

então:

python.exe setup.py install
Stefano Fenu
fonte
Não, você está certo, não tenho certeza do que aconteceu, vou excluir o comentário original.
Dave Challis
1
Muito útil!! No meu caso, criei 'set VS90COMNTOOLS =% VS110COMNTOOLS%'.
jrvidotti
@Exzile: sim, você digita esses comandos ao mesmo comando sessão de prompt
Stefano Fenu
NÃO FAÇA ISSO!!! Veja esta resposta para mais detalhes.
Anônimo
8

Passei quase 2 dias descobrindo como corrigir esse problema na minha versão python 3.4 de 64 bits: Python 3.4.3 (v3.4.3: 9b73f1c3e601, 24 de fevereiro de 2015, 22:44:40) [MSC v.1600 de 64 bits (AMD64 )] no win32

Solução 1, difícil: (antes de ler isso, leia primeiro a Solução 2 abaixo) Finalmente, foi isso que me ajudou:

  1. instalar Visual C ++ 2010 Express
  2. instalar Microsoft Windows SDK v7.1 para Windows 7
  3. criar manualmente um arquivo vcvars64.batno C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64qual contémCALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 ou outro caminho, dependendo de onde você instalou o seu
  4. (isso parece ser opcional) instale o Microsoft Visual Studio 2010 Service Pack 1 junto com a Atualização do Compilador do Microsoft Visual C ++ 2010 Service Pack 1 para o Windows SDK 7.1
  5. Depois disso, tentei, pip install numpymas recebi o seguinte erro:

    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

    Alterei mfinfopara Nonedentro C:\Python34\Lib\distutils\msvc9compiler.pypor https://stackoverflow.com/a/23099820/4383472

  6. finalmente após o pip install numpycomando, meu antivírus avast tentou interferir no processo de instalação, mas eu o desativei rapidamente

Demorou muito tempo - vários minutos para o numpy compilar, eu até pensei que havia um erro, mas finalmente tudo estava ok.

Solução 2, fácil: (sei que essa abordagem já foi mencionada em uma resposta altamente votada , mas deixe-me repetir, pois é realmente mais fácil) Depois de passar por todo esse trabalho, entendi que a melhor maneira para mim é usar já binários pré-compilados de http://www.lfd.uci.edu/~gohlke/pythonlibs/ no futuro. Há poucas chances de eu precisar de algum pacote (ou uma versão de um pacote) que este site não contenha. O processo de instalação também é muito mais rápido dessa maneira. Por exemplo, para instalar numpy:

  1. donwload numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(se você tiver o Python 3.4 de 64 bits) desse site
  2. no prompt de comando ou no PowerShell, instale-o com o pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(ou o caminho completo para o arquivo, dependendo de como o prompt de comando é aberto)
Ruim
fonte
numpy ‑ 1.9.2 + mkl ‑ cp34 ‑ none ‑ win_amd64.whl - não foi possível encontrar este arquivo no link acima.
Amresh Giri 16/09/19
7

Eu queria executar pysph no Windows 10 no Python 2.7 e consegui vcvarsall.bat não foi encontrado (a partir de distutils)

Minha solução foi a seguinte:

Instale o Microsoft Visual C ++ para Python 2.7 (como @Michael sugeriu)

No Windows 10, ele foi instalado (meu nome de usuário é Andreas):

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

Defina a variável de ambiente VS90COMNTOOLS para o caminho de instalação do Visual C ++ para Python 2.7 (consulte o caminho acima).

Se ainda não funcionar, modifique o módulo

C:/Python27/lib/distutils

o arquivo msvc9compiler.py . Encontre nele a função find_vcvarsall e faça a seguinte modificação.

Substitua a linha:

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

com

productdir = os.path.join(toolsdir)

É aqui que vcvarsall.bat reside no meu caso (verifique onde vcvarsall.bat está na sua instalação).

Chiefenne
fonte
Curiosamente, %userprofile%\Appdata\Local\Programs\Commonestá vazio para mim.
Bryce Guinta
Mesmo depois de instalar o Microsoft Visual C ++ para Python 2.7?
chiefenne
7

Encontrei esse problema ao tentar instalar a biblioteca numpy no meu python 3.5. A solução é instalar o VS2015. Eu tinha o VS2008, 2012, 2013, nenhum dos quais é compatível com o python 3.5. Aparentemente, a versão mais recente do python depende das versões mais recentes do VS.

Verifique também se as Ferramentas comuns do C ++ estão instaladas com o Visual Studio.

insira a descrição da imagem aqui

DG
fonte
6

Tentei todas as respostas acima e achei que todas elas não funcionavam. Talvez eu estivesse usando o Windows 8 e instalasse o Visual Studio 2012. Nesse caso, é isso que você faz.

O vcvarsall.batarquivo está localizado aqui: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

Simplesmente selecione o arquivo e copie-o.

Então vá para este diretório: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

e cole o arquivo E então, tudo deve estar bem.

Jogos Brainiac
fonte
Nem tudo está bem, segui sua resposta, mas ainda assim recebo o mesmo erro.
Stupid_Intern
6

Você pode baixar o Visual C ++ 2008 Express Edition gratuito em http://go.microsoft.com/?linkid=7729279 , que definirá a variável de ambiente VS90COMNTOOLS durante a instalação e, portanto, criará um compilador compatível.

Como o @PiotrDobrogost mencionado em um comentário, sua resposta a essa outra pergunta entra em detalhes sobre por que o Visual C ++ 2008 é a coisa certa a ser desenvolvida, mas isso pode mudar à medida que a compilação do Windows do Python se move para as versões mais recentes do Visual Studio: Building lxml para Python 2.7 no Windows

Eric Smith
fonte
Verifique também se não há outras versões instaladas. Eu tive um tempo difícil com isso. Reformatei o computador e instalei apenas esta versão. Desde que a remoção de várias versões do VS teria me levado tanto tempo.
jmunsch
6

Eu tive esse problema usando o Python 3.4.1 no Windows 7 x64 e, infelizmente, os pacotes que eu precisava não tinham exe ou rodas adequados que eu pudesse usar. Este sistema requer algumas 'soluções alternativas', detalhadas abaixo (e TLDR na parte inferior ).

Usando as informações da resposta da Jaxrtech acima , determinei que precisava do Visual Studio C ++ 2010 (sys.version return MSC v.1600), então instalei o Visual C ++ 2010 Express a partir do link em sua resposta, que é http://go.microsoft .com /? linkid = 9709949 . Instalei tudo com atualizações, mas como você pode ler abaixo, isso foi um erro. Somente a versão original do Express deve ser instalada no momento (sem nada atualizado).

O vcvarsall.bat estava presente, mas ocorreu um novo erro ao instalar o pacote query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path'],. Há outras perguntas sobre o stackoverflow com esse erro, como Erros ao criar / instalar o módulo C para Python 2.7

Determinei a partir dessa resposta que o 2010 Express instala apenas compiladores de 32 bits. Para obter compiladores de 64 bits (e outros), você precisa instalar o Windows 7.1 SDK. Consulte http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

Isso não seria instalado para mim e o instalador retornou o erro installation failed with return code 5100. Encontrei a solução no seguinte link: http://support.microsoft.com/kb/2717426 . Em resumo, se as versões mais recentes dos Redistribuíveis do Microsoft Visual C ++ 2010 x86 e x64 estiverem instaladas, elas entrarão em conflito com as do instalador do SDK e precisarão ser desinstaladas primeiro.

O SDK foi instalado, mas notei que vcvars64.bat ainda não existia C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\binnem em suas subpastas. vcvarsall.bat executa o arquivo em lotes vcvars64; portanto, sem ele, o pacote python ainda não seria instalado (esqueci o erro que foi mostrado no momento).

Em seguida, encontrei algumas instruções aqui: http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1 Seguindo as instruções, eu já tinha instalado o Express e o 7.1 SDK, o SDK 7.1 SP1 e o correção de arquivo de cabeçalho ausente. Eu criei manualmente vcvars64.bat com o conteúdo CALL setenv /x64. Vou colar todas essas instruções aqui, para que elas não se percam.

A etapa 1 é baixar o Visual Studio Express 2010.

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express é um bom lugar para começar. Faça o download do instalador e execute-o (vc_web.exe). Você não precisa do download adicional do SQL 2008.

Você também precisará do Windows SDK (atualmente 7.1) para os compiladores de 64 bits - a menos que deseje criar somente versões de 32 bits, que não são totalmente suportadas ...

http://www.microsoft.com/pt-br/download/details.aspx?id=8279 é um bom ponto de partida para fazer o download - você precisará executar o winsdk_web.exe ao fazer o download!

A instalação padrão aqui é ótima.

Por fim, baixe e instale a atualização do Windows SDK 7.1 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=4422

E, para corrigir o arquivo de cabeçalho ausente, o VS2010 SP1. http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

E, diabos, corrija o arquivo em lotes ausente do VS2010 Express. Isso está ficando absolutamente absurdo.

Em C: \ Arquivos de programas (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64, crie "vcvars64.bat" com o seguinte (você precisará estar executando como administrador):

CHAMADA setenv / x64

Meu pacote python ainda não foi instalado (não consigo recuperar o erro). Encontrei algumas instruções (copiadas abaixo) para usar o prompt de comando especial do SDK 7.1, consulte: https://mail.python.org/pipermail/distutils-sig/2012-February/018300.html

Esqueça essa pergunta. Alguém aqui notou este item no menu: Iniciar-> Todos os Programas-> Microsoft Windows SDK v7.1 -> Prompt de Comando do Windows SDK 7.1

Isso executa um trabalho em lotes que parece configurar um ambiente de trabalho para o compilador. Nesse prompt, você pode digitar "setup.py build" ou "setup.py install".

Abri o prompt de comando do Windows SDK 7.1 conforme as instruções e usei-o para executar o easy_install no pacote python. E, finalmente, sucesso!


TLDR ;

  1. Instale o Visual Studio Express 2010 (de preferência sem redistribuíveis atualizados ou servidor SQL).
  2. Instale o SDK do Windows 7.1
  3. Instale a atualização do SDK 7.1 SP1 e a correção do arquivo de cabeçalho do VS2010 SP1 (esta etapa pode não ser necessária).
  4. Criar manualmente C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batcom conteúdoCALL setenv /x64
  5. Iniciar-> Todos os Programas-> Microsoft Windows SDK v7.1 -> Windows SDK 7.1 Prompt de Comando para abrir um prompt de comando especial x64, que pode ser usado com o python / easy_install / pip / etc (incluindo aqueles em virtual_envs).
neRok
fonte
4

As etapas abaixo corrigiram esse problema para mim, eu estava tentando criar uma instalação com a extensão cython.

  1. Instale o Microsoft Visual C ++ Compiler para Python 2.7
  2. O local de instalação padrão seria @ C: \ Usuários \ PC-usuário \ AppData \ Local \ Programas \ Comum \ Microsoft \ Visual C ++ para Python. Na verdade, isso pode resolver o problema, teste uma vez antes de prosseguir.
  3. Se falhar, verifique onde o VCVarsall.bat está localizado no VC ++.
  4. Abra o arquivo msvc9compiler.py do pacote distutils no bloco de notas.
  5. Na minha caixa, estava a função @ C: \ Anaconda2 \ Lib \ distutils \ msvc9compiler.py find_vcvarsall neste arquivo, determine a versão do VC imprimindo o argumento da versão. Para Python 2.7, é provável que seja 9.0
  6. Agora crie uma variável de ambiente VS90COMNTOOLS, apontando para C: \ Usuários \ PC-usuário \ AppData \ Local \ Programas \ Comum \ Microsoft \ Visual C ++ para Python \ 9.0 \ VC \ bin
  7. Por alguma razão, o distutils espera que o arquivo vcvarsall.bat esteja no diretório VC, mas o VC ++ para ferramentas python o possui na raiz da 9.0 Para corrigir isso, remova "VC" do path.join (aproximadamente na linha 247)

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

As etapas acima corrigiram o problema para mim.

Riyas Deen
fonte
Estou recebendo erro de vinculação ao seguir as etapas acima LINK: erro LNK2001: símbolo externo não resolvido init__init__ build \ temp.win-amd64-2.7 \ Release_ init_ .lib: erro fatal LNK1120: 1 erro externo não resolvido: comando 'C: \\ Users \\ ma306477 \\ AppData \\ Local \\ Programs \\ Common \\ Microsoft \\ Visual C ++ for Python \\ 9.0 \\ VC \\ Bin \\ amd64 \\ link.exe 'falhou com o status de saída 1120
manish Prasad
3

Eu tentei muitas soluções, mas apenas uma funcionou para mim, a instalação do Microsoft Visual Studio 2008 Express C ++.

Eu peguei esse problema com um módulo Python 2.7 escrito em C (yEnc, que tem outros problemas com o MS VS). Observe que o Python 2.7 é construído com a versão MS VS 2008, não 2010!

Apesar de gratuito, é muito difícil encontrá-lo, pois a MS promove o VS 2010. Ainda assim, os links diretos oficiais do MSDN ainda estão funcionando: verifique https://stackoverflow.com/a/15319069/2227298 para obter links para download.

KrisWebDev
fonte
Sim, a melhor maneira é instalar o VS2008.
Pylover
3

Se você tiver o mingw instalado

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

funciona, forçando o pip a construir usando o compilador mingw em vez do da Microsoft. Veja aqui https://github.com/pypa/pip/issues/18 para obter detalhes (última postagem).

Nicolas78
fonte
3

O Microsoft Visual C ++ Compiler para Python 2.7 em http://www.microsoft.com/en-us/download/details.aspx?id=44266 não é uma solução?

Michael
fonte
Trabalhou para mim. Mensagem de erro no final do pip instalar pysftp teve esta soluçãoerror: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
Bob Stein
3

A maneira mais fácil de resolver isso em 2016 é instalar o Chocolatey e depois o vcpython27pacote. Powershell aberto:

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

Não sei se é tarde demais, mas encontrei o Microsoft Visual C ++ Compiler para Python 2.7 que lê

A mensagem de erro típica que você receberá se precisar deste pacote de compilador não pode encontrar vcvarsall.bat

Espero que isto ajude!

mkamioner
fonte
2

Eu tenho o mesmo problema e o resolvi no momento.

"Google" me disse que eu preciso instalar o "Microsoft Visual C ++ Compiler for Python 2.7". Eu instalo não apenas a ferramenta, mas também o Visual C ++ 2008 Reditributable, mas não ajudou. Tentei instalar o Visual C ++ 2008 Express Edition. E o problema se foi!

Apenas tente instalar o Visual C ++ 2008 Express Edition!

Vova
fonte
2

a chamada import setuptoolsfará com que os distutils de patch sejam forçados para forçar a compatibilidade com o Visual Studio. Chamar vcvars32.batmanualmente configurará o ambiente virtual e evitará outros erros comuns que o compilador lançará. Para o VS 2017, o arquivo está localizado em

"C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio \ 2017 \ Comunidade \ VC \ Auxiliar \ Build \ vcvars32.bat"

Aqui está o script de instalação que eu uso para compilar rapidamente arquivos .pyx em .pyd: (Nota: ele usa o módulo de terceiros send2trash

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

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

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

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


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

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


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

    return wrapper


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

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


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

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


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

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


if len(sys.argv) > 2:
    _build_ext()
user2682863
fonte
De fato, a importação setuptoolsajuda, também no caso da compilação de cython .
Basj
você poderia explicar um pouco mais detalhadamente? como chamar o vcvars32.bat manualmente? Im tendo compilação Cython
junho Wang
2

Use este link para baixar e instalar o Visual C ++ 2015 Build Tools . Ele irá baixar visualcppbuildtools_full.exee instalar automaticamente o Visual C ++ 14.0 sem realmente instalar o Visual Studio. Após a conclusão da instalação, tente novamente a instalação do pip e você não receberá o erro novamente.

Eu testei na seguinte plataforma e versões:

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

Se você deseja instalar o pyodbc em uma caixa do Windows que não tenha o Visual Studio instalado, outra opção é instalar manualmente o pyodbc usando a distribuição binária.

Isso é particularmente útil se você não tiver privilégios de administrador na máquina com a qual está trabalhando e estiver tentando configurar um virtualenv .

Passos:

  1. Baixe o instalador mais recente do Windows aqui (pyodbc-XXXwin-Y-py2.7.exe)
  2. Abra o executável do instalador usando 7-Zip (ou WinRAR ou o que for)
  3. Extraia pyodbc.pyd e pyodbc-XXX-py2.7.egg-info e coloque-os em [python installation directory or virtualenv]\Lib\site-packages
  4. Não há etapa 4 :)
Dane B
fonte
1

Com o Python 3.4, a dependência está no Visual Studio 2010. A instalação do Visual C ++ 2010 Express corrigiu o problema para mim.

Enganá-lo usando as instalações do VS 2008 ou 2013 que eu funcionava não funcionou.

gmjonker
fonte
1

Você pode usar o easy_install em vez do pip, ele funciona para mim.

Abdul Majeed
fonte
Mesmo erroerror: Setup script exited with error: Unable to find vcvarsall.bat
Stephan Schielke 30/10
1

A resposta dada por @monkey é uma das corretas, mas está incompleta.

Caso queira usar o MinGW , selecione C, C ++ e também outras ferramentas de desenvolvimento sugeridas durante o processo de instalação do MinGW para obter também "make.exe".

Você também deve ter o caminho definido para make.exe no ambiente.

Para completar sua resposta, aqui estão as etapas:

  1. Adicione o diretório bin do mingw32 às suas variáveis ​​de ambiente
  2. Anexar C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;ao PATH
  3. Edite (crie se não existir) o distutils.cfgarquivo localizado em C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32

Verifique se as variáveis ​​de ambiente estão definidas abrindo um novo cmd.exe.

Olivier N
fonte
Os módulos python de 32 bits devem ser compilados com o mingw de 32 bits, enquanto os módulos python de 64 bits devem ser compilados com o mingw de 64 bits. No Cygwin de 64 bits, existem 2 executáveis ​​disponíveis: x86_64-w64-mingw32-gcce i686-w64-mingw32-gcc. Esses executáveis ​​são aparentemente os mesmos que você obteria normalmente do Mingw (apenas compilado dentro de um ambiente Cygwin).
CMCDragonkai