Ausführen von Python unter Windows für Node.js-Abhängigkeiten


228

Ich komme in eine Node.js-Codebasis, die erfordert, dass ich einige Abhängigkeiten über NPM herunterlade, nämlich jQuery.

Beim Versuch zu laufen npm install jquerywird immer wieder der folgende Fehler angezeigt:

Your environment has been set up for using Node.js 0.8.21 (x64) and NPM

C:\Users\Matt Cashatt>npm install jquery
npm http GET https://registry.npmjs.org/jquery
npm http 304 https://registry.npmjs.org/jquery
npm http GET https://registry.npmjs.org/jsdom
npm http GET https://registry.npmjs.org/xmlhttprequest
npm http GET https://registry.npmjs.org/htmlparser/1.7.6
npm http GET https://registry.npmjs.org/location/0.0.1
npm http GET https://registry.npmjs.org/navigator
npm http GET https://registry.npmjs.org/contextify
npm http 304 https://registry.npmjs.org/htmlparser/1.7.6
npm http 304 https://registry.npmjs.org/xmlhttprequest
npm http 304 https://registry.npmjs.org/location/0.0.1
npm http 304 https://registry.npmjs.org/navigator
npm http 304 https://registry.npmjs.org/jsdom
npm http 304 https://registry.npmjs.org/contextify
npm http GET https://registry.npmjs.org/bindings
npm http GET https://registry.npmjs.org/cssom
npm http GET https://registry.npmjs.org/cssstyle
npm http GET https://registry.npmjs.org/request
npm http 304 https://registry.npmjs.org/bindings

> contextify@0.1.4 install C:\Users\Matt Cashatt\node_modules\jquery\node_module
s\contextify
> node-gyp rebuild


