помилка: неможливо знайти vcvarsall.bat


851

Я спробував встановити пакет Python dulwich :

pip install dulwich

Але я отримую критичне повідомлення про помилку:

error: Unable to find vcvarsall.bat

Те саме відбувається, якщо я спробую встановити пакет вручну:

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

6
Для подальшого ознайомлення було б непогано подивитися, на якій платформі ви цим користуєтеся.
viam0Zah

47
Якщо ви думаєте, що це глузливо криптичне та непосильне повідомлення про помилку, будь ласка, проголосуйте за помилку на bugs.python.org/issue2943
Полковник Паніка

48
Тепер Microsoft пропонує рішення: microsoft.com/en-us/download/details.aspx?id=44266
Martijn Pieters

6
@MartijnPieters Я спробував завантажити та встановити посилання, яке ви надали за допомогою колеса та setuptools 7.0, але воно не працює, я отримую повідомлення: 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
Стів Доуер (хлопець з команди Python Microsoft) написав публікацію в блозі на цю тему, яку варто прочитати: blogs.msdn.microsoft.com/pythonengineering/2016/04/11/…
Cody Piersall

Відповіді:


683

Оновлення : коментарі вказують, що інструкції тут можуть бути небезпечними. Подумайте про використання випуску Visual C ++ 2008 Express або спеціального компілятора Microsoft Visual C ++ для Python ( деталі ), а НЕ використовуйте оригінальну відповідь нижче. Оригінальне повідомлення про помилку означає, що потрібна версія Visual C ++ не встановлена.


Для установок Windows:

Під час запуску setup.py для встановлення пакетів, Python 2.7 здійснює пошук встановленої Visual Studio 2008. Ви можете підманути Python використовувати новішу Visual Studio, встановивши правильний шлях до VS90COMNTOOLSзмінної середовища перед викликом setup.py.

Виконайте таку команду на основі встановленої версії 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%

ПОПЕРЕДЖЕННЯ. Як зазначено нижче, ця відповідь навряд чи спрацює, якщо ви намагаєтеся скласти модулі python.

Докладніше див. Створення lxml для Python 2.7 у Windows .


21
Це зробило для мене :(
fmuecke

8
@Gili: Схоже, ця проблема пов’язана з пробілами в змінній, спробуйте обернути її в лапки. Для мене% VS100COMNTOOLS% = "C: \ програмні файли (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools"
legends2k

7
Це не допоможе багатьом речам, тому що Python покладається на VS2008. Подивіться на цей відповідь: stackoverflow.com/questions/6551724 / ...
shezi

182
УВАГА!!! Це неправильна відповідь. Ні в якому разі не слід компілювати розширення Python C, використовуючи інший (версію) компілятор, що той, який використовувався для компіляції самого Python як цих двох (версій) компіляторів, мабуть, матиме несумісні бібліотеки виконання C. Дивіться цю відповідь для отримання більш детальної інформації.
Пьотр Доброгост

72
Ви можете завантажити безкоштовну програму Visual C ++ 2008 Express Edition з go.microsoft.com/?linkid=7729279 , яка встановить змінну середовища VS90COMNTOOLS під час встановлення і, отже, створить сумісний компілятор.
Ерік Сміт

225

Я знайшов рішення. У мене була та сама проблема, що і помилка, встановивши "amara". У мене був встановлений mingw32, але для настройки потрібні були distutils.

  1. У мене вже встановлений Python 2.6.
  2. Я встановив mingw32 до C:\programs\mingw\
  3. Додайте каталог бін mingw32 до змінної вашого середовища: додайте c:\programs\MinGW\bin;до PATH
  4. Відредагуйте (створіть, якщо не існує) файл distutils.cfg, розташований у C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32
  5. Тепер біжи easy_install.exe amara.

Переконайтесь, що середовище встановлено, відкривши нове cmd.exe.


45
Це чудово працює для Python2.6, але я чомусь не можу змусити його працювати на Python2.7. Це працює, якщо я завантажую джерело свого пакета та встановлюю за допомогою "python setup.py install --compile = mingw32", але чомусь за допомогою easy_install або pip все ж намагаюся знайти vcvarsall.
Джонатан Хартлі

2
Я , нарешті , отримав scikits.image встановити в Python (х, у) 2,7 шляхом додавання C:\msysgit\mingw\mingw32\binі C:\msysgit\mingw\binдо призначеного для користувача PATH і перезапуску Spyder перед запуском pip installзнову
ендоліти

20
Там немає необхідності постійно перезавантажуватися з - за зміни змінної оточення. Відкриття нового процесу cmd.exe достатньо.
Томалак

11
Я все одно не зміг цього виправити. Це помилка: gcc: error: unrecognized command line option '-mno-cygwin' error: Setup script exited with error: command 'gcc' failed with exit status 1післяeasy_install.exe amara
користувач

5
@user, ви повинні відкрити цей файл: C:\Python27\Lib\distutils\cygwincompiler.pyі видалити з нього всі виникнення –mno-cygwin; це тому, що останні версії GCC видалили –mno-cygwinваріант, і його там не повинно бути.
Зейнаб Аббасімазар

220

Ви можете встановити компільовану версію з http://www.lfd.uci.edu/~gohlke/pythonlibs/


15
лише порада: ви можете встановити пакунок з цього сайту у virtualenv, запустивши easy_install binary_installer_built_with_distutils.exeу virtualenv, кодируючись до цієї відповіді .
Янж

14
Про це повинен знати кожен розробник Python Windows
старший школяр

1
Ви також можете wheel convert ....exeвстановити ці інсталятори, а потім встановити їх за допомогою pip, коли завгодно.
Zooba

3
Якщо бути точнішим, lfd.uci.edu/~gohlke/pythonlibs/#mysql-python та одного разу завантаживши відкрити термінал як адміністратор і запуститиpython -m pip install <filename>
arun

Свята мати Божа, це прямо на місці. Працює як шарм, TY :)
Амір

