błąd: nie można znaleźć pliku vcvarsall.bat

851

Próbowałem zainstalować dulwich pakietu Python :

pip install dulwich

Ale pojawia się tajemniczy komunikat o błędzie:

error: Unable to find vcvarsall.bat

To samo dzieje się, jeśli spróbuję zainstalować pakiet ręcznie:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat
okada
źródło
6
Na przyszłość warto byłoby zobaczyć na jakiej platformie tego używasz.
viam0Zah
47
Jeśli uważasz, że jest to absurdalnie tajemniczy i niepomocny komunikat o błędzie, zagłosuj na błąd pod adresem bugs.python.org/issue2943
Pułkownik Panic
48
Microsoft oferuje teraz rozwiązanie: microsoft.com/en-us/download/details.aspx?id=44266
Martijn Pieters
6
@MartijnPieters Próbowałem pobrać i zainstalować link, który dostałeś z wheel i setuptools 7.0, ale to nie działa Dostaję komunikat: 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 (facet z zespołu Python Microsoftu) napisał post na blogu na ten temat, który warto przeczytać: blogs.msdn.microsoft.com/pythonengineering/2016/04/11/…
Cody Piersall

Odpowiedzi:

683

Aktualizacja : Komentarze wskazują, że instrukcje tutaj mogą być niebezpieczne. Rozważ użycie wersji Visual C ++ 2008 Express lub specjalnie zbudowanego kompilatora Microsoft Visual C ++ dla Pythona ( szczegóły ) i NIE używaj oryginalnej odpowiedzi poniżej. Oryginalny komunikat o błędzie oznacza, że ​​wymagana wersja programu Visual C ++ nie została zainstalowana.


W przypadku instalacji Windows:

Podczas uruchamiania pliku setup.py dla instalacji pakietów Python 2.7 wyszukuje zainstalowanego programu Visual Studio 2008. Możesz oszukać Python, aby używał nowszego programu Visual Studio, ustawiając poprawną ścieżkę w VS90COMNTOOLSzmiennej środowiskowej przed wywołaniem setup.py.

Wykonaj następujące polecenie w zależności od zainstalowanej wersji programu Visual Studio:

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

OSTRZEŻENIE: Jak wspomniano poniżej, jest mało prawdopodobne, aby ta odpowiedź działała, jeśli próbujesz skompilować moduły python.

Szczegółowe informacje zawiera temat Budowanie lxml dla Pythona 2.7 w systemie Windows .

fmuecke
źródło
21
Zrobiło
8
@Gili: Wygląda na to, że ten problem wynika ze spacji w zmiennej, spróbuj zawinąć ją w cudzysłów. Dla mnie% VS100COMNTOOLS% = "C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools"
legends2k
7
To nie zadziała dla wielu rzeczy, ponieważ Python opiera się na VS2008. Spójrz na tę odpowiedź: stackoverflow.com/questions/6551724/…
shezi
182
OSTRZEŻENIE!!! To jest ZŁA odpowiedź. W żadnym wypadku nie powinieneś kompilować rozszerzenia Python C przy użyciu innego kompilatora (wersji) niż ten, który był używany do kompilacji samego Pythona, ponieważ te dwie (kompilatory) kompilatory będą prawdopodobnie miały niekompatybilne biblioteki wykonawcze C. Zobacz odpowiedź, aby uzyskać więcej informacji.
Piotr Dobrogost
72
Możesz pobrać bezpłatną wersję Visual C ++ 2008 Express Edition ze strony go.microsoft.com/?linkid=7729279 , która ustawia zmienną środowiskową VS90COMNTOOLS podczas instalacji, a tym samym kompiluje ją za pomocą kompatybilnego kompilatora.
Eric Smith
225

Znalazłem rozwiązanie. Miałem dokładnie ten sam problem i błąd podczas instalowania „amara”. Miałem zainstalowany mingw32, ale trzeba było skonfigurować distutils.

  1. Mam już zainstalowany język Python 2.6.
  2. Zainstalowałem mingw32 do C:\programs\mingw\
  3. Dodaj katalog bin mingw32 do zmiennej środowiskowej: dołącz c:\programs\MinGW\bin;do ŚCIEŻKI
  4. Edytuj (jeśli nie istnieje) plik distutils.cfg znajdujący się pod adresem C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32
  5. Teraz biegnij easy_install.exe amara.

Upewnij się, że środowisko jest ustawione, otwierając nowy cmd.exe.

ninMonkey
źródło
45
Działa to świetnie w Python2.6, ale z jakiegoś powodu nie mogę zmusić go do pracy w Python2.7. Działa, jeśli pobieram źródło pakietu i instaluję go za pomocą „python setup.py install --compile = mingw32”, ale z jakiegoś powodu za pomocą easy_install lub pip nadal próbuje znaleźć vcvarsall.
Jonathan Hartley
2
I wreszcie scikits.image zainstalować w Pythonie (x, y) 2,7 dodając C:\msysgit\mingw\mingw32\bini C:\msysgit\mingw\bindo PATH użytkownika i ponownym Spyder przed uruchomieniem pip installponownie
endolit
20
Nie ma potrzeby kiedykolwiek , aby ponownie uruchomić ze względu na zmiany zmiennej środowiskowej. Wystarczy otworzyć nowy proces cmd.exe.
Tomalak
11
Nadal nie mogłem tego naprawić. To jest błąd: gcc: error: unrecognized command line option '-mno-cygwin' error: Setup script exited with error: command 'gcc' failed with exit status 1poeasy_install.exe amara
użytkownik
5
@ użytkownik, powinieneś otworzyć ten plik: C:\Python27\Lib\distutils\cygwincompiler.pyi usunąć z niego wszystkie jego wystąpienia –mno-cygwin; dzieje się tak, ponieważ najnowsze wersje GCC usunęły –mno-cygwinopcję i nie powinno jej tam być.
Zeinab Abbasimazar
220