C:\Users\Matt Cashatt\node_modules\jquery\node_modules\contextify>node "C:\Progr
am Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\b
in\node-gyp.js" rebuild
npm http 304 https://registry.npmjs.org/cssstyle
npm http 304 https://registry.npmjs.org/cssom
npm http 304 https://registry.npmjs.org/request
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYT
HON env variable.
gyp ERR! stack     at failNoPython (C:\Program Files\nodejs\node_modules\npm\nod
e_modules\node-gyp\lib\configure.js:113:14)
gyp ERR! stack     at C:\Program Files\nodejs\node_modules\npm\node_modules\node
-gyp\lib\configure.js:82:11
gyp ERR! stack     at Object.oncomplete (fs.js:297:15)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "node" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modu
les\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\Matt Cashatt\node_modules\jquery\node_modules\contextify
gyp ERR! node -v v0.8.21
gyp ERR! node-gyp -v v0.8.4
gyp ERR! not ok
npm ERR! error rolling back Error: ENOTEMPTY, rmdir 'C:\Users\Matt Cashatt\node_
modules\jquery\node_modules\jsdom\node_modules\request\tests'
npm ERR! error rolling back  jquery@1.8.3 { [Error: ENOTEMPTY, rmdir 'C:\Users\M
att Cashatt\node_modules\jquery\node_modules\jsdom\node_modules\request\tests']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: 'C:\\Users\\Matt Cashatt\\node_modules\\jque
ry\\node_modules\\jsdom\\node_modules\\request\\tests' }
npm ERR! contextify@0.1.4 install: `node-gyp rebuild`
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1
npm ERR!
npm ERR! Failed at the contextify@0.1.4 install script.
npm ERR! This is most likely a problem with the contextify package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls contextify
npm ERR! There is likely additional logging output above.

npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nod
ejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "jquery"
npm ERR! cwd C:\Users\Matt Cashatt
npm ERR! node -v v0.8.21
npm ERR! npm -v 1.2.11
npm ERR! code ELIFECYCLE
npm ERR! Error: ENOENT, lstat 'C:\Users\Matt Cashatt\node_modules\jquery\node_mo
dules\jsdom\node_modules\request\tests\test-pipes.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nod
ejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "jquery"
npm ERR! cwd C:\Users\Matt Cashatt
npm ERR! node -v v0.8.21
npm ERR! npm -v 1.2.11
npm ERR! path C:\Users\Matt Cashatt\node_modules\jquery\node_modules\jsdom\node_
modules\request\tests\test-pipes.js
npm ERR! fstream_path C:\Users\Matt Cashatt\node_modules\jquery\node_modules\jsd
om\node_modules\request\tests\test-pipes.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack C:\Program Files\nodejs\node_modules\npm\node_modules\fst
ream\lib\writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:297:15)
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     C:\Users\Matt Cashatt\npm-debug.log
npm ERR! not ok code 0

C:\Users\Matt Cashatt>

Es sieht so aus, als ob der Fehler auf eine fehlende Python-Installation zurückzuführen ist. Nun, ich habe Python installiert, die Variable gesetzt und neu gestartet und immer noch den Fehler.

Gibt es einen Hinweis darauf, was mir fehlt?


1
Können Sie Text als Text anstelle eines Bildes einfügen? Abgesehen davon, dass es schwer zu lesen ist (zumal es anscheinend die bereits niedrig aufgelösten Bitmap-Schriftarten verkleinert), ist es nicht kopierbar.
abarnert

1
Noch wichtiger: Wie haben Sie die Umgebungsvariable vor dem Neustart festgelegt? Wenn Sie dies gerade PYTHON=C:\Python27\Python.exein Ihrem Cmd-Fenster getan und neu gestartet haben, ging die Einstellung verloren.
abarnert

7
Welche Python-Version haben Sie installiert? Zumindest ältere Versionen von waf und gyp erforderten 2.x, sagten aber nichts darüber und würden alle möglichen mysteriösen Fehler verursachen, wenn Sie stattdessen 3.x installieren würden.
abarnert

Danke für deine Kommentare. Ich habe den Fehler im Textformat gepostet. Ich benutze v2.7
Matt Cashatt

OK, aber bitte beantworten Sie die "wichtigere" Frage, denn das ist, wie der Text andeutet, wichtig. Möglicherweise möchten Sie dies auch selbst testen: Startet oder startet ein cmd.exeFenster vor dem Ausführen des npmBefehls einen Python-Interpreter? Wenn nicht, haben Sie es nicht richtig eingerichtet. python%PYTHON%
abarnert

Antworten:


133

Ihr Problem ist, dass Sie die Umgebungsvariable nicht festgelegt haben.

Der Fehler sagt dies eindeutig:

gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.

Und in Ihrem Kommentar sagen Sie, dass Sie dies getan haben:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

Das ist schön, aber das setzt nicht die PYTHONVariable, sondern die PYTHONPATHVariable.


In der Zwischenzeit setwirkt sich die Verwendung des Befehls nur auf die aktuelle cmdSitzung aus. Wenn Sie danach neu starten, wie Sie sagen, erhalten Sie eine ganz neue cmdSitzung, in der diese Variable nicht festgelegt ist.

Es gibt einige Möglichkeiten, Umgebungsvariablen dauerhaft festzulegen. Am einfachsten ist dies in der Systemsteuerung in XP, die sich in Vista natürlich unterscheidet, in 7 erneut und in 8 erneut, aber Sie können danach googeln.

Alternativ können Sie setvor dem npmBefehl einfach das Richtige tun , ohne dazwischen einen Neustart durchzuführen.


Sie können testen, ob Sie die Dinge richtig gemacht haben, indem Sie genau das tun, was das Konfigurationsskript versucht: Versuchen Sie vor dem Ausführen npm, es auszuführen %PYTHON%. Wenn Sie es richtig gemacht haben, erhalten Sie einen Python-Interpreter (den Sie sofort beenden können). Wenn Sie eine Fehlermeldung erhalten, haben Sie es nicht richtig gemacht.


Hierbei gibt es zwei Probleme:

set PYTHON=%PYTHON%;D:\Python

Erstens, du bist Einstellung PYTHONzu ;D:\Python. Dieses zusätzliche Semikolon ist in Ordnung für eine durch Semikolons getrennte Liste von Pfaden wie PATHoder PYTHONPATH, aber nicht für einen einzelnen Wert wie PYTHON. Ebenso möchten Sie dem vorhandenen Wert einen neuen Wert hinzufügen, wenn Sie einer Liste von Pfaden einen anderen Pfad hinzufügen möchten, jedoch nicht für einen einzelnen Wert. Also willst du nur set PYTHON=D:\Python.

Zweitens D:\Pythonist nicht der Pfad zu Ihrem Python-Interpreter. Es ist so etwas wie D:\Python\Python.exeoder D:\Python\bin\Python.exe. Suchen Sie den richtigen Pfad, stellen Sie sicher, dass er selbstständig funktioniert (z. B. D:\Python\bin\Python.exegeben Sie einen Python-Interpreter ein und stellen Sie sicher, dass Sie ihn erhalten), legen Sie die Variable fest und verwenden Sie sie.


So:

set PYTHON=D:\Python\bin\Python.exe

Wenn Sie es dauerhaft machen möchten, führen Sie das Gleiche in der Systemsteuerung aus.


1
OK, ich verstehe Folgendes: Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten. C: \ Benutzer \ Matt Cashatt> PYTHON =% PYTHON% setzen; D: \ Python C: \ Benutzer \ Matt Cashatt>% PYTHON% '% PYTHON%' wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt . C: \ Benutzer \ Matt Cashatt>
Matt Cashatt

1
Auf dem DLaufwerk habe ich auch Python, falls Sie sich fragen. Danke nochmal für deine Hilfe.
Matt Cashatt

Arbeitete wie ein Zauber, danke! Für andere: Ich musste den setBefehl aus irgendeinem Grund im NPM-Befehlsfenster ausführen und den mpm install jqueryBefehl direkt danach ausführen . Wenn ich sie separat gemacht habe, hat es aus irgendeinem Grund nicht funktioniert.
Matt Cashatt

@MatthewPatrickCashatt: Wie ich bereits erklärt habe, setwirkt sich der Befehl nur auf das aktuelle cmdFenster aus. Sie müssen dies also tun, bevor Sie npmim selben Fenster ausgeführt werden. Wenn Sie Umgebungsvariablen dauerhafter festlegen möchten, finden Sie diese in der Systemsteuerung oder gleichwertig für Ihre Windows-Version.
Abarnert

3
@abarnert ist die eigentliche Antwort auf diese Frage, dann setzen Sie PYTHON = D: \ Python \ bin \ Python.exe - wäre hilfreich, wenn Sie den richtigen Weg
angeben

449

Wenn Sie Python nicht zusammen mit allen Knoten-Gyp-Abhängigkeiten installiert haben, öffnen Sie einfach Powershell oder Git Bash mit Administratorrechten und führen Sie Folgendes aus:

npm install --global --production windows-build-tools

und dann, um das Paket zu installieren:

npm install --global node-gyp

Nach der Installation werden alle Knoten-Gyp-Abhängigkeiten heruntergeladen, Sie benötigen jedoch weiterhin die Umgebungsvariable. Validate Python befindet sich tatsächlich im richtigen Ordner:

C:\Users\ben\.windows-build-tools\python27\python.exe 

Hinweis - Es wird Python 2.7 und nicht 3.x verwendet, da es nicht unterstützt wird

Wenn es nicht stöhnt, erstellen Sie Ihre (Benutzer-) Umgebungsvariable:

setx PYTHON "%USERPROFILE%\.windows-build-tools\python27\python.exe"

Starten Sie cmd neu und überprüfen Sie, ob die Variable vorhanden ist, über set PYTHONdie die Variable zurückgegeben werden soll

Zuletzt erneut anwenden npm install <module>


1
Ich hatte einige Berechtigungsfehler, konnte Python jedoch manuell installieren von: C: \ Users [me] \. Windows-build-tools \ python.msi. In der Installation ist eine Option, um es dem Pfad hinzuzufügen. (Neustart der cmd / PS) und es funktionierte
d.raev

Ich bekomme den Fehler dh Schlüssel zu klein: openssk \ ssl \ s3_clnt, c: 3641
user1428716

14
Für die Installation von Windows-Build-Tools ist PowerShell erforderlich, das unter Windows 10 als Administrator ausgeführt wird. Dies bedeutet, dass der Befehl setxsetx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae

Ich musste diese Befehle an einer Eingabeaufforderung mit erhöhten Rechten ausführen, aber es scheint funktioniert zu haben. Die manuelle Installation von Python 3.x und das Festlegen der PYTHON-Umgebungsvariablen auf diesen Punkt hat nicht funktioniert. Ich nehme an, mein Fehler hängt mit dem Unterschied in der Python-Versionierung zusammen. Trotzdem danke!
JeffryHouser

16

Für mich nach der Installation von Windows-Build-Tools mit dem folgenden Kommentar

npm --add-python-to-path='true' --debug install --global windows-build-tools

Führen Sie den folgenden Code aus

npm config set python "%USERPROFILE%\.windows-build-tools\python27\python.exe"

hat gearbeitet.


Ich brauchte auch beide oben genannten Schritte. Ich werde auch hinzufügen, dass für mich (Windows 10 Pro 1803, Knoten 10.15.3, npm v6.9.0), als ich den ersten Schritt ausführte, den Schritt 'npm install windows-build-tools', diese Installation nie schien vollständig schien es endlos zu schleifen (Rückgabe der gleichen Ausgangsleitungen an die Konsole). Nachdem ich mir diese scheinbar endlose Schleife einige Minuten lang angesehen hatte, entschied ich mich, Strg + C zu verwenden, um "den Stapeljob zu beenden". Alles funktionierte wie beabsichtigt, die Unterbrechung der Schleife schien kein Problem zu sein.
StackOverflowUser


11

Eine und / oder mehrere davon sollten helfen:

  1. Hinzufügen C:\Python27\zu Ihrer PATHVariablen (vorausgesetzt, Sie haben Python in diesem Verzeichnis installiert)
    So legen Sie die PATHenv-Variable fest: http://www.computerhope.com/issues/ch000549.htm
    Starten Sie Ihre Konsole und / oder Windows nach dem Festlegen der Variablen neu.

  2. Fügen Sie im selben Abschnitt wie oben ("Umgebungsvariablen") eine neue Variable mit Name PYTHONund Wert hinzu. C:\Python27\python.exe
    Starten Sie Ihre Konsole und / oder Windows neu, nachdem Sie die Variable festgelegt haben.

  3. Öffnen Sie die Windows-Befehlszeile ( cmd) im Admin-Modus .
    Wechseln Sie in das Verzeichnis Ihres Python-Installationspfads: cd C:\Python27
    Stellen Sie sicher, dass für einige Installationen ein Symlink erforderlich ist:mklink python2.7.exe python.exe

Bitte beachten Sie, dass Sie Python 2.x und NICHT 3.x haben sollten, um node-gypbasierte Installationen ausführen zu können !

Der folgende Text bezieht sich auf Unix, aber für die Windows-Version ist auch Python 2.x erforderlich:

You can install with npm:

$ npm install -g node-gyp
You will also need to install:

On Unix:
python (v2.7 recommended, v3.x.x is not supported)
make
A proper C/C++ compiler toolchain, like GCC

Dieser Artikel kann auch helfen: https://github.com/nodejs/node-gyp#installation


8

Ich hatte das gleiche Problem und keine dieser Antworten half. In meinem Fall wurde die PYTHON-Variable korrekt eingestellt. Python wurde jedoch zu tief installiert, dh es hat einen zu langen Pfad. Also habe ich folgendes gemacht:

  1. Python in c: \ python neu installiert
  2. Setzen Sie die Umgebungsvariable PYTHON auf C: \ python \ python.exe

Und das ist es!



6

Es gibt eine Lösung, um dieses Problem zu beheben: 1) Führen Sie Ihre Eingabeaufforderung als "Administrator" aus.