162

Якщо ви хочете компілювати з Visual Studio C ++ замість mingw ...

  1. Запустіть, python.exeщоб відобразити, з якою версією VC ++ вона була складена (приклад показаний нижче).

    Це важливо використовувати відповідну версію компілятора Visual C ++ , що Python було скомпільовано з так distilutils «и get_build_versionзапобігає змішуванню версій ( на попередження Piotr в ).

    • Жовтий (вгорі) - Python 2.7, складений з MSC v.1500 (Visual Studio C ++ 2008)
    • Червоним (знизу) є Python 3.4.1, складений з MSC v.1600 (Visual Studio C ++ 2010)

    Приклад з командного рядка, що показує Python 2.7, складений з MSC v.1500 та Python 3.4.1, складений з MSC v.1600

  2. Використовуйте таблицю нижче [1], щоб відповідати внутрішній версії VC ++ із відповідним випуском 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. Завантажте та встановіть відповідну версію Visual Studio C ++ з попереднього кроку.
    Додаткові примітки до конкретних версій VC ++ наведені нижче.

    Примітки для Visual Studio C ++ 2008

    Для тільки на 32-бітних компіляторів, скачати Visual Studio C ++ 2008 Express Edition .

    Для 64-розрядних компіляторів [2] [3] завантажте Windows SDK для Windows 7 та .NET Framework 3.5 SP1 .

    • Зніміть прапорець усе, крім того, Developer Tools >> Visual C++ Compilersщоб заощадити час та дисковий простір від встановлення інструментів SDK, які інакше вам не потрібні.

    Примітки для Visual Studio C ++ 2010

    За даними Microsoft, якщо ви встановили Visual Studio 2010 SP1, він, можливо, видалив компілятори та бібліотеки для VC ++.
    Якщо це так, завантажте оновлення Visual C ++ 2010 SP1 Compiler .

    Примітки для Visual Studio C ++ 2015

    Якщо IDE Visual Studio вам не потрібен, завантажте Visual Studio C ++ 2015 Build Tools .

    Примітки для Visual Studio C ++ 2017

    Якщо вам не потрібен IDE Visual Studio, завантажте засоби збирання для Visual Studio 2017 .

    Рекомендація : Якщо у вас встановлена ​​32- та 64-розрядна установка Python, ви також можете використовувати virtualenv для створення окремих середовищ Python, щоб ви могли одночасно використовувати те чи інше, не псуючи свій шлях, щоб вибрати, до якої версії Python вибрати використання.

Відповідно до @srodriguex , ви можете пропустити завантаження пакетного файлу вручну (кроки 4-6), замість цього скопіювавши декілька пакетних файлів, куди шукає Python, дотримуючись цієї відповіді . Якщо це не працює, ось наступні кроки, які спочатку працювали для мене.

  1. Відкрити a cmd.exe

  2. Перш ніж спробувати встановити щось, для чого потрібні розширення C, запустіть наступний пакетний файл, щоб завантажити сеанс компілятора VC ++ у сеанс (тобто змінні середовища, шлях до компілятора тощо).

    Виконати:

    • 32-бітні компілятори:

      Примітка : 32-розрядні установки Windows матимуть лише так, C:\Program Files\як очікувалося

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

    • 64-бітні компілятори:

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

      Примітка . Так, вбудовані 64-бітні компілятори є Program Files (x86). Не питайте мене, чому.
      Крім того, якщо вам цікаво, чим відрізняється vcvars64.batта, що vcvarsx86_amd64.batще важливіше, різниця між amd64і x86_amd64, перші - для нативного 64-бітного інструмента компілятора, а останні - це 64-розрядні крос-компілятори, які можуть працювати на 32-бітній установці Windows .

    Оновлення:
    Якщо з якихось причин ви потрапляєте error: ... was unexpected at this time.там, де ...є якась серія символів, то вам потрібно перевірити, чи немає у вашій змінній шляху жодних сторонніх символів, як додаткові цитати або бродячі символи. Пакетний файл не зможе оновити шлях вашого сеансу, якщо він не може мати сенс в першу чергу.

  3. Якщо це пішло добре, ви повинні отримати одне з наступних повідомлень, залежно від версії VC ++ та якої команди ви виконували:

    Для 32-розрядних інструментів компіляції:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    Для 64-розрядних інструментів компіляції:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. Тепер запустіть налаштування через python setup.py installабоpip install pkg-name

  5. Сподівайтеся і схрестіть пальці, що планети вирівняні правильно, щоб VC ++ співпрацював.