Możesz zainstalować skompilowaną wersję z http://www.lfd.uci.edu/~gohlke/pythonlibs/

VolodymyrB
źródło
15
tylko wskazówka: możesz zainstalować pakiet z tej strony w virtualenv, uruchamiając easy_install binary_installer_built_with_distutils.exew virtualenv, zgodnie z tą odpowiedzią .
yangzh
14
Każdy deweloper systemu Python Windows powinien o tym wiedzieć
licealista
1
Możesz również wheel convert ....exezainstalować te instalatory, a następnie zainstalować je za pomocą pip w dowolnym momencie.
Zooba
3
Aby być bardziej precyzyjnym, lfd.uci.edu/~gohlke/pythonlibs/#mysql-python, a po pobraniu otwórz terminal jako administrator i uruchompython -m pip install <filename>
arun
Święta Matko Boża, to jest na miejscu. Działa jak urok, TY :)
Amir
162

Jeśli chcesz skompilować z Visual Studio C ++ zamiast mingw ...

  1. Uruchom, python.exeaby wyświetlić wersję VC ++, z którą został skompilowany (przykład pokazano poniżej).

    Jest ważne , aby użyć odpowiedniej wersji kompilatora Visual C ++, że Python został skompilowany z od distilutils „s get_build_versionuniemożliwia mieszanie wersje ( na ostrzeżenie Piotra ).

    • Żółty (góra) to Python 2.7, skompilowany z MSC v.1500 (Visual Studio C ++ 2008)
    • Czerwony (na dole) to Python 3.4.1, skompilowany z MSC v.1600 (Visual Studio C ++ 2010)

    Przykład z wiersza poleceń pokazujący Python 2.7 skompilowany z MSC v.1500 i Python 3.4.1 skompilowany z MSC v.1600

  2. Skorzystaj z poniższej tabeli [1], aby dopasować wewnętrzną wersję VC ++ do odpowiedniej wersji 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. Pobierz i zainstaluj odpowiednią wersję programu Visual Studio C ++ z poprzedniego kroku.
    Dodatkowe uwagi dotyczące określonych wersji VC ++ są wymienione poniżej.

    Uwagi do programu Visual Studio C ++ 2008

    Na zaledwie kompilatorów 32-bitowych, pobierz Visual Studio C ++ 2008 Express Edition .

    W przypadku kompilatorów 64-bitowych [2] [3] pobierz Windows SDK dla Windows 7 i .NET Framework 3.5 SP1 .

    • Odznacz wszystko oprócz Developer Tools >> Visual C++ Compilersoszczędzania czasu i miejsca na dysku na instalowaniu narzędzi SDK, których w innym przypadku nie potrzebujesz.

    Uwagi do programu Visual Studio C ++ 2010

    Według Microsoft, jeśli zainstalowałeś Visual Studio 2010 SP1, mógł on usunąć kompilatory i biblioteki dla VC ++.
    W takim przypadku pobierz aktualizację kompilatora Visual C ++ 2010 SP1 .

    Uwagi do programu Visual Studio C ++ 2015

    Jeśli nie potrzebujesz programu Visual Studio IDE, pobierz Narzędzia kompilacji Visual Studio C ++ 2015 .

    Uwagi do programu Visual Studio C ++ 2017

    Jeśli nie potrzebujesz Visual Studio IDE, pobierz Build Tools for Visual Studio 2017 .

    Sugestia : Jeśli masz zarówno 32-, jak i 64-bitową instalację Pythona, możesz także użyć virtualenv do stworzenia osobnych środowisk Python, abyś mógł używać jednego lub drugiego na raz, bez bałagania na ścieżce, aby wybrać wersję Pythona do posługiwać się.

Według @srodriguex , możesz być w stanie pominąć ręczne ładowanie pliku wsadowego (kroki 4-6), kopiując zamiast tego kilka plików wsadowych do miejsca, w którym Python szuka, postępując zgodnie z tą odpowiedzią . Jeśli to nie zadziała, oto następujące kroki, które pierwotnie dla mnie zadziałały.

  1. Otwórz a cmd.exe

  2. Zanim spróbujesz zainstalować coś, co wymaga rozszerzeń C, uruchom następujący plik wsadowy, aby załadować środowisko kompilatora VC ++ do sesji (tj. Zmienne środowiskowe, ścieżka do kompilatora itp.).

    Wykonać:

    • Kompilatory 32-bitowe:

      Uwaga : 32-bitowe instalacje systemu Windows będą działać tylko C:\Program Files\zgodnie z oczekiwaniami

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

    • Kompilatory 64-bitowe:

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

      Uwaga : Tak, są wbudowane natywne kompilatory 64-bitowe Program Files (x86). Nie pytaj mnie dlaczego.
      Ponadto, jeśli zastanawiasz się, jaka jest różnica między, vcvars64.bata vcvarsx86_amd64.batco ważniejsze, różnica między amd64i x86_amd64, te pierwsze są dla natywnych 64-bitowych narzędzi kompilatora, a te drugie to 64-bitowe kompilatory krzyżowe, które można uruchomić w 32-bitowej instalacji systemu Windows .

    Aktualizacja:
    Jeśli z jakiegoś powodu dochodzisz do error: ... was unexpected at this time.miejsca, w którym ...znajduje się seria znaków, musisz sprawdzić, czy zmienna ścieżki nie zawiera żadnych obcych znaków, takich jak dodatkowe cytaty lub znaki zbłąkane. Plik wsadowy nie będzie w stanie zaktualizować ścieżki sesji, jeśli w ogóle nie ma sensu.

  3. Jeśli wszystko poszło dobrze, powinieneś otrzymać jeden z następujących komunikatów w zależności od wersji VC ++ i uruchomionej komendy:

    W przypadku 32-bitowych narzędzi kompilatora:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    W przypadku 64-bitowych narzędzi kompilatora:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. Teraz uruchom instalację za pomocą python setup.py installlubpip install pkg-name

  5. Miejcie nadzieję i trzymajcie kciuki, że planety są prawidłowo ustawione, aby VC ++ mogło współpracować.