Wenn die erste Lösung Ihr Problem nicht löst, versuchen Sie Folgendes:

2) Öffnen Sie eine Eingabeaufforderung, während der Administrator die folgende Codezeile einfügt, und drücken Sie die Eingabetaste:

npm install --global --production windows-build-tools

5

TL; DR Erstellen Sie eine Kopie oder einen Alias ​​Ihrer python.exe mit dem Namen python2.7.exe

Mein Python 2.7 wurde als installiert

D: \ app \ Python27 \ python.exe

Ich habe immer diesen Fehler erhalten, egal wie ich die PYTHON env-Variable gesetzt (und überprüft) habe:

gyp ERR! Stapelfehler: Die ausführbare Python-Datei "python2.7" kann nicht gefunden werden. Sie können die Variable PYTHON env festlegen.
gyp ERR! Stapel bei failNoPython (C: \ Programme \ nodejs \ knotenmodule \ npm \ knotenmodule \ knoten-gyp \ lib \ configure.js: 103: 14)

Der Grund dafür war, dass in der Datei configure.js von node-gyp die ausführbare Python-Datei wie folgt aufgelöst wurde:

var python = gyp.opts.python || process.env.PYTHON || 'python'

Und es stellte sich heraus, dass gyp.opts.python den Wert 'python2.7' hatte, wodurch process.env.PYTHON überschrieben wurde.