Не можу рекомендувати досить , що ви дійсно пройти через біль відразу переходити на 64 біт. Це лише питання часу, перш ніж вам буде потрібно більше 4 Гб адресного простору. Я розмовляю з болісного досвіду після того, як пройшов 32 біт, тому що це було набагато простіше, потім потрібно було видалити все, включаючи залежності і перейти на 64 біт. Майже цілі вихідні.
Томас Браун

1
Потім я знову забуваю, скільки людей доведеться використовувати Python для набагато більших завдань. І @ThomasBrowne, я впевнений, що це було болісне і непотрібне зло досвіду. Я розглядаю це, і, сподіваюся, щось зможу знайти. Основне питання полягало в тому, що Visual Studio C ++ 2008 Express не постачається з 64-розрядним компілятором, але я впевнений, що його десь немає.
Джош Боуден

Щойно оновив його додатковою інформацією про те, як отримати 64-бітні компілятори, якщо вони вам потрібні.
Джош Боуден

У моєму випадку я виконую крок 1 вище та пропускаю решту після цієї відповіді . Тепер я можу встановлювати пакети, уникаючи роздратування роботи .bat.
srodriguex

@srodriguex добре в цьому випадку, схоже, Python передбачає, що 64-бітні інструменти компілятора завантажуються в PATH, використовуючи те, що він шукає ...\VC\bin\vcvarsamd64.batі ...\VC\bin\amd64\vcvarsamd64.bat.
Джош Боуден

73

Що відбувається? Модулі Python можуть бути написані частиною C або C ++ (як правило, для швидкості). Якщо ви спробуєте встановити такий пакет за допомогою Pip (або setup.py), він повинен скомпілювати цей C / C ++ з джерела. Pip нахабно вважатиме вас встановленим компілятором Microsoft Visual C ++. Якщо у вас його немає, ви побачите це крипто-повідомлення про помилку "Помилка. Неможливо знайти vcvarsall.bat".

Зазначене рішення - встановити компілятор C / C ++, або Microsoft Visual C ++, або MinGW (проект з відкритим кодом). Однак встановити та налаштувати будь-яке надмірно складно. (Редагувати 2014: Microsoft опублікувала спеціальний компілятор C ++ для Python 2.7)

Найпростішим рішенням є використання інсталяторів Windows (.msi) Крістофа Гольке для популярних пакетів Python. Він створює інсталятори для Python 2.x та 3.x, 32-х та 64-бітових. Ви можете завантажити їх з http://www.lfd.uci.edu/~gohlke/pythonlibs/


Якщо ви теж думаєте, що "Помилка: Не вдається знайти vcvarsall.bat" - це глузливе криптове та непосильне повідомлення, то, будь ласка, прокоментуйте помилку на веб-сторінці http://bugs.python.org/issue2943, щоб замінити її на більш корисну та корисну для користувачів, дружнє повідомлення.

Для порівняння, Ruby постачається з менеджером пакунків Gem і пропонує квазіофіційний компілятор C / C ++ DevKit. Якщо ви спробуєте встановити пакет без нього, ви побачите це корисне корисне повідомлення:

Оновіть свій PATH, щоб включити інструменти збирання або завантажити DevKit з http://rubyinstaller.org/downloads та дотримуйтесь інструкцій на веб- сторінці http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Докладніше про упаковку Python можна прочитати на веб- сайті https://stackoverflow.com/a/13445719/284795


Як я можу використовувати pip для встановлення цього попередньо складеного виконуваного файлу у моєму віртуальному середовищі?
Shailen

@shailenTJ гарне запитання. Я ніколи цього не робив, але спробуйте stackoverflow.com/a/5442340/284795
Полковник Паніка

Це було найкращим / найпростішим рішенням, яке мені відомо. Дякую.
користувач1477388

Ця редакція 2014 року - найкраща відповідь для мене. Легко пропустити інструкцію: переконайтеся, що ви оновлюєте setuptoolsверсію 6.0чи версію за допомогою pip install setuptools --upgrade.
Орладе

64

Вам потрібно буде встановити компілятор Microsoft, сумісний з компілятором, який використовується для створення Python. Це означає, що вам потрібен Visual C ++ 2008 (або новіший з певним налаштуванням ).

Тепер Microsoft постачає комплектний компілятор і заголовки лише для того, щоб мати можливість компілювати розширення Python за пам’ятною URL-адресою:

Компілятор Microsoft Visual C ++ для Python 2.7

http://aka.ms/vcpython27

Це порівняно невеликий пакет; 85 Мб для завантаження, встановлення без прав адміністратора, не потрібно перезавантажувати. Назва трохи вводить в оману, компілятор буде працювати для будь-якої версії Python, спочатку складеної з Visual C ++ 2008, а не лише з Python 2.7.

