Node.js: Python не найден исключение из-за node-sass и node-gyp

Внезапно в одной из моих сборок среды jenkins начало сбоить, а на локальном компьютере, похоже, все работает нормально, так как у меня установлен python,

Из журналов я смог обнаружить, что проблема связана с внутренней зависимостью node-gyp v3.5.0 от node-sass v3.8.0, когда я исследовал, посетив this об node-gyp и обнаружил необходимое условие для установки Python.

Итак, мой вопрос в том, какую версию node-sass я могу установить, чтобы обойти это, или есть лучшее решение, поскольку моя сборка работала нормально до сегодняшнего утра в той же среде.

Узел v5.10.1

ЖУРНАЛ ОШИБОК

gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
gyp verb `which` failed     at getNotFoundError (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:13:12)
gyp verb `which` failed     at F (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:68:19)
gyp verb `which` failed     at E (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:80:29)
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:89:16
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\index.js:44:5
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\windows.js:29:5
gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:82:15)
gyp verb `which` failed  python2 { [Error: not found: python2] code: 'ENOENT' }
gyp verb check python checking for Python executable "python" in the PATH
gyp verb `which` failed Error: not found: python
gyp verb `which` failed     at getNotFoundError (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:13:12)
gyp verb `which` failed     at F (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:68:19)
gyp verb `which` failed     at E (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:80:29)
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:89:16
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\index.js:44:5
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\windows.js:29:5
gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:82:15)
gyp verb `which` failed  python { [Error: not found: python] code: 'ENOENT' }
gyp verb could not find "python". checking python launcher 
gyp verb could not find "python". guessing location 
gyp verb ensuring that file exists: C:\Python27\python.exe
gyp ERR! configure error 
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack     at Object.failNoPython (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-gyp\lib\configure.js:454:19)
gyp ERR! stack     at Object.<anonymous> (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-gyp\lib\configure.js:480:16)
gyp ERR! stack     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\graceful-fs\polyfills.js:284:29
gyp ERR! stack     at FSReqWrap.oncomplete (fs.js:82:15)
gyp ERR! System Windows_NT 6.3.9600
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files (x86)\\Jenkins\\jobs\\NdbSite-hot-fix-Manual-PreBuild\\workspace\\src\\NdbSite.UI\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-sass
gyp ERR! node -v v5.10.1
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok 
Build failed

Приветствуются любые мысли, спасибо.


person Vipul Panth    schedule 21.08.2017    source источник
comment
Вы хотите установить angular, поэтому вам также нужны инструменты angular-cli, тогда вам понадобится python2, а в Windows вам также понадобится msbuild.exe, который поставляется с visualstudio2017. Итак, сначала вам нужно установить инструмент установки Visual Studio. Затем у вас установлено так много инструментов, что вам нужно настроить версии ваших инструментов в npm.   -  person bvdb    schedule 08.04.2021


Ответы (19)


Node-sass пытается загрузить двоичный файл для вашей платформы при установке. Узел 5 поддерживается 3.8 https://github.com/sass/node-sass/releases/tag/v3.8.0 Если ваш Jenkins не может загрузить предварительно собранный двоичный файл, вам необходимо следовать требованиям платформы для Node-gyp README (Python2, VS или MSBuild, ...). возможно, я бы предложил обновить ваш узел как минимум до 6, поскольку 5 больше не поддерживается узлом. Если вы хотите перейти на 8, вам нужно обновить node-sass до 4.5.3.

