Node.js: Python nu a găsit excepție din cauza node-sass și node-gyp (Programare, Node.Js, Node Gyp, Node Sass)

Vipul Panth a intrebat.

Dintr-o dată, într-unul din mediul meu jenkins, construirea a început să eșueze, în timp ce în mașina locală pare să funcționeze bine, deoarece am instalat python,

Din jurnale am reușit să detectez că problema este legată de o dependență internă, și anume node-gyp v3.5.0 de pe node-sass v3.8.0 când am făcut cercetări vizitând acest despre node-gyp și am găsit condiția preliminară că trebuie instalat Python.

Deci, întrebarea mea este ce versiune de node-sass pot instala pentru a ocoli acest lucru sau există o soluție mai bună, deoarece construcția mea a funcționat bine până în această dimineață în același mediu.

Node v5.10.1

JURNAL DE EROARE

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)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_moduleswhichwhich.js:13:12)
gyp verb `which` failed     at F (C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_moduleswhichwhich.js:68:19)
gyp verb `which` failed     at E (C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_moduleswhichwhich.js:80:29)
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_moduleswhichwhich.js:89:16
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_modulesisexeindex.js:44:5
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_modulesisexewindows.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)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_moduleswhichwhich.js:13:12)
gyp verb `which` failed     at F (C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_moduleswhichwhich.js:68:19)
gyp verb `which` failed     at E (C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_moduleswhichwhich.js:80:29)
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_moduleswhichwhich.js:89:16
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_modulesisexeindex.js:44:5
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_modulesisexewindows.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:Python27python.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)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_modules
ode-gyplibconfigure.js:454:19)
gyp ERR! stack     at Object.<anonymous> (C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_modules
ode-gyplibconfigure.js:480:16)
gyp ERR! stack     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_modulesgraceful-fspolyfills.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
odejs
ode.exe" "C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI
ode_modules
ode-gyp\bin
ode-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UI
ode_modules
ode-sass
gyp ERR! node -v v5.10.1
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok 
Build failed

Orice gânduri sunt foarte apreciate, mulțumesc.

13 răspunsuri
nschonni

Node-sass încearcă să descarce binarul pentru platforma dvs. la instalare. Node 5 este suportat de 3.8 https://github.com/sass/node-sass/releases/tag/v3.8.0Dacă Jenkins dvs. nu poate descărca binarul pre-construit, atunci trebuie să urmați cerințele platformei de pe Node-gyp README (Python2, VS sau MSBuild, …)Dacă este posibil, aș sugera să vă actualizați Node la cel puțin 6, deoarece 5 nu mai este suportat de Node.Dacă doriți să faceți upgrade la 8, va trebui să actualizați node-sass la 4.5.3

Comentarii

  • Vă mulțumesc foarte mult pentru eforturile dvs., am reușit să găsesc problema că pachetul node-sass lipsea din node-modules, am verificat și am constatat că într-adevăr versiunea este o problemă, dar cea a mea se datora timeout-ului de conectare, reset-cache și pare să funcționeze bine pentru moment, dar da, va actualiza nodul în conformitate cu soluția dvs. –  > Por Vipul Panth.
  • @nschonni Și eu mă confrunt cu aceeași eroare. Versiunea node este 7.7.1 și npm este 4.1.2. Puteți să mă ajutați, vă rog, cu acest lucru. –  > Por Tanvi Garg.
  • Aceeași problemă pentru Node (10.4.0), npm (6.1.0), node-sass (4.9.0) –  > Por Saravanan Sachi.
  • Asta înseamnă că trebuie să fac downgrade la node? Am node 12 și trebuie să instalez node-sass 4.13. –  > Por mcv.
  • Nu, Node 12 este compatibil cu 4.13 –  > Por nschonni.
Shezan Kazi

așa că acest lucru mi sa întâmplat recent pe Windows. Am rezolvat-o prin următorii pași folosind un PowerShell cu privilegii de administrator:

  1. delete node_modulesfolder
  2. rularea npm install --global windows-build-tools
  3. reinstalarea modulelor node sau node-sass cu npm install

Comentarii

    39

  • Acesta este exact răspunsul corect. npm install --global windows-build-tools instalează Python 2.7 și îl instalează la nivel global (astfel încât nu trebuie să reinstalați pentru fiecare proiect în parte). Rezolvă problema „nu se poate instala SASS”. NOTĂ: Pe Windows, trebuie să rulați promptul de comandă npm ca „Administrator”. –  > Por paulsm4.
  • A funcționat pentru mine, windows 10, node v10.15.0, npm 6.7.0 –  > Por Tasnim Reza.
  • A trebuit să șterg package-lock.json de asemenea, pentru a face să funcționeze. –  > Por ush189.
  • Acest lucru a funcționat pentru mine, dar apoi a șters instrumentele MSBuild din folderul Visual Studio, a trebuit să le reinstalez ulterior. –  > Por uniquelau.
  • Pentru cei care sunt blocați la instalarea BuildTools, puteți executa comenzile în PowerShell și rulați ca administrator –  > Por user1441797.