Якщо ви запускаєте інтерактивний запит Python або друкуєте sys.version, шукайте MSCрядок версії; якщо це, то MSC v.1500ви можете скористатися цим інструментом.

Від оригінального оголошення до списку distutils :

Microsoft випустила пакет компілятора для Python 2.7, щоб людям було простіше будувати та розповсюджувати свої модулі розширення C у Windows. Компілятор Microsoft Visual C ++ для Python 2.7 (він же VC9) доступний на веб-сайті: http://aka.ms/vcpython27

Цей пакет містить усі інструменти та заголовки, необхідні для складання модулів розширення C для 32-розрядного та 64-бітного Python 2.7 (зауважте, що для деяких модулів розширення потрібні сторонні залежності, такі як OpenSSL або libxml2, які не включені). Інші версії Python, побудовані з Visual C ++ 2008, також підтримуються, тому "Python 2.7" - це просто реклама - вона буде добре працювати з 2.6 та 3.2.

Зауважте, що вам потрібно встановити setuptools6.0 або новішу версію (вказану в системних вимогах на сторінці завантаження). Проект, який ви встановлюєте, повинен використовувати setuptools.setup(), а не distutilsавтоматичне виявлення не працюватиме.

Microsoft заявила, що вони хочуть підтримувати стабільність URL-адреси, щоб автоматичні сценарії могли легко посилатися на неї.


2
Згідно з моїм іншим коментарем, ви можете переконатися, що setuptoolsце актуально pip install setuptools --upgrade.
Орладе

Я розглядав питання, в чому полягає відповідна логіка, setuptoolsа не distutils- врешті-решт, побудова модулів - це основна функціональність, і у неї є відповідний код, але старша його версія. Схоже, що distutilsтехнічні працівники просто відмовилися від підтримки всіх можливих варіантів MSSDK і перенесли цю роботу на своїх setuptoolsнетерплячих колег.
ivan_pozdeev

1
@ivan_pozdeev: setuptoolsтакож може виходити набагато частіше, ніж distutilsвключений у цикл випуску Python може. І distitutilsсправді перейшов у своєрідний режим обслуговування, і робота над новими системами планується замінити. Ця робота замість цього застопорилася.
Martijn Pieters

cython використовує distutils, вам потрібно імпортувати setuptools, які мавпа-патчі distutils: github.com/cython/cython/wiki/CythonExtensionsOnWindows
denfromufa

54

У мене просто була ця сама проблема, тому я розповім тут свою історію, сподіваючись, що це допоможе комусь іншим із тими ж проблемами і врятує їх пару годин, які я щойно провів:

У мене є mingw (g ++ (GCC) 4.6.1) та python 2.7.3 у вікні Windows 7, і я намагаюся встановити PyCrypto.

Все почалося з цієї помилки під час запуску setup.py install:

error: Unable to find vcvarsall.bat

Легко вирішується після googling помилки, вказавши mingw як компілятор вибору:

setup.py install build --compiler=mingw32

Проблема в тому, що тоді я отримав іншу помилку:

configure: error: cannot run C compiled programs.

Виявляється, мій антивірус блокував виконання щойно складеного .exe. Я просто відключив антивірус "мешканець щита" і перейшов до наступної помилки:

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

Це вирішило це: "Або встановіть трохи старшу версію MinGW, або відредагуйте distutils \ cygwinccompiler.py у вашому каталозі Python, щоб видалити всі екземпляри -mno-cygwin." ( звідси )

Тепер я можу нарешті почати працювати.


7
Вам також знадобиться версія, сумісна з MinGW, бібліотеки Python. Дивіться eli.thegreenplace.net/2008/06/28/… для отримання додаткової інформації
Gili

Повороти: D
Xilpex

23

Схоже, він шукає компілятори VC, тому ви можете спробувати згадати тип компілятора -c mingw32, оскільки у вас є msys

python setup.py install -c mingw32

16
Тільки щоб уточнити, команда, яка працює: python setup.py build --compiler=mingw32слідує заpython setup.py install
Еміль Стенстрем

Після запуску python setup.py build --compiler = mingw32 я отримую ImportError: Немає модуля з ім'ям Cython.Distutils, поки Cython встановлений під Anaconda. Будь-які пропозиції?
Serendipity

20

У мене є python 2.73 та Windows 7. Рішення, яке працювало для мене, було:

  1. До змінної середовища додано каталог bin mingw32: додати PATH зC:\programs\mingw\bin;
  2. Створено distutils.cfg, розміщеному за адресою C:\Python27\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32

Щоб мати справу з тим, що MinGW більше не розпізнає прапор -mno-cygwin, видаліть прапор у рядку 322 до 326 C: \ Python27 \ Lib \ distutils \ cygwincompiler.py, так це виглядає приблизно так:

  self.set_executables(compiler='gcc -O -Wall',
                         compiler_so='gcc -mdll -O -Wall',
                         compiler_cxx='g++ -O -Wall',
                         linker_exe='gcc',
                         linker_so='%s %s %s'
                                    % (self.linker_dll, shared_option,
                                       entry_point))

15