Ich habe dieses Problem behoben, indem ich einen Alias ​​für die ausführbare Datei python.exe mit dem Namen node-gyp erstellt habe, nach dem gesucht wurde:

D:\app\Python27>mklink python2.7.exe python.exe

Für diesen Vorgang benötigen Sie Administratorrechte.


5

Folgendes hat für mich über die Befehlszeile als Administrator funktioniert:

Installieren von Windows-Build-Tools (dies kann 15 bis 20 Minuten dauern):

 npm --add-python-to-path='true' --debug install --global windows-build-tools

Hinzufügen / Aktualisieren der Umgebungsvariablen:

setx PYTHON "%USERPROFILE%\.windows-build-tools\python27\python.exe"

Node-Gyp installieren:

npm install --global node-gyp

Ändern des Namens der exe-Datei von Python in Python2.7.

C:\Users\username\.windows-build-tools\python27\Python2.7

npm install module_name --save



5

Dies ist der einfachste Weg, NPM alles für Sie tun zu lassen

npm --add-python-to-path='true' --debug install --global windows-build-tools

4

Der richtige Weg ist 1) Laden Sie Python 2.7.14 von hier herunter und installieren Sie es . 2) Legen Sie von hier aus die Umgebungsvariable für Python fest .

getan!

Hinweis: Bitte setzen Sie die Umgebungsvariable entsprechend. Ich antwortete hier für Windows.


