Node.js: Python hat aufgrund von Node-Sass und Node-Gyp keine Ausnahme gefunden

77

Plötzlich ist in einer meiner Jenkins-Umgebungen der Build fehlgeschlagen, während er auf einem lokalen Computer anscheinend einwandfrei funktioniert, da ich Python installiert habe.

Anhand der Protokolle konnte ich feststellen, dass das Problem in der internen Abhängigkeit von Node-Gyp v3.5.0 von Node-Sass v3.8.0 liegt, als ich dies über Node-Gyp untersuchte und die Voraussetzung für die Installation von Python fand .

Meine Frage ist also, welche Version von Node-Sass ich installieren kann, um dies zu umgehen, oder gibt es eine bessere Lösung, da mein Build bis heute Morgen in derselben Umgebung einwandfrei lief.

Knoten v5.10.1

FEHLERPROTOKOLL

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

Alle Gedanken werden sehr geschätzt, danke.

Vipul Panth
quelle

Antworten:

11

Node-sass versucht bei der Installation, die Binärdatei für Ihre Plattform herunterzuladen. Knoten 5 wird von 3.8 https://github.com/sass/node-sass/releases/tag/v3.8.0 unterstützt. Wenn Ihre Jenkins die vorgefertigte Binärdatei nicht herunterladen können, müssen Sie die Plattformanforderungen für Node-gyp befolgen README (Python2, VS oder MSBuild, ...) Wenn möglich, würde ich vorschlagen, Ihren Knoten auf mindestens 6 zu aktualisieren, da 5 von Node nicht mehr unterstützt wird. Wenn Sie auf 8 aktualisieren möchten, müssen Sie Node-Sass auf 4.5.3 aktualisieren

nschonni
quelle
1
Vielen Dank für Ihre Bemühungen. Ich konnte das Problem feststellen, dass das Node-Sass-Paket in den Node-Modulen fehlte, überprüfte und stellte fest, dass die Version tatsächlich ein Problem ist, aber mein Problem war auf das Zeitlimit für die Verbindung und den Reset-Cache zurückzuführen und es scheint im Moment gut zu funktionieren, aber ja, der Knoten wird gemäß Ihrem Fix aktualisiert.
Vipul Panth
1
@nschonni Ich stehe auch vor dem gleichen Fehler. Die Knotenversion ist 7.7.1 und npm ist 4.1.2. Können Sie mir bitte dabei helfen?
Tanvi Garg
Gleiches Problem für Node (10.4.0), npm (6.1.0), Node-Sass (4.9.0)
Saravanan Sachi
Bedeutet dies, dass ich meinen Knoten herunterstufen muss? Ich habe Knoten 12 und muss Node-Sass 4.13 installieren.
mcv
Nein, Knoten 12 ist kompatibel mit 4.13
nschonni
134

Das ist mir kürzlich unter Windows passiert. Ich behebe das Problem, indem ich die folgenden Schritte mit einer PowerShell mit Administratorrechten befolge:

  1. node_modulesOrdner löschen
  2. Laufen npm install --global windows-build-tools
  3. Neuinstallation von Knotenmodulen oder Node-Sass mit npm install
Shezan Kazi
quelle
23
Das ist genau die richtige Antwort. npm install --global windows-build-toolsInstalliert Python 2.7 und installiert es global (sodass Sie es nicht pro Projekt neu installieren müssen). Es behebt das Problem "SASS kann nicht installiert werden". HINWEIS: Unter Windows müssen Sie Ihre npm-Eingabeaufforderung als "Administrator" ausführen.
Pauls4
Es funktionierte für mich, Windows 10, Knoten v10.15.0, npm 6.7.0
Tasnim Reza
2
Ich musste das auch löschen package-lock.json, damit es funktioniert.
ush189
Dies funktionierte für mich, löschte dann aber die MSBuild-Tools aus dem Visual Studio-Ordner und musste diese anschließend erneut installieren.
Uniquelau
Dies muss die akzeptierte Antwort sein. Ich danke dir sehr!
Mekey Salaria
11

Ich musste:

Delete node_modules
Uninstall/reinstall node
npm install node-sass@4.12.0

funktionierte gut, nachdem es auf die richtige Sass-Version gezwungen wurde, entsprechend der Version, die angeblich mit dem richtigen Knoten funktioniert.

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