Подивіться у setup.pyфайл пакету, який ви намагаєтесь встановити. Якщо це старіший пакет, він може імпортувати, distutils.core.setup()а не setuptools.setup().

Я зіткнувся з цим (у 2015 році) із поєднанням цих факторів:

  1. Компілятор Microsoft Visual C ++ для Python 2.7 від http://aka.ms/vcpython27

  2. Старіший пакет, який використовує distutils.core.setup()

  3. Намагається зробити, python setup.py buildа не використовувати pip.

Якщо ви користуєтеся останньою версією pip, вона змусить (monkeypatch) пакет використовувати setuptools, навіть якщо його setup.pyвиклики для distutils. Однак якщо ви не використовуєте pip, а замість цього просто робите python setup.py build, буде використаний процес збирання distutils.core.setup(), який не знає про місце встановлення компілятора.


Рішення

Крок 1: Відкрийте відповідний командний рядок Visual C ++ 2008

Відкрийте меню «Пуск» або екран «Пуск» та знайдіть «32-розрядний командний рядок Visual C ++ 2008» (якщо ваш пітон 32-розрядний) або «64-розрядний командний рядок Visual C ++ 2008» (якщо ваш пітон 64-розрядний) . Виконати його. В рядку заголовка командного рядка повинно бути написано Visual C ++ 2008 ...

Крок 2: Встановити змінні середовища

Встановіть ці змінні середовища в щойно відкритому командному рядку.

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

Довідка http://bugs.python.org/issue23246

Крок 3: Складіть і встановіть

cdдо пакета, який ви хочете скласти, а python setup.py buildпотім запустіть python setup.py install. Якщо ви хочете встановити в virtualenv, активуйте його перед тим, як створити.


ви також можете створити свій пакет, використовуючи <code> pip </code> замість <code> python setup.py build </code>
aronadaal

9