person nschonni    schedule 22.08.2017
comment
Большое спасибо за ваши усилия, я смог найти проблему, заключающуюся в том, что пакет node-sass отсутствовал в модулях node, проверил и обнаружил, что действительно версия является проблемой, но моя проблема возникла из-за тайм-аута соединения, сброса-кеша и, похоже, на данный момент он работает нормально, но да, будет обновлять узел в соответствии с вашим исправлением. - person Vipul Panth; 22.08.2017
comment
@nschonni Я тоже столкнулся с той же ошибкой. Версия узла - 7.7.1, а npm - 4.1.2. Не могли бы вы помочь мне с этим. - person Tanvi Garg; 29.01.2018
comment
Та же проблема для Node (10.4.0), npm (6.1.0), node-sass (4.9.0) - person Saravanan Sachi; 01.07.2018
comment
Означает ли это, что мне нужно понизить версию моего узла? У меня есть узел 12, и мне нужно установить node-sass 4.13. - person mcv; 25.02.2020
comment
Нет, Node 12 совместим с 4.13 - person nschonni; 25.02.2020
comment
Странный. Я получаю те же ошибки. И решение @Shezan Kazi ниже таинственным образом не работает для меня, потому что права администратора, которые я должен иметь на этой машине, по-видимому, не работают. - person mcv; 25.02.2020
comment
Спасибо, ваш комментарий был очень полезен, в моем случае (Manjaro) мне пришлось установить Python2 на мою машину. и это все исправило. - person Kay; 13.02.2021
comment
теперь версия node-sass - 6.0.0. В моем случае это было единственное исправление (+ регенерировать yarn.lock). - person pdem; 09.06.2021

так недавно это случилось со мной на окнах. Я исправляю это, выполнив следующие шаги с помощью PowerShell с правами администратора:

  1. удалить node_modulesfolder
  2. работает npm install --global windows-build-tools
  3. переустановка узловых модулей или node-sass с npm install
person Shezan Kazi    schedule 26.10.2018
comment
Это совершенно правильный ответ. npm install --global windows-build-tools устанавливает Python 2.7 и устанавливает его глобально (так что вам не нужно повторно устанавливать для каждого проекта). Он устраняет проблему с невозможностью установки SASS. ПРИМЕЧАНИЕ. В Windows вы должны запустить командную строку npm от имени администратора. - person paulsm4; 23.11.2018
comment
Это сработало для меня, Windows 10, node v10.15.0, npm 6.7.0 - person Tasnim Reza; 04.04.2019
comment
Мне также пришлось удалить package-lock.json, чтобы он заработал. - person ush189; 21.04.2019
comment
У меня это сработало, но затем я удалил инструменты MSBuild из папки Visual Studio, и впоследствии мне пришлось их переустановить. - person uniquelau; 01.05.2019
comment
Тем, кто застрял на установке BuildTools, вы можете выполнить команды в PowerShell и запустить от имени администратора. - person user1441797; 11.08.2020
comment
Это вместе с ответом @bvdb помогло мне. Пришлось установить питон в конфигурации npm - person RBz; 17.01.2021
comment
Если вы попробуете этот ответ, и он зависнет при запуске npm, попробуйте его с windows-build-tools v4: npm install --global --production [email protected], как описано здесь. - person Cato Minor; 18.03.2021
comment
У меня это сработало, но мне также пришлось обновить мою версию node-sass до 5.0.0 - person Adam Nellis; 06.04.2021
comment
Если вы попробуете этот ответ, и он зависнет при запуске, я использовал установщик choclatey вместо задокументировано здесь. Не замерз тогда - person Liam; 08.06.2021
comment
Мне пришлось удалить существующий python2.7, который я установил с помощью scoop. Ожидается, что питон будет в каталоге c:\python27. - person h-rai; 07.07.2021

Сообщение об ошибке означает, что он не может найти исполняемый или двоичный файл python.

Во многих случаях он устанавливается по адресу c: \ python27. если он еще не установлен, вы можете установить его с помощью npm install --global windows-build-tools, который будет работать, только если он еще не установлен.

Добавление его в переменные окружения не всегда работает. Лучшая альтернатива - просто установить его в конфигурации npm.

npm config set python c:\python27\python.exe