Josh Bowden
źródło
Nie mogę polecić wystarczy, że należy przejść przez ból porusza się prosto do 64 bit. To tylko kwestia czasu, zanim będziesz potrzebować więcej niż 4 GB przestrzeni adresowej. Mówię z bolesnego doświadczenia po przejściu na wersję 32-bitową, ponieważ było to znacznie łatwiejsze, niż konieczność odinstalowania wszystkiego, w tym zależności i przejścia na wersję 64-bitową. Prawie cały weekend.
Thomas Browne,
1
Z drugiej strony zapominam, ile osób będzie musiało używać Pythona do wykonywania znacznie większych zadań. I @ThomasBrowne, jestem pewien, że było to bolesne i niepotrzebne zło doświadczenia. Patrzę na to i mam nadzieję, że coś znajdę. Głównym problemem było to, że Visual Studio C ++ 2008 Express nie ma kompilatora 64-bitowego, ale jestem pewien, że gdzieś tu jest.
Josh Bowden,
Właśnie zaktualizowałem go, dodając więcej informacji o tym, jak uzyskać 64-bitowe kompilatory, jeśli ich potrzebujesz.
Josh Bowden
W moim przypadku wykonuję krok 1 powyżej i pomijam resztę po tej odpowiedzi . Teraz jestem w stanie instalować pakiety, unikając irytującego działania .bat.
srodriguex
@ dobrze w tym przypadku wygląda na to, że Python zakłada, że ​​64-bitowe narzędzia kompilatora zostaną załadowane do PATH, używając tego, czego szuka ...\VC\bin\vcvarsamd64.bati ...\VC\bin\amd64\vcvarsamd64.bat.
Josh Bowden
72

Co się dzieje? Moduły Python mogą być częściowo napisane w C lub C ++ (zazwyczaj dla szybkości). Jeśli spróbujesz zainstalować taki pakiet za pomocą Pip (lub setup.py), musi on skompilować ten C / C ++ ze źródła. Po wyjęciu z pudełka Pip bezczelnie zakłada, że ​​jest zainstalowany kompilator Microsoft Visual C ++. Jeśli go nie masz, zobaczysz ten tajemniczy komunikat o błędzie „Błąd: Nie można znaleźć pliku vcvarsall.bat”.

Zalecanym rozwiązaniem jest instalacja kompilatora C / C ++, Microsoft Visual C ++ lub MinGW (projekt typu open source). Jednak instalacja i konfiguracja jednego z nich jest wyjątkowo trudna. (Edycja 2014: Microsoft opublikował specjalny kompilator C ++ dla Python 2.7)

Najłatwiejszym rozwiązaniem jest użycie instalatorów systemu Windows (.msi) Christopha Gohlke dla popularnych pakietów Pythona. Buduje instalatory dla Python 2.x i 3.x, 32-bit i 64-bit. Możesz je pobrać ze strony http://www.lfd.uci.edu/~gohlke/pythonlibs/


Jeśli również uważasz, że „Błąd: nie można znaleźć pliku vcvarsall.bat” to absurdalnie tajemnicza i nieprzydatna wiadomość, skomentuj błąd na stronie http://bugs.python.org/issue2943, aby zamienić go na bardziej pomocny i pomocny dla użytkownika przyjazna wiadomość.

Dla porównania Ruby jest dostarczana wraz z menedżerem pakietów Gem i oferuje quasi-oficjalny kompilator C / C ++, DevKit. Jeśli spróbujesz zainstalować pakiet bez niego, zobaczysz tę pomocną przyjazną użyteczną wiadomość:

Zaktualizuj swoją ŚCIEŻKĘ, aby zawierała narzędzia do kompilacji lub pobierz DevKit ze strony http://rubyinstaller.org/downloads i postępuj zgodnie z instrukcjami na stronie http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Możesz przeczytać dłuższe zdanie na temat pakowania Pythona na https://stackoverflow.com/a/13445719/284795

Pułkownik Panika
źródło
Jak mogę użyć PIP, aby zainstalować ten skompilowany plik wykonywalny w moim środowisku wirtualnym?
Shailen,
@shailenTJ dobre pytanie. Nigdy tego nie zrobiłem, ale wypróbuj stackoverflow.com/a/5442340/284795
Pułkownik Panika
To było najlepsze / najłatwiejsze rozwiązanie, jakie znam. Dzięki.
user1477388,
Ta edycja 2014 jest dla mnie najlepszą odpowiedzią. Łatwa do pominięcia instrukcja: upewnij się, że aktualizujesz setuptoolsdo wersji 6.0lub wyższej za pomocą pip install setuptools --upgrade.
orlade,
64

Musisz zainstalować kompilator Microsoft, zgodny z kompilatorem używanym do budowy Pythona. Oznacza to, że potrzebujesz programu Visual C ++ 2008 (lub nowszego, z pewnymi poprawkami ).

Microsoft teraz dostarcza dołączonego kompilator i nagłówków tak aby móc skompilować rozszerzenia Pythona, w pamiętnym URL:

Kompilator Microsoft Visual C ++ dla Python 2.7

http://aka.ms/vcpython27