Fatema T. Zuhora

Mașina mea este Windows 10, , m-am confruntat cu probleme similare în timp ce am încercat să compilez SASS folosind node-sass pachetul. Versiunea mea de nod este v10.16.3 iar versiunea npm este 6.9.0

Modul în care am rezolvat problema:

  1. La început ștergeți package-lock.json fișier și node_modules/ folder.
  2. Deschideți Windows PowerShell ca administrator.
  3. Rulați comanda npm i -g node-sass.
  4. După aceea, mergeți la dosarul proiectului și rulați npm install
  5. Și, în cele din urmă, rulați comanda script de compilare SASS, , în cazul meu, acesta este npm run build:css

Și funcționează!!!

Comentarii

  • npm install –global windows-build-tools ștergerea package-lock.json și npm i -g node-sass mi-a rezolvat problema; -.  > Por Arthur Zennig.
  • Nu este o soluție acceptabilă dacă practica organizației dvs. este de a nu avea instalații globale. –  > Por Jay Bienvenu.
bvdb

Mesajul de eroare înseamnă că nu poate localiza executabilul sau binarul python.

În multe cazuri, acesta este instalat la c:python27. dacă nu este încă instalat, îl puteți instala cu npm install --global windows-build-tools, , care va funcționa numai dacă nu a fost încă instalat.

Adăugarea acestuia la variabilele de mediu nu funcționează întotdeauna. o alternativă mai bună, este să îl setați doar în configurația npm.

npm config set python c:python27python.exe

Comentarii

  • setarea python în npm config a fost o soluție bună pentru mine. –  > Por burntsugar.
  • Acesta este exact modul în care am putut rezolva cu ușurință. –  > Por qdbp.
Stephen Himes

A trebuit să o fac:

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

a funcționat bine după ce am forțat-o la versiunea corectă de sass, conform versiunii care se spune că funcționează cu nodul corect.

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

Erau o mulțime de alte erori care păreau a fi cauzate de versiunea greșită de sass definită.

Comentarii

  • Vă mulțumesc! Asta a fost pentru mine, un coleg folosea o versiune mai veche de node, eu foloseam 12, deci era nevoie de versiuni diferite de node-sass. Am actualizat node-sass la 4.12 și l-am forțat pe colegul meu să actualizeze la node 12 și totul a fost bine! –  > Por Jason Masters.
  • Acest lucru rezumă destul de bine problema. Versiunile Node-sass sunt compatibile cu anumite versiuni de nodejs. Acest lucru ar trebui să aibă un salt major de versiune pentru a ilustra acest lucru. Orice lucru mai mic decât 4.12 nu va funcționa cu node 12.14 –  > Por Robharrisaz.
  • Și nicio versiune nu funcționează cu node 14 pe Windows x64 acum. Trebuie să fac downgrade la nodul 12 pentru a face să funcționeze. –  > Por bonniss.
Konstantin Lyakh

node-gyp necesită vechiul Python 2link

Dacă nu îl aveți instalat – verificați alte răspunsuri despre instalarea lui windows-build-tools.

Dacă sunteți ca mine și aveți ambele atât versiunea veche cât și cea nouă de Python instalate, , sunt șanse ca node-gyp să încerce să folosească Python 3. Iar acest lucru are ca rezultat următoarele SyntaxError: invalid syntax eroare.

Am găsit un articol despre cum să ai două versiuni Python instalate. Și se recomandă redenumirea executabilului Python 2.* în python2.exelink.

Deci, se pare că node-gyp se așteaptă să găsească vechiul executabil Python 2 redenumit. De aici și mesajul de eroare:

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

Odată ce am redenumit C:Python27python.exe în C:Python27python2.exe a funcționat fără erori.

Bineînțeles, atât C:Python27 și C:Python39 trebuie să fie în variabila PATH. Și nu este nevoie să setați vechea versiune Python în npm config. Python-ul implicit va fi tot cel nou.

Comentarii

  • @RohanDevaki Răspunsul dvs. este total diferit, deoarece sugerați eliminarea Python 3. În timp ce sugestia mea este să lăsați ambele versiuni Python instalate și doar să redenumiți executabilul Python 2. –  > Por Konstantin Lyakh.
  • @ford04 „Python”, „mesaj de eroare”, etc. nu sunt coduri. Ar fi trebuit să respingeți această editare. See meta.stackoverflow.com/q/360491/4284627. –  > Por Donald Duck.