person bvdb    schedule 22.10.2020
comment
установка python в конфигурации npm была для меня хорошим решением. - person burntsugar; 10.12.2020
comment
Именно так я мог легко решить эту проблему. - person qdbp; 02.03.2021
comment
Я решил это, установив python2. - person TheAnh; 24.04.2021
comment
Пожалуйста, прекратите использовать python2. текущая версия python - 3.9. Это связано с этой ошибкой, которая была исправлена ​​давно: исправлена ​​ошибка в node-gyp: github.com/nodejs/node-gyp/issues/1977 =› Обновление версии node-sass приведет к обновлению версии node-gyp, а затем исправит ошибку (если у вас установлена ​​последняя версия pyhon) - person pdem; 09.06.2021
comment
Спасибо - именно в этом и была проблема. Жаль, что мне потребовалось два дня, чтобы найти ваше простое решение - person ideaztech; 11.06.2021
comment
ОБНОВЛЕНИЕ 07/2021: лучшее решение, я пробовал все вышеперечисленные ответы, но только это сработало для меня. - person Hashan Shalitha; 19.07.2021

Моя машина - Windows 10, я столкнулся с аналогичными проблемами при попытке скомпилировать SASS с использованием пакета node-sass. Моя версия узла - v10.16.3, а версия npm - 6.9.0

Как я решил проблему:

  1. Сначала удалите package-lock.json файл и node_modules/ папку.
  2. Откройте Windows PowerShell от имени администратора.
  3. Выполните команду npm i -g node-sass.
  4. После этого заходим в папку проекта и запускаем npm install
  5. И, наконец, запустите скрипт компиляции SASS, в моем случае это npm run build:css

И это работает !!

person Fatema T. Zuhora    schedule 07.10.2019
comment
npm install --global windows-build-tools стирание package-lock.json и npm i -g node-sass решили мою проблему; - person Arthur Zennig; 10.09.2020
comment
Неприемлемое решение, если практика вашей организации не предусматривает глобальных установок. - person Jay Bienvenu; 23.02.2021

Мне пришлось:

Delete node_modules
Uninstall/reinstall node
npm install [email protected]

работал нормально после установки правильной версии sass, в соответствии с версией, которая, как утверждается, работает с правильным узлом.

NodeJS  Minimum node-sass version   Node Module
Node 12 4.12+   72
Node 11 4.10+   67
Node 10 4.9+    64
Node 8  4.5.3+  57

Было много других ошибок, которые, казалось, были вызваны неправильной версией sass.

person Stephen Himes    schedule 09.05.2019
comment
Спасибо! Это было для меня, мой коллега использовал старую версию node, я использовал 12, поэтому требовались разные версии node-sass. Я обновил node-sass до 4.12 и заставил моего коллегу перейти на node 12, и все было хорошо! - person Jason Masters; 25.09.2019
comment
Это в значительной степени подытоживает проблему. Версии Node-sass совместимы с определенными версиями nodejs. Здесь действительно должна быть выпуклость основной версии, чтобы проиллюстрировать это. Все, что ниже 4.12, не будет работать с узлом 12.14. - person Robharrisaz; 10.01.2020
comment
И ни одна версия сейчас не работает с узлом 14 в Windows x64. Мне нужно перейти на узел 12, чтобы он заработал. - person bonniss; 25.04.2020

node-gyp требует старого Python 2 - ссылка

Если он у вас не установлен - проверьте другие ответы об установке windows-build-tools.

Если вы похожи на меня и у вас установлены старая и новая версии Python, скорее всего, node-gyp попытается использовать Python 3. И это приведет к следующей SyntaxError: invalid syntax ошибке.

Я нашел статью об установке двух версий Python. И они рекомендуют переименовать исполняемый файл Python 2. * в python2.exe - ссылка.

Итак, похоже, что node-gyp ожидает найти переименованный старый исполняемый файл Python 2. Отсюда сообщение об ошибке:

...
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
...

Как только я переименовал C:\Python27\python.exe в C:\Python27\python2.exe, все заработало без ошибок.

Конечно, и C:\Python27\, и C:\Python39\ должны быть в переменной PATH. И нет необходимости устанавливать старую версию Python в конфигурации npm. Ваш Python по умолчанию по-прежнему будет новым.