Jest to stosunkowo niewielka paczka; 85 MB do pobrania, instalacja bez uprawnień administratora, nie jest wymagane ponowne uruchomienie. Nazwa jest trochę myląca, kompilator będzie działał dla każdej wersji Pythona oryginalnie skompilowanej z Visual C ++ 2008, nie tylko Python 2.7.

Jeśli uruchomisz interaktywny monit lub wydruk w Pythonie sys.version, poszukaj ciągu MSCwersji; jeśli tak MSC v.1500, możesz użyć tego narzędzia.

Od pierwotnego ogłoszenia do listy distutils :

Microsoft wydał pakiet kompilatora dla Pythona 2.7, aby ułatwić ludziom tworzenie i dystrybucję modułów rozszerzeń C w systemie Windows. Kompilator Microsoft Visual C ++ dla Python 2.7 (znany również jako VC9) jest dostępny pod adresem : http://aka.ms/vcpython27

Ten pakiet zawiera wszystkie narzędzia i nagłówki wymagane do zbudowania modułów rozszerzeń C dla 32-bitowego i 64-bitowego języka Python 2.7 (należy pamiętać, że niektóre moduły rozszerzeń wymagają niezależnych zależności, takich jak OpenSSL lub libxml2, które nie zostały uwzględnione). Obsługiwane są także inne wersje Pythona zbudowane przy pomocy Visual C ++ 2008, więc „Python 2.7” jest po prostu reklamą - będzie działał dobrze w wersjach 2.6 i 3.2.

Pamiętaj, że musisz mieć zainstalowaną setuptoolswersję 6.0 lub nowszą (wymienioną w wymaganiach systemowych na stronie pobierania). Instalowany projekt musi zostać użyty setuptools.setup(), distutilsinaczej nie będzie działać automatyczne wykrywanie.

Microsoft oświadczył, że chce zachować stabilny adres URL, aby zautomatyzowane skrypty mogły łatwo do niego odwoływać.

Martijn Pieters
źródło
2
Zgodnie z moim innym komentarzem możesz upewnić setuptoolssię , że jest aktualny pip install setuptools --upgrade.
orlade
Zastanawiałem się, dlaczego jest odpowiednia logika, setuptoolsa nie distutils- przecież budowanie modułów jest podstawową funkcjonalnością i zawiera odpowiedni kod, ale jego starszą wersję. Wygląda na to, że distutilsopiekunowie po prostu zrezygnowali ze wspierania wszystkich możliwych wariantów MSSDK i zrzucili tę pracę na swoich setuptoolschętnych kolegów.
ivan_pozdeev
1
@ivan_pozdeev: setuptoolsmożna także wydać znacznie częściej niż distutils, może to zrobić w cyklu wydawniczym Python. I distitutilsrzeczywiście przeszedł w pewien rodzaj trybu konserwacji, a prace nad nowymi systemami mają go zastąpić. Ta praca utknęła w martwym punkcie.
Martijn Pieters
cython używa distutils, musisz zaimportować setuptools, które załatają
denfromufa 18.04.16
54

Właśnie miałem ten sam problem, więc opowiem tutaj swoją historię, mając nadzieję, że pomoże to komuś innemu z tymi samymi problemami i zaoszczędzę im kilka godzin, które spędziłem:

Mam mingw (g ++ (GCC) 4.6.1) i python 2.7.3 w polu Windows 7 i próbuję zainstalować PyCrypto.

Wszystko zaczęło się od tego błędu podczas uruchamiania instalacji setup.py:

error: Unable to find vcvarsall.bat

Łatwo rozwiązany po przejrzeniu błędu przez określenie mingw jako wybranego kompilatora:

setup.py install build --compiler=mingw32

Problem polega na tym, że dostałem inny błąd:

configure: error: cannot run C compiled programs.

Okazuje się, że mój antywirus blokował wykonanie świeżo skompilowanego pliku .exe. Właśnie wyłączyłem antywirusową „tarczę rezydenta” i przeszedłem do następnego błędu:

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

Rozwiązało to: „Zainstaluj nieco starszą wersję MinGW lub edytuj distutils \ cygwinccompiler.py w katalogu Python, aby usunąć wszystkie wystąpienia -mno-cygwin.” ( stąd )

Teraz mogę wreszcie zacząć działać.

fpessoa
źródło
7
Będziesz także potrzebować kompatybilnej z MinGW wersji biblioteki Python. Aby uzyskać więcej informacji, zobacz eli.thegreenplace.net/2008/06/28/ ...
Gili
Zakręty i zakręty: D
Xilpex
23

Wygląda na to, że szuka kompilatorów VC, więc możesz spróbować wspomnieć o typie kompilatora -c mingw32, ponieważ masz msys

python setup.py install -c mingw32
TY
źródło
16
Aby oświadczyć, polecenie, które działa: python setup.py build --compiler=mingw32następujepython setup.py install
Emil Stenström
Po uruchomieniu python setup.py build --compiler = mingw32 Otrzymuję komunikat ImportError: Brak modułu o nazwie Cython.Distutils, gdy Cython jest zainstalowany pod Anacondą. Jakieś sugestie?
Serendipity,
20

Mam Python 2.73 i Windows 7. Rozwiązanie, które działało dla mnie było:

  1. Dodano katalog bin mingw32 do zmiennej środowiskowej: dołącz PATH za pomocąC:\programs\mingw\bin;
  2. Utworzono distutils.cfg usytuowany przy C:\Python27\Lib\distutils\distutils.cfgzawierające:

    [build]
    compiler=mingw32

Aby poradzić sobie z tym, że MinGW nie rozpoznaje flagi -mno-cygwin, usuń flagę w linii C: \ Python27 \ Lib \ distutils \ cygwincompiler.py od 322 do 326, więc wygląda to tak:

  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