Bruno Miquelin

Acest lucru este vechi de 2 ani, dar niciunul dintre ele nu m-a ajutat.

Mi-am dezinstalat NodeJS v12.8.1 (Current) și am instalat un nou v10.16.3 (LTS) și mi-am ng build --prod a funcționat.

maudulus

Răspunsul meu s-ar putea să nu se aplice la toată lumea.Versiunea Node: v10.16.0NPM: 6.9.0

Am avut o mulțime de probleme cu utilizarea node-sass și node-sass-middleware. Sunt pachete interesante pentru că sunt utilizate pe scară largă (milioane de descărcări săptămânale), dar githubs-urile lor arată dependențe și acoperire limitate. Actualizam o platformă mai veche la care lucram.

Ceea ce am sfârșit prin a trebui să fac a fost:

1) Manual Delete node_modules

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

Am avut următorul ajutor, mulțumesc!

Nu s-au găsit binarele preinstalate pentru [email protected] și [email protected]

Eroare: EACCES: permisiune refuzată la încercarea de a instala ESLint folosind npm

davyCode

am avut aceeași problemă a pierdut ore întregi încercând să instalez diferite versiuni de python pe PC-ul meu. Pur și simplu actualizați node la cea mai recentă versiune v8.11.2 și npm 5.6.0, apoi după ce instalați [email protected] și veți fi bine.

Comentarii

  • Acest lucru a funcționat pentru mine, am căutat ore întregi pentru asta! Ca un sfat: utilizarea NVM ajută foarte mult dacă doriți să gestionați mai multe versiuni de Node.js. –  > Por j3ff.
MwamiTovi

După ce m-am uitat la toate răspunsurile, am observat că această soluție ar putea fi foarte utilă. Aceasta explică cum să configurați „npm” pentru a găsi versiunea python instalată în timp ce instalați node-sass. Amintiți-vă că node-sass necesită node-gyp (un instrument de compilare npm) care caută calea dvs. python. Sau instalați pur și simplu python și urmați aceeași soluție dată (în link). Mulțumesc.

DevLoverUmar

Am găsit aceeași problemă cu Node 12.19.0 și yarn 1.22.5 pe Windows 10. Am rezolvat problema prin instalarea celui mai recent python stabil pe 64 de biți cu adăugarea căii la Variabilele de mediu în timpul instalării python. După instalarea python, mi-am repornit mașina pentru env vars.

Comentarii

  • @RohanDevaki Se pare că ați sugerat o mulțime de ediții care formatează cuvinte cheie aleatorii ca și cod. Vă rugăm să vă opriți. De exemplu, „Windows 10”, „Node 12.19.0”, „Python 64-bit”, etc. nu sunt cod și nu ar trebui formatate ca atare. Vedeți această postare a unui moderator. –  > Por Donald Duck.
  • @DonaldDuck ,ok scuze, nu mai repet asta. –  > Por Rohan Devaki.
Rohan Devaki

Hei, am reușit să rezolv această eroare urmând pașii de mai jos

  • mai întâi am dezinstalat python 3.8.6 (ultima versiune)
  • apoi am instalat python 2.7.1 (orice Python 2 va funcționa, dar nu mult mai veche și aceasta este recomandată)
  • apoi am adăugat c:python27 la variabilele de mediu
  • sistemul meu de operare este windows, , așa că am urmat acest lucru link
  • A funcționat

Comentarii

  • Aceasta ar fi o soluție doar dacă nu aveți nevoie de Python3 și nu aveți aplicații care să depindă de el. –  > Por Peter Abolins.
  • da, este corect, cred că nu veți avea nicio problemă cu python 2.7.1. –  > Por Rohan Devaki.
agustinrodriguez7

Am avut node 15.x.x , și "node-sass": "^4.11.0".am văzut în notele de lansare de la node-sass și am văzut că cea mai mare versiune de node compatibilă cu node-sass 4.11.0 a fost 11, așa că am dezinstalat node și am reinstalat versiunea 11.15.0 (lucrez cu Windows).Verificați versiunile node-sass.(asta este ceea ce ar trebui să vedeți în versiunile node-sass).

Sper că vă ajută și îmi pare rău pentru engleza mea 🙂

Comentarii

  • Mulțumesc mult, trecând la node 11.15.0 a funcționat. Suplimentar la asta mi-am dezinstalat versiunea 3 de python și am trecut la python 2. Nu sunt sigur dacă ambele au cauzat ca să funcționeze –  > Por techloris_109.