person Konstantin Lyakh    schedule 30.10.2020
comment
@RohanDevaki Ваш ответ полностью отличается, потому что вы предлагаете удалить Python 3. Хотя я предлагаю оставить обе версии Python установленными и просто переименовать исполняемый файл Python 2. - person Konstantin Lyakh; 05.11.2020
comment
@ ford04 Python, сообщение об ошибке и т. д. не являются кодом. Вы должны были отклонить это изменение. См. meta.stackoverflow.com/q/360491/4284627. - person Donald Duck; 15.11.2020

Этому 2 года, но мне ни один из них не помог.

Я удалил свой NodeJS v12.8.1 (Current) и установил новый v10.16.3 (LTS), и мой ng build --prod работал.

person Bruno Miquelin    schedule 19.08.2019

Мой ответ может не относиться ко всем. Версия узла: v10.16.0 NPM: 6.9.0

У меня были большие проблемы с использованием node-sass и node-sass-middleware. Это интересные пакеты, потому что они широко используются (миллионы загрузок еженедельно), но их github показывает ограниченные зависимости и охват. Я обновлял старую платформу, над которой работал.

В итоге мне пришлось сделать следующее:

1) Вручную Delete node_modules

2) Вручную Delete package-lock.json

3) sudo npm install node-sass --unsafe-perm=true --allow-root

4) sudo npm install node-sass-middleware --unsafe-perm=true --allow-root

У меня была следующая помощь, спасибо!

Предварительно созданные двоичные файлы не найдены для [email protected] и [email protected]

Ошибка: EACCES: отказано в разрешении при попытке установки ESLint с использованием npm

person maudulus    schedule 31.01.2020

была та же проблема, потеряны часы, пытаясь установить другую версию python на мой компьютер. Просто обновите узел до последней версии v8.11.2 и npm 5.6.0, а затем после установки [email protected], и все будет в порядке.

person davyCode    schedule 05.06.2018
comment
Это сработало для меня, я часами искал это! Подсказка: использование NVM действительно помогает, если вы хотите работать с несколькими версиями Node.js. - person j3ff; 07.08.2019

Привет, я решил эту ошибку, выполнив следующие действия

  • сначала я удалил python 3.8.6 (последняя версия)
  • затем я установил python 2.7.1 (подойдет любая версия Python 2, но не намного старше, и это рекомендуется)
  • затем я добавил c:\python27 в переменные среды
  • моя ОС - windows, поэтому я последовал этому ссылка
  • Это сработало
person Rohan Devaki    schedule 03.10.2020
comment
Это было бы решением только в том случае, если вам не нужен Python3 и приложения, зависящие от него. - person Peter Abolins; 03.11.2020
comment
да, это правильно, я думаю, у вас не будет проблем с python 2.7.1. - person Rohan Devaki; 03.11.2020
comment
есть критические изменения между 2.7 и 3.xx, на самом деле это не решение. - person Anthony O; 19.04.2021

У меня были node 15.x.x и "node-sass": "^4.11.0". Я видел в примечаниях к выпуску от node-sass и видел, что самая высокая версия узла, совместимая с node-sass 4.11.0, была 11, поэтому я удалил узел и переустановил версию 11.15.0 (я работаю с Windows). Проверьте выпуски node-sass. (это то, что вы должны видеть в выпусках node-sass.)

Надеюсь, что это поможет, и извините за мой английский :)

person agustinrodriguez7    schedule 01.02.2021
comment
Большое спасибо, переключение на узел 11.15.0 сработало. Вдобавок к этому я удалил свой Python версии 3 и переключился на Python 2. Не уверен, что оба заставили его работать. - person techloris_109; 04.03.2021

Посмотрев на все ответы, я заметил, что это решение может быть очень полезным. В нем объясняется, как настроить "npm" для поиска установленной версии Python при установке node-sass. Помните, что для node-sass требуется node-gyp (инструмент сборки npm), который ищет ваш путь к Python. Или просто установите python и следуйте тому же решению, указанному в ссылке. Спасибо.

person MwamiTovi    schedule 08.07.2019