źródło
15

Sprawdź setup.pyplik pakietu, który próbujesz zainstalować. Jeśli jest to starszy pakiet, może on distutils.core.setup()raczej importować niż setuptools.setup().

Wpadłem na to (w 2015 r.) Z kombinacją tych czynników:

  1. Kompilator Microsoft Visual C ++ dla Python 2.7 z http://aka.ms/vcpython27

  2. Starszy pakiet, który używa distutils.core.setup()

  3. Próbuję zrobić python setup.py buildzamiast używać pip.

Jeśli użyjesz najnowszej wersji pip, wymusi to (monkeypatch), aby pakiet używał setuptools, nawet jeśli setup.pywymaga on distutils. Jednakże, jeśli nie używasz pip, a zamiast tego po prostu robisz python setup.py build, użyje procesu kompilacji distutils.core.setup(), który nie wie o lokalizacji instalacji kompilatora.


Rozwiązanie

Krok 1: Otwórz odpowiedni wiersz polecenia programu Visual C ++ 2008

Otwórz menu Start lub ekran Start i wyszukaj „Visual C ++ 2008 32-bit Command Prompt” (jeśli twój python jest 32-bitowy) lub „Visual C ++ 2008 64-bit Command Prompt” (jeśli twój python jest 64-bitowy) . Uruchom. Wiersz polecenia powinien zawierać Visual C ++ 2008 ... na pasku tytułu.

Krok 2: Ustaw zmienne środowiskowe

Ustaw te zmienne środowiskowe w właśnie otwartym wierszu polecenia.

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

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

Krok 3: Zbuduj i zainstaluj

cddo pakietu, który chcesz zbudować i uruchomić python setup.py build, a następnie python setup.py install. Jeśli chcesz zainstalować w virtualenv, aktywuj go przed kompilacją.

Christian Long
źródło
możesz także zbudować swój pakiet używając <code> pip </code> zamiast <code> python setup.py build </code>
aronadaal
9