Es gab viele andere Fehler, die anscheinend durch die falsch definierte Sass-Version verursacht wurden.

Stephen Himes
quelle
Vielen Dank! Dies war es für mich, ein Kollege verwendete eine ältere Knotenversion, ich verwendete 12, daher waren verschiedene Versionen von Node-Sass erforderlich. Ich habe Node-Sass auf 4.12 aktualisiert und meinen Kollegen gezwungen, auf Node 12 zu aktualisieren, und alles war gut!
Jason Masters
Dies fasst das Problem ziemlich gut zusammen. Node-Sass-Versionen sind mit bestimmten Versionen von NodeJS kompatibel. Dies sollte wirklich eine große Version haben, um dies zu veranschaulichen. Alles, was niedriger als 4.12 ist, funktioniert nicht mit Knoten 12.14
Robharrisaz
Und keine Version funktioniert jetzt mit Knoten 14 unter Windows x64 . Ich muss ein Downgrade auf Knoten 12 durchführen, damit es funktioniert.
Bonniss
11

Mein Computer ist Windows 10 , ich hatte ähnliche Probleme beim Versuch, SASS mit dem node-sassPaket zu kompilieren . Meine Knotenversion ist v10.16.3 und die npm-Version ist 6.9.0

So habe ich das Problem gelöst:

  1. Zuerst package-lock.jsonDatei und node_modules/Ordner löschen .
  2. Öffnen Sie Windows PowerShell als Administrator.
  3. Führen Sie den Befehl aus npm i -g node-sass.
  4. Gehen Sie danach zum Projektordner und führen Sie ihn aus npm install
  5. Führen Sie zum Schluss das SASS-Kompilierungsskript aus . In meinem Fall ist dies der Fallnpm run build:css

Und es funktioniert!!

Fatema T. Zuhora
quelle
1
npm install --global windows-build-tools löscht package-lock.json und npm i -g node-sass hat mein Problem gelöst;
Arthur Zennig
5

Das ist 2 Jahre alt, aber keiner von ihnen hat mir geholfen.

Ich habe mein NodeJS v12.8.1 (Current) deinstalliert und ein brandneues v10.16.3 (LTS) installiert und es hat ng build --prodfunktioniert.

Bruno Miquelin
quelle
5

Meine Antwort gilt möglicherweise nicht für alle. Knotenversion: v10.16.0 NPM:6.9.0

Ich hatte große Probleme mit der Verwendung von Node-Sass und Node-Sass-Middleware . Sie sind interessante Pakete, weil sie weit verbreitet sind (Millionen von Downloads pro Woche), aber ihre Githubs weisen eine begrenzte Abhängigkeit und Abdeckung auf. Ich habe eine ältere Plattform aktualisiert, an der ich gearbeitet habe.

Am Ende musste ich Folgendes tun:

1) ManuellDelete node_modules

2) ManuellDelete 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

Ich hatte die folgende Hilfe, danke!

Vorgefertigte Binärdateien für [email protected] und [email protected] nicht gefunden

Fehler: EACCES: Berechtigung verweigert, wenn versucht wird, ESLint mit npm zu installieren

Maudulus
quelle
2

Das gleiche Problem hatte Stunden verloren, als ich versuchte, eine andere Python-Version auf meinem PC zu installieren. Aktualisieren Sie den Knoten einfach auf die neueste Version v8.11.2 und npm 5.6.0. Nach der Installation von [email protected] ist alles in Ordnung.

davyCode
quelle
Das hat bei mir funktioniert, ich habe stundenlang danach gesucht! Als Tipp: Die Verwendung von NVM hilft wirklich, wenn Sie mehrere Versionen von Node.js verarbeiten möchten.
j3ff
1

Nachdem ich mir alle Antworten angesehen habe, stelle ich fest, dass diese Lösung sehr hilfreich sein kann. Es wird erklärt, wie Sie "npm" konfigurieren, um Ihre installierte Python-Version zu finden, während Sie node-sass installieren. Denken Sie daran, für node-sass ist node-gyp (ein npm-Build-Tool) erforderlich, das nach Ihrem Python-Pfad sucht. Oder installieren Sie einfach Python und folgen Sie der angegebenen Lösung (im Link). Vielen Dank.