Я обнаружил ту же проблему с Node 12.19.0 и yarn 1.22.5 в Windows 10. Я решил проблему, установив последнюю стабильную 64-разрядную версию python, добавив путь к Переменные среды во время установки Python. После установки python я перезапустил свою машину для env vars.

person DevLoverUmar    schedule 20.10.2020
comment
@RohanDevaki Похоже, вы предлагали много правок, форматируя случайные ключевые слова как код. Пожалуйста остановись. Например, Windows 10, Node 12.19.0, 64-разрядная версия Python и т. Д. Не являются кодом и не должны форматироваться как таковые. См. этот пост модератора. - person Donald Duck; 15.11.2020
comment
@DonaldDuck, извини, я не буду повторять это. - person Rohan Devaki; 15.11.2020

В случае проектов пряжи игнорирование версии узла с помощью yarn install --ignore -otors установит любой узел-sass v. Без этих ошибок python

person RRR    schedule 05.04.2021

Статус обслуживания Python2 - конец жизненного цикла, поэтому он не устанавливается по умолчанию в новых выпусках ubuntu.

У меня установка последней версии python2.7 сработала нормально.

Вот инструкция по его установке:

tar -xf Python-2.7.18.tgz
cd Python-2.7.18
./configure --enable-optimizations
sudo make altinstall

Откройте новый терминал и попробуйте снова npm install

person Constantin De La Roche    schedule 04.05.2021

Вот что помогло мне предотвратить ошибку Error: not found: python2 при запуске проекта на основе старого node-gyp v3.8.0.

  1. Запустите npm install --global --production [email protected]
  2. Переименовать python.exe в python2.exe в %USERPROFILE%\.windows-build-tools\python27
  3. Убедитесь, что %USERPROFILE%\.windows-build-tools\python27 является частью вашей переменной среды PATH (это то, что windows-build-tools уже должен сделать для вас)
  4. Загрузите инструменты сборки Visual Studio 2017
  5. Скажите npm использовать VS 2017 с npm config set msvs_version 2017
  6. Запустите сценарий, который использует node-gyp (теперь node-gyp найдет python2.exe)

Альтернатива: принудительное обновление node-gyp

Вы также можете попробовать обновить свой проект, чтобы использовать node-gyp v8.0.0 вместо node-gyp v3.8.0 . В этом случае добавьте в свой package.json следующую запись resolution:

  "resolutions": {
    "node-gyp": "8.0.0"
  }

После этого убедитесь, что у вас установлены Python 3 и инструменты сборки Visual Studio 2017 и / или инструменты сборки Visual Studio 2019. Вы также можете запустить npm config delete msvs_version, чтобы node-gyp автоматически определял вашу версию VS.

Протестировано с:

  • Windows 10 Pro, сборка 19042.985
  • Node.js v15.14.0
  • npm v7.7.6
  • узел-gyp -v v3.8.0.
person Benny Neugebauer    schedule 21.05.2021

С той же проблемой, с которой я столкнулся несколько дней назад. Поверьте, им не нужно устанавливать или удалять другие зависимости в вашем проекте или системе.

Как мне удалось решить эту проблему, позвольте мне поделиться своим опытом.

  • Перейдите в файл package.json
  • Прокрутите вниз до конца или найдите объект optionalDependencies
  • Просто удалите весь этот объект и сохраните файл
  • попробуйте установить npm, он будет работать

Другое возможное решение:

Проверьте свой файл package.json, если элемент node-sass существует внутри объекта optionalDepedencies, тогда вам нужно запустить команду npm таким образом npm install --no-optional или также. Если просто удалите элемент node-sass из объекта optionalDepedencies

Примечание: это решение предназначено только для Angular Project

введите описание изображения здесь. Посмотрите этот снимок экрана с файлом package.json

person Suneel Kumar    schedule 29.07.2021

также вы можете попробовать использовать модуль sass вместо node-sass:

npm install sass
person Ivan Bryzzhin    schedule 27.05.2021

Если вы используете Visual Studio. выполните следующие действия:

npm cache clean --force
npm config set msvs_version 2019 --global
npm install node-sass
person SharpCoder    schedule 20.07.2021