Może ktoś może być zainteresowany, następujące działało dla mnie dla pakietu py2exe. (Mam Windows 7 64-bitowy i przenośny Python 2.7, Visual Studio 2005 Express z Windows SDK dla Windows 7 i .NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

następnie:

python.exe setup.py install
Stefano Fenu
źródło
Nie, masz rację, nie jestem pewien, co się stało, usunę oryginalny komentarz.
Dave Challis
1
Bardzo przydatne!! W moim przypadku ustawiłem „ustaw VS90COMNTOOLS =% VS110COMNTOOLS%”.
jrvidotti
@Exzile: tak, wpisujesz te polecenia w tej samej sesji wiersza polecenia
Stefano Fenu,
NIE RÓB TEGO!!! Zobacz tę odpowiedź, aby uzyskać więcej informacji.
Anonimowy
8

Spędziłem prawie 2 dni zastanawiając się, jak rozwiązać ten problem w 64-bitowej wersji Pythona 3.4: Python 3.4.3 (v3.4.3: 9b73f1c3e601, 24 lutego 2015 r., 22:44:40) [MSC v.1600 64 bit (AMD64 )] na Win32

Rozwiązanie 1, trudne: (przed przeczytaniem przeczytaj najpierw Rozwiązanie 2 poniżej) Wreszcie, to mi pomogło:

  1. zainstaluj Visual C ++ 2010 Express
  2. zainstaluj Microsoft Windows SDK v7.1 dla Windows 7
  3. utwórz plik ręcznie vcvars64.batwC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64 który zawiera CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64lub inną ścieżkę w zależności od tego, gdzie masz zainstalowany Ciebie
  4. (wydaje się to opcjonalne) zainstaluj Microsoft Visual Studio 2010 z dodatkiem Service Pack 1 wraz z aktualizacją kompilatora Microsoft Visual C ++ 2010 z dodatkiem Service Pack 1 dla Windows SDK 7.1
  5. po tym próbowałem, pip install numpyale otrzymałem następujący błąd:

    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

    Zmieniłem mfinfona Nonew C:\Python34\Lib\distutils\msvc9compiler.pytym https://stackoverflow.com/a/23099820/4383472

  6. w końcu po wydaniu pip install numpypolecenia mój program antywirusowy avast próbował zakłócić proces instalacji, ale szybko go wyłączyłem

Trwało to bardzo długo - kilka minut na kompilację numpy, nawet pomyślałem, że wystąpił błąd, ale w końcu wszystko było w porządku.

Rozwiązanie 2, łatwe: (Wiem, że to podejście zostało już wspomniane w wysoko głosowanej odpowiedzi , ale powtórzę, ponieważ to naprawdę jest łatwiejsze). Po przejściu całej tej pracy zrozumiałem, że najlepszym sposobem dla mnie jest po prostu użycie już prekompilowane pliki binarne z http://www.lfd.uci.edu/~gohlke/pythonlibs/ w przyszłości. Istnieje bardzo mała szansa, że ​​kiedykolwiek będę potrzebować pakietu (lub wersji pakietu), którego ta strona nie zawiera. Proces instalacji jest również znacznie szybszy. Na przykład, aby zainstalować numpy:

  1. donwload numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(jeśli masz Python 3.4 64-bit) z tej strony
  2. w wierszu polecenia lub programie PowerShell zainstaluj go za pomocą pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(lub pełną ścieżkę do pliku, w zależności od sposobu otwierania wiersza polecenia)
Zły
źródło
numpy ‑ 1.9.2 + mkl ‑ cp34 ‑ none ‑ win_amd64.whl - nie można znaleźć tego pliku w powyższym linku.
Amresh Giri,
7

Chciałem uruchomić pysph na Windows 10 pod Pythonem 2.7 i dostałem vcvarsall.bat nie został znaleziony (z distutils)

Moje rozwiązanie było następujące:

Zainstaluj Microsoft Visual C ++ dla Python 2.7 (jak sugerowany @Michael)

W systemie Windows 10 został zainstalowany (moja nazwa użytkownika to Andreas):

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

Ustaw zmienną środowiskową VS90COMNTOOLS na ścieżkę instalacyjną Visual C ++ dla Python 2.7 (patrz powyższa ścieżka).

Jeśli nadal nie działa, zmodyfikuj w module

C:/Python27/lib/distutils

plik msvc9compiler.py . Znajdź w nim funkcję find_vcvarsall i wykonaj następujące modyfikacje.

Zamień wiersz:

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

z

productdir = os.path.join(toolsdir)

To tutaj w moim przypadku znajduje się vcvarsall.bat (sprawdź, gdzie vcvarsall.bat znajduje się w twojej instalacji).

szefenne
źródło
Co ciekawe, %userprofile%\Appdata\Local\Programs\Commonjest dla mnie pusty.
Bryce Guinta,
Nawet po zainstalowaniu Microsoft Visual C ++ dla Python 2.7?
chiefenne
7

Napotkałem ten problem, gdy próbowałem zainstalować bibliotekę numpy na moim pythonie 3.5. Rozwiązaniem jest instalacja VS2015. Miałem VS2008, 2012, 2013, z których żaden nie jest zgodny z python 3.5. Najwyraźniej nowsza wersja Pythona jest zależna od nowszych wersji VS.

Upewnij się również, że C ++ Common Tools jest zainstalowany z Visual Studio.

wprowadź opis zdjęcia tutaj

DG
źródło
6

Wypróbowałem wszystkie powyższe odpowiedzi i okazało się, że wszystkie nie działają. Być może korzystałem z systemu Windows 8 i zainstalowałem program Visual Studio 2012. W tym przypadku robisz to.

vcvarsall.batPlik znajduje się tutaj: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

Po prostu wybierz plik i skopiuj go.

Następnie przejdź do tego katalogu: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

i wklej plik. A potem wszystko powinno być dobrze.

Games Brainiac
źródło
Nie wszystko poszło nie tak Śledziłem twoją odpowiedź, ale wciąż pojawia się ten sam błąd.
Stupid_Intern
6

Możesz pobrać bezpłatną wersję Visual C ++ 2008 Express Edition ze strony http://go.microsoft.com/?linkid=7729279 , która ustawia zmienną środowiskową VS90COMNTOOLS podczas instalacji, a tym samym kompiluje z kompatybilnym kompilatorem.

Jak wspomniano w komentarzu @PiotrDobrogost, jego odpowiedź na to drugie pytanie zawiera szczegółowe informacje na temat tego, dlaczego Visual C ++ 2008 jest właściwą rzeczą do budowania, ale może się to zmienić, gdy kompilacja Pythona w systemie Windows przechodzi do nowszych wersji Visual Studio: Building lxml dla Python 2.7 w systemie Windows

Eric Smith
źródło
Upewnij się również, czy nie ma zainstalowanych innych wersji. Miałem z tym problem. Sformatowałem ponownie komputer i zainstalowałem właśnie tę wersję. Ponieważ usunięcie wielu wersji VS zajęłoby mi tyle samo czasu.
jmunsch
6

Miałem ten problem przy użyciu Pythona 3.4.1 na Windows 7 x64 i niestety pakiety, których potrzebowałem, nie miały odpowiedniego pliku exe ani kół, których mógłbym użyć. Ten system wymaga kilku „obejść”, które opisano szczegółowo poniżej (i TLDR na dole ).

Korzystając z informacji zawartych w powyższej odpowiedzi Jaxrtecha , stwierdziłem, że potrzebuję programu Visual Studio C ++ 2010 (sys.version return MSC v.1600), więc zainstalowałem Visual C ++ 2010 Express z linku w jego odpowiedzi, czyli http://go.microsoft .com /? linkid = 9709949 . Zainstalowałem wszystko z aktualizacjami, ale jak możesz przeczytać poniżej, to był błąd. W tej chwili powinna być zainstalowana tylko oryginalna wersja Express (bez żadnych aktualizacji).

vcvarsall.bat był już obecny, ale nie był to nowy błąd podczas instalacji pakietu query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']. Istnieją inne pytania o przepełnienie stosu z tym błędem, takie jak Błędy podczas budowania / instalowania modułu C dla Pythona 2.7

Na podstawie tej odpowiedzi ustaliłem, że 2010 Express instaluje tylko 32-bitowe kompilatory. Aby uzyskać 64-bitowe (i inne) kompilatory, musisz zainstalować zestaw Windows 7.1 SDK. Zobacz http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

Nie zainstaluje się to jednak dla mnie, a instalator zwrócił błąd installation failed with return code 5100. Znalazłem rozwiązanie pod następującym linkiem: http://support.microsoft.com/kb/2717426 . Krótko mówiąc, jeśli nowsze wersje programów redystrybucyjnych Microsoft Visual C ++ 2010 x86 i x64 są zainstalowane, powodują one konflikt z wersjami instalatora SDK i najpierw wymagają odinstalowania.

Następnie SDK został zainstalowany, ale zauważyłem, że vcvars64.bat nadal nie istnieje C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin, ani jego podfoldery. vcvarsall.bat uruchamia plik wsadowy vcvars64, więc bez niego pakiet python nadal nie zostałby zainstalowany (zapomniałem pokazanego wówczas błędu).

Następnie znalazłem tutaj instrukcje: http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1 Postępując zgodnie z instrukcjami, zainstalowałem już Express i 7.1 SDK, więc zainstalowałem SDK 7.1 SP1 i zrobiłem brakująca poprawka pliku nagłówka. Następnie ręcznie utworzyłem plik vcvars64.bat z zawartościąCALL setenv /x64 . Wkleję tutaj wszystkie te instrukcje, aby się nie zgubiły.

Krok 1 to pobranie programu Visual Studio Express 2010.

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express to dobre miejsce na rozpoczęcie. Pobierz instalator i uruchom go (vc_web.exe). Nie potrzebujesz dodatkowego pobierania SQL 2008.

Będziesz także potrzebował zestawu Windows SDK (obecnie 7.1) dla kompilatorów 64-bitowych - chyba że chcesz wykonywać tylko wersje 32-bitowe, które nie są w pełni obsługiwane ...

http://www.microsoft.com/en-us/download/details.aspx?id=8279 to dobry punkt wyjścia do pobrania tego - po uruchomieniu winsdk_web.exe będziesz chciał uruchomić!

Domyślna instalacja tutaj jest w porządku.

Na koniec pobierz i zainstaluj aktualizację Windows SDK 7.1 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=4422

I, aby naprawić brakujący plik nagłówka, VS2010 SP1. http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

I, do cholery, napraw brakujący plik wsadowy dla VS2010 Express. To robi się wręcz absurdalne.

W C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64 utwórz plik „vcvars64.bat” w następujący sposób (musisz działać jako administrator):

CALL setenv / x64

Mój pakiet python nadal nie został zainstalowany (nie mogę przypomnieć sobie błędu). Następnie znalazłem instrukcje (skopiowane poniżej) dotyczące korzystania ze specjalnego wiersza polecenia SDK 7.1, patrz: https://mail.python.org/pipermail/distutils-sig/2012-Febrow/018300.html

Nie przejmuj się tym pytaniem. Ktoś tutaj zauważył ten element w menu: Start-> Wszystkie programy-> Microsoft Windows SDK v7.1 -> Wiersz polecenia Windows SDK 7.1

Spowoduje to uruchomienie zadania wsadowego, które wydaje się konfigurować środowisko robocze dla kompilatora. W tym monicie możesz wpisać „setup.py build” lub „setup.py install”.

Otworzyłem wiersz polecenia Windows SDK 7.1 zgodnie z instrukcją i użyłem go do uruchomienia easy_install na pakiecie python. I w końcu sukces!


TLDR ;

  1. Zainstaluj program Visual Studio Express 2010 (najlepiej bez zaktualizowanych składników redystrybucyjnych lub serwera SQL).
  2. Zainstaluj zestaw Windows 7.1 SDK
  3. Zainstaluj aktualizację SDK 7.1 SP1 i poprawkę pliku nagłówka SP20 VS2010 (ten krok może nie być wymagany).
  4. Twórz ręcznie C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batz zawartościąCALL setenv /x64
  5. Start-> Wszystkie programy-> Microsoft Windows SDK v7.1 -> Windows SDK 7.1 Wiersz polecenia, aby otworzyć specjalny wiersz polecenia x64, którego można następnie używać z python / easy_install / pip / etc (łącznie z tymi w virtual_envs).
neRok
źródło
4

Poniższe kroki naprawiły ten problem, próbowałem utworzyć konfigurację z rozszerzeniem cytonu.

  1. Zainstaluj kompilator Microsoft Visual C ++ dla Python 2.7
  2. Domyślna lokalizacja instalacji to @ C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ for Python To może faktycznie rozwiązać problem, przetestuj raz przed kontynuowaniem.
  3. Jeśli się nie powiedzie, sprawdź, gdzie w VC ++ znajduje się plik python vcvarsall.bat
  4. Otwórz plik msvc9compiler.py pakietu distutils w notatniku.
  5. W moim polu była to @ C: \ Anaconda2 \ Lib \ distutils \ msvc9compiler.py find_vcvarsall funkcja w tym pliku, określ wersję VC, wypisując argument wersji. W przypadku Python 2.7 prawdopodobnie będzie to 9.0
  6. Teraz utwórz zmienną środowiskową VS90COMNTOOLS, wskazując na C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ for Python \ 9.0 \ VC \ bin
  7. Z jakiegoś powodu distutils oczekuje, że plik vcvarsall.bat znajdzie się w katalogu VC, ale VC ++ dla narzędzi python ma go w katalogu głównym 9.0 Aby to naprawić, usuń „VC” z path.join (mniej więcej w linii 247)

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

Powyższe kroki naprawiły dla mnie problem.

Riyas Deen
źródło
Otrzymuję błąd łączenia po wykonaniu powyższych kroków LINK: błąd LNK2001: nierozwiązany symbol zewnętrzny init__init__ build \ temp.win-amd64-2.7 \ Release_ init_ .lib: błąd krytyczny LNK1120: 1 nierozwiązany błąd zewnętrzny: polecenie „C: \\ Użytkownicy \\ ma306477 \\ AppData \\ Local \\ Programs \\ Common \\ Microsoft \\ Visual C ++ for Python \\ 9.0 \\ VC \\ Bin \\ amd64 \\ link.exe 'nie powiodło się ze statusem wyjścia 1120
manish Prasad
3

Wypróbowałem wiele rozwiązań, ale tylko jedno działało dla mnie, instalacja Microsoft Visual Studio 2008 Express C ++.

Mam ten problem z modułem Python 2.7 napisanym w C (yEnc, który ma inne problemy z MS VS). Zauważ, że Python 2.7 jest zbudowany z wersją MS VS 2008, a nie 2010!

Pomimo tego, że jest bezpłatny, trudno go znaleźć, ponieważ MS promuje VS 2010. Mimo to oficjalne bardzo bezpośrednie linki MSDN nadal działają: sprawdź https://stackoverflow.com/a/15319069/2227298, aby pobrać linki do pobrania.

KrisWebDev
źródło
Tak, najlepszym sposobem jest instalacja VS2008.
pylover
3

Jeśli masz zainstalowany mingw

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

działa, zmuszając pip do budowania przy użyciu kompilatora mingw zamiast Microsoft. Zobacz tutaj https://github.com/pypa/pip/issues/18 w celu uzyskania szczegółowych informacji (ostatni post).

Nicolas78
źródło
3

Najłatwiejszym sposobem rozwiązania tego w 2016 roku jest zainstalowanie Chocolatey, a następnie vcpython27pakietu. Otwórz PowerShell:

> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
> choco install python2 -y
> choco install vcpython27 -y
Chris S.
źródło
2

Nie wiem, czy jest za późno, ale znalazłem kompilator Microsoft Visual C ++ dla Pythona 2.7, który czyta

Typowy komunikat o błędzie, który otrzymasz, jeśli potrzebujesz tego pakietu kompilatora, to Nie można znaleźć pliku vcvarsall.bat

Mam nadzieję że to pomoże!

mkamioner
źródło
2

Mam ten sam problem i w tej chwili go rozwiązałem.

„Google” powiedział mi, że muszę zainstalować „Microsoft Visual C ++ Compiler for Python 2.7”. Instaluję nie tylko narzędzie, ale także Visual C ++ 2008 Reditributable, ale to nie pomogło. Następnie próbowałem zainstalować program Visual C ++ 2008 Express Edition. Problem zniknął!

Spróbuj zainstalować program Visual C ++ 2008 Express Edition!

Wowa
źródło
2

wywołanie import setuptoolsspowoduje dodanie łatek distutils w celu wymuszenia zgodności z Visual Studio. Wywołanie vcvars32.batręczne spowoduje skonfigurowanie środowiska wirtualnego i zapobiegnie innym częstym błędom generowanym przez kompilator. Dla VS 2017 plik znajduje się na

„C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ Auxiliary \ Build \ vcvars32.bat”

Oto skrypt instalacyjny, którego używam do szybkiej kompilacji plików .pyx do .pyd: (Uwaga: używa zewnętrznego modułu 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()
użytkownik2682863
źródło
Rzeczywiście, import setuptoolspomaga, także w przypadku kompilacji cytonów .
Basj
czy mógłbyś wyjaśnić nieco bardziej szczegółowo? jak ręcznie wywołać vcvars32.bat? Mam kompilację cytonów
czerwiec Wang
2

Użyj tego łącza, aby pobrać i zainstalować Narzędzia do kompilacji Visual C ++ 2015 . Automatycznie pobierze visualcppbuildtools_full.exei zainstaluje Visual C ++ 14.0 bez faktycznej instalacji Visual Studio. Po zakończeniu instalacji spróbuj ponownie zainstalować pip, a błąd nie pojawi się ponownie.

Przetestowałem to na następującej platformie i wersjach:

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.
źródło
1

Jeśli chcesz zainstalować pyodbc na Windowsie, to nie zainstalowano programu Visual Studio, inną opcją jest ręczna instalacja pyodbc za pomocą dystrybucji binarnej.

Jest to szczególnie przydatne, jeśli nie masz uprawnień administratora na komputerze, z którym pracujesz i próbujesz skonfigurować virtualenv .

Kroki:

  1. Pobierz najnowszy instalator Windows stąd (pyodbc-XXXwin-Y-py2.7.exe)
  2. Otwórz plik wykonywalny instalatora za pomocą 7-Zip (lub WinRAR lub cokolwiek innego)
  3. Wyodrębnij pyodbc.pyd i pyodbc-XXX-py2.7.egg-info i umieść je w [python installation directory or virtualenv]\Lib\site-packages
  4. Nie ma kroku 4 :)
Dane B
źródło
1

W Pythonie 3.4 zależność dotyczy programu Visual Studio 2010. Zainstalowanie programu Visual C ++ 2010 Express rozwiązało problem.

Oszukanie go przy użyciu instalacji VS 2008 lub 2013, które przypadkiem nie działały.

gmjonker
źródło
1

Możesz użyć easy_install zamiast pip, to działa dla mnie.

Abdul Majeed
źródło
Ten sam błąderror: Setup script exited with error: Unable to find vcvarsall.bat
Stephan Schielke
1

Odpowiedź udzielona przez @monkey jest jedną z poprawnych, ale jest niepełna.

Jeśli chcesz użyć MinGW , powinieneś wybrać C, C ++, a także inne narzędzia programistyczne sugerowane podczas procesu instalacji MinGW, aby uzyskać również „make.exe”.

Musisz także ustawić ścieżkę make.exe w env.

Aby wypełnić swoją odpowiedź, oto kroki:

  1. Dodaj katalog bin mingw32 do zmiennych środowiskowych
  2. Dołącz C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;do ŚCIEŻKI
  3. Edytuj (utwórz, jeśli nie istnieje) distutils.cfgplik znajdujący się w C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32

Upewnij się, że zmienne środowiskowe są ustawione, otwierając nowy plik cmd.exe.

Olivier N.
źródło
32-bitowe moduły python powinny być kompilowane z 32-bitowym mingw, podczas gdy 64-bitowe moduły python powinny być kompilowane z 64-bitowym mingw. W 64-bitowym Cygwin dostępne są 2 pliki wykonywalne mingw: x86_64-w64-mingw32-gccoraz i686-w64-mingw32-gcc. Te pliki wykonywalne są najwyraźniej takie same, jak te, które można normalnie uzyskać od Mingw (po prostu skompilowane w środowisku Cygwin).
CMCDragonkai