MwamiTovi
quelle
1

Die Fehlermeldung bedeutet, dass Ihre ausführbare oder binäre Python-Datei nicht gefunden werden kann.

In vielen Fällen wird es unter c: \ python27 installiert. Wenn es noch nicht installiert ist, können Sie es mit installieren npm install --global windows-build-tools, was nur funktioniert, wenn es noch nicht installiert wurde.

Das Hinzufügen zu den Umgebungsvariablen funktioniert nicht immer. Eine bessere Alternative ist, es einfach in der npm-Konfiguration einzustellen.

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

bvdb
quelle
1

Node-Gyp benötigt alten Python 2 - Link

Wenn Sie es nicht installiert haben, überprüfen Sie andere Antworten zur Installation von Windows-Build-Tools .

Wenn Sie wie ich sind und sowohl alte als auch neue Python-Versionen installiert haben , besteht die Möglichkeit, dass Node-Gyp versucht, Python 3 zu verwenden. Dies führt zu dem folgenden SyntaxError: invalid syntaxFehler.

Ich habe einen Artikel über die Installation von zwei Python-Versionen gefunden. Und sie empfehlen, Python 2 umzubenennen. * Executable to python2.exe- link .

Es sieht also so aus, als würde Node-Gyp erwarten, dass die alte ausführbare Python 2-Datei umbenannt wird. Daher die Fehlermeldung:

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

Nachdem ich es umbenannt hatte C:\Python27\python.exe, C:\Python27\python2.exefunktionierte es ohne Fehler.

Natürlich müssen beide C:\Python27\und C:\Python39\in der PATH-Variablen sein. Und es ist nicht nötig, die alte Python-Version in der npm-Konfiguration festzulegen. Ihr Standard-Python wird immer noch der neue sein.

Kostya Lyakh
quelle
@RohanDevaki Ihre Antwort ist völlig anders, weil Sie vorschlagen, Python 3 zu entfernen. Mein Vorschlag ist jedoch, beide Python-Versionen installiert zu lassen und nur die ausführbare Python 2-Datei umzubenennen.
Kostya Lyakh
OK, kein Problem .
Rohan Devaki
@ ford04 "Python", "Fehlermeldung" usw. sind kein Code. Sie sollten diese Bearbeitung abgelehnt haben. Siehe meta.stackoverflow.com/q/360491/4284627 .
Donald Duck
@ DonaldDuck ja, guter Fang.
Ford04
0

Ich habe das gleiche Problem mit Node 12.19.0 und Garn 1.22.5 unter Windows 10 gefunden. Ich habe das Problem behoben, indem ich das neueste stabile 64-Bit-Python installiert habe und den Pfad zu Umgebungsvariablen während der Python-Installation hinzugefügt habe. Nach der Python-Installation habe ich meinen Computer für env vars neu gestartet.

DevLoverUmar
quelle
@RohanDevaki Es scheint, als hätten Sie viele Änderungen vorgeschlagen, um zufällige Schlüsselwörter als Code zu formatieren. Bitte hör auf. Zum Beispiel sind "Windows 10", "Node 12.19.0", "Python 64-Bit" usw. kein Code und sollten nicht als solcher formatiert werden. Siehe diesen Beitrag von einem Moderator.
Donald Duck
@ DonaldDuck, ok sorry, ich werde das nicht wiederholen.
Rohan Devaki
0

Hey, ich habe diesen Fehler behoben, indem ich die Schritte befolgt habe

  • Zuerst habe ich Python 3.8.6 (neueste Version) deinstalliert.
  • dann habe ich Python 2.7.1 installiert (jede Python 2- Version wird funktionieren, aber nicht viel älter und dies wird empfohlen)
  • dann habe ich c:\python27Umgebungsvariablen hinzugefügt
  • Mein Betriebssystem ist Windows , also bin ich diesem Link gefolgt
  • Es funktionierte
Rohan Devaki
quelle
Dies wäre nur dann eine Lösung, wenn Sie Python3 nicht benötigen und keine Anwendungen davon abhängig sind.
Peter Abolins
Ja, es ist richtig. Ich denke, Sie werden kein Problem mit Python 2.7.1 haben.
Rohan Devaki