Можливо, хтось може бути зацікавлений, наступне працювало для мене для пакету py2exe. (У мене Windows 7 64-бітний і портативний python 2.7, Visual Studio 2005 Express із Windows SDK для Windows 7 та .NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

тоді:

python.exe setup.py install

Ні, ти маєш рацію, я не впевнений, що сталося, видалю оригінальний коментар.
Дейв Шалліс

1
Дуже корисний!! У моєму випадку я зробив "встановити VS90COMNTOOLS =% VS110COMNTOOLS%".
jrvidotti

@Exzile: так, ви вводите ці команди на одному і тому ж сеансі командного рядка
Stefano Fenu

НЕ РОБИ ЦЬОГО!!! Дивіться цю відповідь для отримання більш детальної інформації.
Анонім

8

Я витратив майже 2 дні, розбираючись, як виправити цю проблему в моєму python 3.4 64-бітній версії: Python 3.4.3 (v3.4.3: 9b73f1c3e601, 24 лютого 2015, 22:44:40) [MSC v.1600 64 біт (AMD64 )] на win32

Рішення 1, важке: (перш ніж прочитати це, прочитайте перше рішення 2 нижче) Нарешті, ось що мені допомогло:

  1. встановити Visual C ++ 2010 Express
  2. встановити Microsoft Windows SDK v7.1 для Windows 7
  3. створити вручну файл, vcvars64.batу C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64якому міститься CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64інший шлях, залежно від того, де у вас встановлений ваш файл
  4. (це здається необов'язковим) встановіть пакет оновлень 1 для пакета оновлень Microsoft Visual Studio 2010 разом із оновленням компілятора Microsoft Visual C ++ 2010 для оновлення SDK 7.1 для Windows
  5. після цього я спробував, pip install numpyале отримав таку помилку:

    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

    Я змінив mfinfoна Noneв C:\Python34\Lib\distutils\msvc9compiler.pyна цьому https://stackoverflow.com/a/23099820/4383472

  6. нарешті після pip install numpyкоманди мій антивірус avast намагався втручатися в процес встановлення, але я швидко його відключив

Минуло дуже багато часу - кілька хвилин, щоб numpy склався, я навіть подумав, що сталася помилка, але нарешті все було нормально.

Рішення 2, просте: (Я знаю, що цей підхід уже згадувався у високоголосній відповіді , але дозвольте повторити, оскільки це дійсно простіше) Після проходження всієї цієї роботи я зрозумів, що найкращий спосіб для мене - просто використовувати вже заздалегідь складені двійкові файли з http://www.lfd.uci.edu/~gohlke/pythonlibs/ у майбутньому. Є дуже маленький шанс, що мені коли-небудь знадобиться який-небудь пакет (або версія пакету), яку цей сайт не містить. Процес установки також набагато швидше. Наприклад, встановити numpy:

  1. donwload numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(якщо у вас 64-розрядна версія Python 3.4) з цього сайту
  2. в командному рядку або повноваження встановіть його за допомогою pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(або повний шлях до файлу залежно від того, як відкривається командна строка )

numpy ‑ 1.9.2 + mkl ‑ cp34 ‑ none ‑ win_amd64.whl - не можна знайти цей файл за вищезазначеним посиланням.
Amresh Giri

7

Я хотів запустити pysph в Windows 10 під Python 2.7 і отримав vcvarsall.bat не знайдено (з distutils)

Моє рішення полягало в наступному:

Встановіть Microsoft Visual C ++ для Python 2.7 (наприклад, @Michael запропоновано)

У Windows 10 він був встановлений (моє ім’я користувача - Andreas):

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

Встановіть змінну середовища VS90COMNTOOLS на шлях установки Visual C ++ для Python 2.7 (див. Вище шлях).

Якщо вона все ще не працює, модифікуйте в модулі

C:/Python27/lib/distutils

файл msvc9compiler.py . Знайдіть у ньому функцію find_vcvarsall і виконайте наступні модифікації.

Замініть рядок:

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

з

productdir = os.path.join(toolsdir)

Тут в моєму випадку знаходиться vcvarsall.bat (перевірте, де vcvarsall.bat знаходиться у вашій установці).


Цікаво, що %userprofile%\Appdata\Local\Programs\Commonдля мене це порожньо.
Брайс Гінта

Навіть після встановлення Microsoft Visual C ++ для Python 2.7?
шефенне

7

З цією проблемою я зіткнувся, коли спробував встановити бібліотеку numpy на своєму python 3.5. Рішення - встановити VS2015. У мене був VS2008, 2012, 2013, жоден з яких не сумісний з python 3.5. Мабуть, новіша версія python має залежність від новіших версій VS.

Також переконайтесь, що C ++ поширені інструменти встановлені разом із Visual Studio.

введіть тут опис зображення


6

Я спробував усі вищевказані відповіді, і виявив, що всі вони не працюють. Це, мабуть, я використовував Windows 8 і встановив Visual Studio 2012. У цьому випадку це те, що ти робиш.

vcvarsall.batФайл знаходиться тут: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

Просто виберіть файл та скопіюйте його.

Потім перейдіть до цього каталогу: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

і вставити файл. І тоді все повинно бути добре.


Нічого не добре, я дотримувався вашої відповіді, але все-таки я отримую ту ж помилку.
Stupid_Intern

6

Ви можете завантажити безкоштовну програму Visual C ++ 2008 Express Edition з http://go.microsoft.com/?linkid=7729279 , яка встановить змінну середовища VS90COMNTOOLS під час встановлення і, отже, створить сумісний компілятор.

Як @PiotrDobrogost згадував у коментарі, його відповідь на це інше питання вказує на деталі про те, чому Visual C ++ 2008 - це правильна річ, з якої слід будувати, але це може змінитися, коли збірка Windows Python переходить на новіші версії Visual Studio: Building lxml для Python 2.7 в Windows


Також переконайтесь, що не встановлено інших версій. Мені було важко з цим. Я переформатував комп’ютер і встановив саме цю версію. Оскільки видалення декількох версій VS зайняло б мене так само довго.
jmunsch

6

У мене була ця проблема при використанні Python 3.4.1 на Windows 7 x64 , і, на жаль, потрібні мені пакунки не мали відповідних файлів Exe або коліс, які я міг би використовувати. Ця система потребує декількох "обхідних шляхів", які детально описані нижче (та TLDR внизу ).

Використовуючи інформацію у відповіді Jaxrtech вище , я визначив, що мені потрібна Visual Studio C ++ 2010 (повернення sys.version MSC v.1600), тому я встановив Visual C ++ 2010 Express за посиланням у своїй відповіді, який http://go.microsoft .com /? linkid = 9709949 . Я встановив усе з оновленнями, але як ви можете прочитати нижче, це була помилка. Наразі має бути встановлена ​​лише оригінальна версія Express (нічого не оновлено).

vcvarsall.bat тепер присутній, але з'явилася нова помилка при установці пакету, query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']. Є інші питання stackoverflow з цією помилкою, такі як Помилки під час складання / встановлення модуля C для Python 2.7

З цієї відповіді я визначив, що 2010 Express встановлює лише 32-бітні компілятори. Щоб отримати 64-розрядні (та інші) компілятори, вам потрібно встановити Windows 7.1 SDK. Дивіться http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

Це не встановило б для мене, і інсталятор повернув помилку installation failed with return code 5100. Я знайшов рішення за наступним посиланням: http://support.microsoft.com/kb/2717426 . Коротше кажучи, якщо нові версії x86 та x64 Microsoft Visual C ++ 2010 Redistributable's встановлені, вони конфліктують з версіями в інсталяторі SDK та потребують попереднього видалення.

Потім SDK встановився, але я помітив, що vcvars64.bat досі не існував у C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\binні його підпапках. vcvarsall.bat запускає пакетний файл vcvars64, тому без нього пакет python все одно не встановиться (я забув помилку, яка була показана в цей час).

Потім я знайшов тут кілька інструкцій: http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1 Виконуючи інструкції, я вже встановив Express та 7.1 SDK, тому встановив SDK 7.1 SP1, відсутнє виправлення файлу заголовка. Потім я вручну створив vcvars64.bat із вмістом CALL setenv /x64. Я вставлю всі ці інструкції сюди, щоб вони не загубилися.

Крок 1 - завантажити Visual Studio Express 2010.

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express - це гарне місце для початку. Завантажте інсталятор та запустіть його (vc_web.exe). Вам не потрібно додаткове завантаження SQL 2008.

Вам також знадобиться Windows SDK (на даний момент 7.1) для 64-розрядних компіляторів - якщо ви не хочете робити 32-бітні збірки, які не підтримуються повністю ...

http://www.microsoft.com/en-us/download/details.aspx?id=8279 - хороша відправна точка для завантаження цього - ви хочете запустити програму windk_web.exe при завантаженні!

Установка за замовчуванням тут просто чудова.

Нарешті, завантажте та встановіть оновлення Windows SDK 7.1 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=4422

І, щоб виправити відсутні файли заголовка, VS2010 SP1. http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

І, чорт забирай, виправте пропущений пакетний файл для VS2010 Express. Це стає абсолютно абсурдно.

У C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64 створіть "vcvars64.bat" із наступним (вам потрібно запуститись як адміністратор):

CALL setenv / x64

Мій пакет python досі не встановлений (не можу згадати помилку). Потім я знайшов кілька інструкцій (скопійованих нижче) щодо використання спеціального командного рядка SDK 7.1, див. Https://mail.python.org/pipermail/distutils-sig/2012-February/018300.html

Не забувайте про це питання. Хтось тут помітив цей пункт у меню: Пуск-> Усі програми-> Microsoft Windows SDK v7.1 -> Командний рядок Windows SDK 7.1

Це виконує пакетне завдання, яке, здається, створює робоче середовище для компілятора. З цього підказки ви можете ввести "setup.py build" або "setup.py install".

Я відкрив командний рядок Windows SDK 7.1 за інструкцією та використав його для запуску easy_install на пакет python. І нарешті, успіху!


TLDR ;

  1. Встановіть Visual Studio Express 2010 (бажано без оновлених перерозподілів або SQL-сервера).
  2. Встановіть Windows 7.1 SDK
  3. Встановіть оновлення SDK 7.1 SP1 та виправлення файлу заголовка VS2010 SP1 (цей крок може не бути необхідним).
  4. Створюйте вручну за C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batдопомогою вмістуCALL setenv /x64
  5. Пуск-> Усі програми-> Microsoft Windows SDK v7.1 -> Командний рядок Windows SDK 7.1 для відкриття спеціального командного рядка x64, який потім може використовуватися з python / easy_install / pip / тощо (включаючи ті, що у virtual_envs).

4

Нижче на етапі вирішено цю проблему для мене, я намагався створити налаштування з розширенням cython.

  1. Встановіть компілятор Microsoft Visual C ++ для Python 2.7
  2. Місцем встановлення за замовчуванням було б @ C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ for Python Це може фактично виправити проблему, перевірити один раз, перш ніж продовжувати.
  3. Якщо це не вдається, перевірте, де в VC ++ розміщений файл python vcvarsall.bat
  4. Відкрийте файл msvc9compiler.py у пакунку distutils у блокноті.
  5. У моєму вікні це було @ C: \ Anaconda2 \ Lib \ distutils \ msvc9compiler.py find_vcvarsall функція у цьому файлі, визначте версію VC, роздрукувавши аргумент версії. Для Python 2.7 це, швидше за все, 9.0
  6. Тепер створіть змінну середовища VS90COMNTOOLS, вказуючи на C: \ Користувачі \ користувач ПК \ AppData \ Локальні \ Програми \ Загальні \ Microsoft \ Visual C ++ для Python \ 9.0 \ VC \ bin
  7. Чомусь distutils очікує, що файл vcvarsall.bat буде знаходитись у VC dir, але VC ++ для інструментів python має його у корені 9.0. Щоб виправити це, видаліть "VC" з path.join (приблизно біля рядка 247)

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

Наведені вище кроки вирішили проблему для мене.


Я отримую помилку посилання, виконуючи вказані вище кроки ПОСИЛАННЯ: помилка LNK2001: невирішений зовнішній символ init__init__ build \ temp.win-amd64-2.7 \ Release_ init_ .lib : фатальна помилка LNK1120: 1 невирішена зовнішня помилка: команда 'C: \\ користувачі \\ ma306477 \\ AppData \\ Локальні \\ Програми \\ Загальні \\ Microsoft \\ Visual C ++ для Python \\ 9.0 \\ VC \\ Bin \\ amd64 \\ link.exe 'не вдалося зі статусом виходу 1120
manish Prasad

3

Я спробував багато рішень, але для мене працювало лише одне, установка Microsoft Visual Studio 2008 Express C ++.

Я отримав цю проблему за допомогою модуля Python 2.7, написаного на C (yEnc, який має інші проблеми з MS VS). Зауважте, що Python 2.7 побудований з версією MS VS 2008, а не 2010!

Незважаючи на те, що це безкоштовно, знайти його досить важко, оскільки MS рекламує VS 2010. Проте офіційні дуже прямі посилання MSDN все ще працюють: перевірте https://stackoverflow.com/a/15319069/2227298 на наявність посилань для завантаження.


Так, найкращий спосіб - встановити VS2008.
піловер

3

Якщо у вас встановлено mingw

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

працює, змушуючи Pip будувати за допомогою компілятора mingw замість Microsoft. Дивіться тут https://github.com/pypa/pip/isissue/18 для детальної інформації (остання публікація).


3

Чи компілятор Microsoft Visual C ++ для Python 2.7 за адресою http://www.microsoft.com/en-us/download/details.aspx?id=44266 не є рішенням?


Працювали для мене. Повідомлення про помилку наприкінці інсталяції pip pysftp мав таке рішенняerror: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
Боб Штейн

3

Найпростіший спосіб вирішити це в 2016 році - встановити Chocolatey, а потім vcpython27пакет. Відкрити Powershell:

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

2

Я не знаю, чи не пізно, але я знайшов Microsoft Visual C ++ Compiler для Python 2.7, який читає

Типове повідомлення про помилку, яке ви отримаєте, якщо вам потрібен цей пакет компілятора, неможливо знайти vcvarsall.bat

Сподіваюся, це допомагає!


2

Я отримав ту саму проблему і вирішив її наразі.

"Google" сказав мені, що мені потрібно встановити "Microsoft Visual C ++ Compiler for Python 2.7". Я встановив не тільки інструмент, але і Visual C ++ 2008 Reditributable, але це не допомогло. Потім я спробував встановити Visual C ++ 2008 Express Edition. І проблема пішла!

Просто спробуйте встановити Visual C ++ 2008 Express Edition!


2

виклик import setuptoolsбуде мавпа патч distutils, щоб примусити сумісність з Visual Studio. Виклик vcvars32.batвручну налаштує віртуальне середовище та запобігає появі інших поширених помилок, які компілятор видасть. Для VS 2017 файл знаходиться за адресою

"C: \ програмні файли (x86) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ допоміжні \ build \ vcvars32.bat"

Ось сценарій налаштування, який я використовую для швидкого збирання .pyx файлів у .pyd: (Примітка: він використовує сторонній модуль 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()

Дійсно, імпорт setuptoolsдопомагає, навіть у випадку компіляції цитонів .
Баш

Ви могли б пояснити трохи детальніше? як викликати vcvars32.bat вручну? У мене компіляція цитонів
червень Ван,

2

За допомогою цього посилання завантажте та встановіть Visual C ++ 2015 Build Tools . Він автоматично завантажить visualcppbuildtools_full.exeта встановить Visual C ++ 14.0, фактично не встановлюючи Visual Studio. Після того, як установка завершиться, повторіть інсталяцію pip, і ви більше не отримаєте помилку.

Я перевірив його на наступних платформах та версіях:

Python 3.6 on Windows 7 64-bit
Python 3.7 on Windows Server 2016 (64-bit system)
Python 3.8 on Windows 10 64-bit

1

Якщо ви хочете встановити pyodbc у вікні Windows, на якому не встановлено Visual Studio, ще одним варіантом є встановлення pyodbc вручну за допомогою двійкового розподілу.

Це особливо корисно, якщо у вас немає прав адміністратора на машині, з якою ви працюєте, і намагаєтесь налаштувати virtualenv .

Кроки:

  1. Завантажте найновіший інсталятор Windows тут (pyodbc-XXXwin-Y-py2.7.exe)
  2. Відкрийте виконуваний файл інсталятора за допомогою 7-Zip (або WinRAR чи будь-якого іншого)
  3. Витягніть pyodbc.pyd і pyodbc-XXX-py2.7.egg-info і помістіть їх [python installation directory or virtualenv]\Lib\site-packages
  4. Ні кроку 4 :)

1

З Python 3.4 залежність залежить від Visual Studio 2010. Встановлення Visual C ++ 2010 Express вирішило проблему.

Обмикаючи його за допомогою встановлення VS 2008 або 2013, у мене, здавалося, не вийшло.



1

Відповідь, яку дає @monkey, є однією з правильних, але вона неповна.

Якщо ви хочете використовувати MinGW , вам слід вибрати C, C ++, а також інші інструменти розробки, запропоновані під час встановлення MinGW, щоб отримати також "make.exe".

Також у вас повинен бути встановлений шлях до make.exe у env.

Щоб завершити його відповідь, ось такі кроки:

  1. Додайте каталог бін mingw32 до змінних оточення
  2. Додайте C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;до ПАТ
  3. Відредагуйте (створіть, якщо його не існує) distutils.cfgфайл, на якому C:\Python26\Lib\distutils\distutils.cfgрозміщено:

    [build]
    compiler=mingw32

Переконайтеся, що змінні середовища встановлені, відкривши новий cmd.exe.


32-бітні модулі пітона повинні бути зібрані з 32-бітним mingw, тоді як 64-бітні модулі пітона повинні бути зібрані з 64-бітним mingw. На 64-бітному Cygwin доступні 2 виконувані файли mingw: x86_64-w64-mingw32-gccі i686-w64-mingw32-gcc. Ці виконувані файли, мабуть, такі ж, як і ті, які ви отримаєте від Mingw звичайно (щойно компілюються в середовищі Cygwin).
CMCDragonkai
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.