4

Für mich war das Problem, dass ich die neueste Version des Knotens verwendete und nicht die LTSVersion, die die stabile Version ist und für die meisten Benutzer empfohlen wird.
Die Verwendung der LTSVersion löste das Problem.
Sie können hier herunterladen:

LTS-Version

Aktuelle neueste Version


4

Ich habe die gleiche Herausforderung beim Versuch, node-sass@4.9.4 zu installieren, gemeistert .

Nachdem ich mir die aktuelle offizielle Dokumentation angesehen und die obigen Antworten gelesen hatte, stellte ich fest, dass Sie möglicherweise nicht unbedingt Node-Gyp oder Windows-Build-Tools installieren müssen. Hier steht die Installation von Node-Gyp unter Windows . Denken Sie daran, dass node-gyp am Installationsprozess von node-sass beteiligt ist. Und Sie müssen nicht wirklich eine andere Python-Version neu installieren.

Dies ist der Retter. Konfigurieren Sie den Python-Pfad, nach dem "npm" suchen soll, während Sie Pakete installieren, für die Build-Tools erforderlich sind.

C:\> npm config set python /Python36/python

Ich hatte dort Python3.6.3 unter Windows-7 installiert.


Die gleiche Lösung funktionierte für mich während der Installation node-sass@4.9.4, als ich windows-10mit node@10.6.3undyarn@1.19.1
MwamiTovi

Beachten Sie, dass Python36/pythondies der Pfad zu Ihrer ausführbaren Python-Datei sein sollte.exe
MwamiTovi

Wenn neu, gehen Sie zu dem Ort, an dem Ihre ausführbare Python-Datei installiert wurde. In Fenstern , Presse hold Shift, and Right-Clickund geben Sie diese:npm config set python
MwamiTovi

3

Für mich haben diese Schritte das Problem behoben:

1- Ausführen dieses Cmd als Administrator:

npm install --global --production windows-build-tools

2- Führen Sie npm rebuilddie Ausführung nach Abschluss des ersten Schritts aus (insbesondere nach Abschluss der Python 2.7-Installation, die die Hauptursache für das Problem war).


2

Laden Sie das Python-Installationsprogramm hier herunter . Es erledigt die Arbeit für Sie, wenn Sie die Pfadinstallation überprüfen


1

Hier ist der richtige Befehl: set path =% path%; C: \ Python34 [Durch den richtigen Pfad Ihrer Python-Installation ersetzen]

Ich hatte das gleiche Problem und habe es einfach so gelöst.

Wie einige andere Leute betonten, handelt es sich um eine flüchtige Konfiguration, die nur für die aktuelle cmd-Sitzung funktioniert und (offensichtlich) Sie müssen Ihren Pfad festlegen, bevor Sie die npm-Installation ausführen.

Ich hoffe das hilft.


1

gyp ERR! Fehler gyp ERR konfigurieren! Stack-Fehler: Die ausführbare Python-Datei "Python" kann nicht gefunden werden. Sie können die PYT HON-Umgebungsvariable festlegen.

Diese Ausnahme muss nicht neu installiert werden. Diese Ausnahme wird durch ein Node-Gyp-Skript ausgelöst. Versuchen Sie dann, sie neu zu erstellen. Es ist genug Setup-Umgebungsvariable wie in meinem Fall:

SET PYTHON=C:\work\_env\Python27\python.exe

1

Wenn Sie versuchen, dies auf Cygwin zu verwenden, müssen Sie den Anweisungen in dieser Antwort folgen . (Es ist ein Problem, wie Cygwin Windows-Symlinks behandelt.)


1

Beispiel: pg_config nicht ausführbar / error node-gyp

Lösung: Versuchen Sie unter Windows einfach, PATH Env -> C: \ Programme \ PostgreSQL \ 12 \ bin hinzuzufügen

Arbeite für mich. Jetzt kann ich zum Beispiel npm i pg-versprechen oder andere Abhängigkeiten verwenden.


Denn pg-promisedas brauchst du nicht. Sie wurden wahrscheinlich gefangen von diesem . Verwenden Sie einfach die neueste Version, und es wird Ihnen gut gehen, Sie brauchen nichts von dem zusätzlichen Zeug;)
vitaly-t
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.