Exécution de Python sur Windows pour les dépendances Node.js

226

J'entre dans une base de code Node.js qui nécessite que je télécharge quelques dépendances via NPM, à savoir jQuery.

En essayant de courir npm install jquery, je reçois toujours cette erreur:

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  [email protected] { [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! [email protected] install: `node-gyp rebuild`
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1
npm ERR!
npm ERR! Failed at the [email protected] 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!     <[email protected]>

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>

Il semble que l'échec soit dû à une installation Python manquante. Eh bien, j'ai installé Python, défini la variable et redémarré et toujours l'erreur.

Une idée de ce qui me manque?

Matt Cashatt
la source
1
Pouvez-vous coller du texte en tant que texte, au lieu d'une image? En plus d'être difficile à lire (d'autant plus qu'il est apparemment réduit les polices bitmap déjà basse résolution), il n'est pas copiable.
abarnert
1
Plus important encore: comment avez-vous défini la variable d'environnement avant de redémarrer? Si vous venez de le faire PYTHON=C:\Python27\Python.exedans votre fenêtre cmd et redémarrez, le paramètre a été perdu.
abarnert
7
De plus, quelle version de Python avez-vous installée? Au moins les versions plus anciennes de waf et gyp nécessitaient 2.x mais n'en disaient rien, et donneraient toutes sortes d'erreurs mystérieuses si vous installiez 3.x à la place.
abarnert
Merci pour vos commentaires. J'ai publié l'erreur au format texte. J'utilise la v2.7
Matt Cashatt
D'accord, mais veuillez répondre à la question "plus important", car c'est, comme le texte l'indique, important. Vous pouvez également tester cela vous-même: Dans la cmd.exefenêtre, avant d'essayer la npmcommande, est-ce que pythonou %PYTHON%démarrez un interpréteur Python? Sinon, vous ne l'avez pas bien configuré.
abarnert

Réponses:

132

Votre problème est que vous n'avez pas défini la variable d'environnement.

L'erreur dit clairement ceci:

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

Et dans votre commentaire, vous dites que vous avez fait ceci:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

C'est bien, mais cela ne définit pas la PYTHONvariable, cela définit la PYTHONPATHvariable.


Pendant ce temps, l'utilisation de la setcommande n'affecte que la cmdsession en cours. Si vous redémarrez après cela, comme vous l'avez dit, vous vous retrouvez avec une toute nouvelle cmdsession qui n'a pas cette variable définie.

Il existe plusieurs façons de définir les variables d'environnement de manière permanente - la plus simple est dans le Panneau de configuration système sous XP, qui est bien sûr différent sous Vista, différent à nouveau en 7 et différent à nouveau en 8, mais vous pouvez le rechercher sur Google.

Alternativement, faites juste la setdroite avant la npmcommande, sans redémarrer entre les deux.


Vous pouvez tester si vous avez bien fait les choses en faisant exactement la même chose que le script de configuration essaie de faire: avant de lancer npm, essayez de lancer %PYTHON%. Si vous l'avez fait correctement, vous obtiendrez un interpréteur Python (que vous pouvez immédiatement quitter). Si vous obtenez une erreur, vous ne l'avez pas bien fait.


Il y a deux problèmes avec ceci:

set PYTHON=%PYTHON%;D:\Python

Tout d'abord, vous vous mettez PYTHONà ;D:\Python. Ce point-virgule supplémentaire convient pour une liste de chemins séparés par des points-virgules, comme PATHou PYTHONPATH, mais pas pour une seule valeur comme PYTHON. Et de même, ajouter une nouvelle valeur à la valeur existante est ce que vous voulez lorsque vous souhaitez ajouter un autre chemin à une liste de chemins, mais pas pour une seule valeur. Alors, tu veux juste set PYTHON=D:\Python.

Deuxièmement, ce D:\Pythonn'est pas le chemin vers votre interpréteur Python. C'est quelque chose comme D:\Python\Python.exe, ou D:\Python\bin\Python.exe. Trouvez le bon chemin, assurez-vous qu'il fonctionne seul (par exemple, tapez D:\Python\bin\Python.exeet assurez-vous d'obtenir un interpréteur Python), puis définissez la variable et utilisez-la.


Alors:

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

Ou, si vous voulez le rendre permanent, faites l'équivalent dans le Panneau de configuration.

abarnert
la source
1
OK, je reçois donc ceci: Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Tous les droits sont réservés. C: \ Users \ Matt Cashatt> set PYTHON =% PYTHON%; D: \ Python C: \ Users \ Matt Cashatt>% PYTHON% '% PYTHON%' n'est pas reconnu comme une commande interne ou externe, un programme exécutable ou un fichier de commandes . C: \ Users \ Matt Cashatt>
Matt Cashatt
1
En outre, le Dlecteur est l'endroit où j'ai Python au cas où vous vous poseriez la question. Merci encore pour votre aide.
Matt Cashatt
Fonctionné comme un charme, merci! Pour les autres: j'ai dû exécuter la setcommande dans la fenêtre de commande NPM pour une raison quelconque, puis exécuter la mpm install jquerycommande juste après. Si je les ai fait séparément, cela n'a pas fonctionné pour une raison quelconque.
Matt Cashatt
@MatthewPatrickCashatt: Comme je l'ai expliqué, la setcommande n'affecte que la cmdfenêtre actuelle , vous devez donc la faire avant de l'exécuter npmdans la même fenêtre. Si vous souhaitez définir des variables d'environnement de manière plus permanente, c'est dans le Panneau de configuration du système, ou l'équivalent pour votre version de Windows.
abarnert
3
@abarnert est la vraie réponse à cette question, puis définissez PYTHON = D: \ Python \ bin \ Python.exe - serait utile si vous donniez la bonne façon et
expliquiez
449

Si vous n'avez pas installé python avec toutes les dépendances de node-gyp, ouvrez simplement Powershell ou Git Bash avec des privilèges d'administrateur et exécutez:

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

puis pour installer le package:

npm install --global node-gyp

une fois installé, vous aurez toutes les dépendances node-gyp téléchargées, mais vous aurez toujours besoin de la variable d'environnement. Valider Python se trouve en effet dans le bon dossier:

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

Remarque - il utilise python 2.7 et non 3.x car il n'est pas pris en charge

S'il ne gémit pas, allez-y et créez votre variable d'environnement (utilisateur):

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

redémarrez cmd et vérifiez que la variable existe via set PYTHONlaquelle doit renvoyer la variable

Enfin, réappliquez npm install <module>

benscabbia
la source
1
J'ai eu une erreur d'autorisation, mais j'ai réussi à installer manuellement python à partir de: C: \ Users [me] \. Windows-build-tools \ python.msi. Dans l'installation est une option pour l'ajouter au chemin. (Redémarrage du cmd / PS) et cela a fonctionné
d.raev
J'obtiens la clé dh d'erreur trop petite: openssk \ ssl \ s3_clnt, c: 3641
user1428716
14
L'installation de windows-build-tools exigeait que PowerShell s'exécute en tant qu'administrateur sur Windows 10. Cela signifie que la commande setx devientsetx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae
J'ai dû exécuter ces commandes dans une invite de commande élevée, mais cela semble avoir fonctionné. L'installation manuelle de Python 3.x et la définition de la variable d'environnement PYTHON pour pointer vers cela n'a pas fonctionné. Je suppose que mon erreur est liée à la différence de version de python? Merci quand même!
JeffryHouser
16

Pour moi après avoir installé windows-build-tools avec le commentaire ci-dessous

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

exécuter le code ci-dessous

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

a travaillé.

Serhat Oz
la source
J'ai également eu besoin des deux étapes ci-dessus. J'ajouterai également que, pour moi (Windows 10 Pro 1803, noeud v10.15.3, npm v6.9.0) lorsque j'ai exécuté la première étape, l'étape `` npm install windows-build-tools '', cette installation n'a jamais semblé complet, il semblait boucler sans fin (renvoyant les mêmes lignes de sortie à la console). Après avoir regardé cette boucle sans fin apparente pendant un certain nombre de minutes, j'ai choisi d'utiliser Ctrl + C pour "terminer le travail par lots". Tout fonctionnait comme prévu, l'interruption de la boucle ne semblait pas être un problème.
StackOverflowUser
10

Un et / ou plusieurs de ceux-ci devraient aider:

  1. Ajoutez C:\Python27\à votre PATHvariable (en considérant que Python est installé dans ce répertoire)
    Comment définir la PATHvariable env: http://www.computerhope.com/issues/ch000549.htm
    Redémarrez votre console et / ou Windows après avoir défini la variable.

  2. Dans la même section que ci-dessus ("Variables d'environnement"), ajoutez une nouvelle variable avec le nom PYTHONet la valeur C:\Python27\python.exe
    Redémarrez votre console et / ou Windows après avoir défini la variable.

  3. Ouvrez la ligne de commande Windows ( cmd) en mode Admin .
    Changez le répertoire en votre chemin d'installation Python: cd C:\Python27
    Rendez le lien symbolique nécessaire pour certaines installations:mklink python2.7.exe python.exe

Veuillez noter que vous devriez avoir Python 2.x, PAS 3.x , pour exécuter des node-gypinstallations basées!

Le texte ci-dessous dit sur Unix, mais la version Windows nécessite également Python 2.x:

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

Cet article peut également aider: https://github.com/nodejs/node-gyp#installation

thybzi
la source
8

J'ai eu le même problème et aucune de ces réponses n'a aidé. Dans mon cas, la variable PYTHON a été définie correctement. Cependant python a été installé trop profondément, c'est-à-dire a un chemin trop long. J'ai donc fait ce qui suit:

  1. python réinstallé dans c: \ python
  2. définissez la variable d'environnement PYTHON sur C: \ python \ python.exe

Et c'est tout!

zhekaus
la source
7

Cela a aidé: https://www.npmjs.com/package/node-gyp

J'ai suivi ces étapes:

npm install -g node-gyp

puis:

npm install --global --production windows-build-tools
peegee
la source
npm install -g node-gyp était suffisant
Chamin Thilakarathne
6

il existe une solution pour résoudre ce problème: 1) exécutez votre invite de commande en tant qu '"administrateur".

si la première solution ne résout pas votre problème, essayez celle-ci:

2) ouvrez une invite de commande en tant qu'administrateur, collez la ligne de code suivante et appuyez sur Entrée:

npm install --global --production windows-build-tools
Pedram Rastegar
la source
5

TL; DR Faites une copie ou un alias de votre python.exe avec le nom python2.7.exe

Mon python 2.7 a été installé en tant que

D: \ app \ Python27 \ python.exe

J'ai toujours cette erreur, peu importe la façon dont j'ai défini (et vérifié) la variable env PYTHON:

gyp ERR! Erreur de pile: impossible de trouver l'exécutable Python "python2.7", vous pouvez définir la variable env PYTHON.
gyp ERR! pile à failNoPython (C: \ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 103: 14)

La raison en était que dans le fichier configure.js de node-gyp, l'exécutable python était résolu comme:

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

Et il s'est avéré que gyp.opts.python avait la valeur 'python2.7', remplaçant ainsi process.env.PYTHON.

J'ai résolu cela en créant un alias pour l'exécutable python.exe avec le nom que node-gyp recherchait:

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

Vous avez besoin des droits d'administrateur pour cette opération.

iaarnio
la source
5

Les éléments suivants ont fonctionné pour moi à partir de la ligne de commande en tant qu'administrateur:

Installation de windows-build-tools (cela peut prendre 15 à 20 minutes):

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

Ajout / mise à jour de la variable d'environnement:

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

Installation de node-gyp:

npm install --global node-gyp

Modification du nom du fichier exe de Python à Python2.7.

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

npm install module_name --save

Sikander
la source
5

C'est le moyen le plus simple de laisser NPM faire tout pour vous

npm --add-python-to-path='true' --debug install --global windows-build-tools
Ashish Gupta
la source
4

La bonne façon est 1) de télécharger et d'installer python 2.7.14 à partir d' ici . 2) Définissez la variable d'environnement pour python à partir d' ici .

terminé!

Remarque: Veuillez définir la variable d'environnement en conséquence. J'ai répondu ici pour les fenêtres.

Herat Patel
la source
4

J'ai rencontré le même défi en essayant d' installer [email protected] .

Et après avoir regardé la documentation officielle actuelle et après avoir lu les réponses ci-dessus, j'ai remarqué que vous pourriez ne pas nécessairement avoir à installer node-gyp ni à installer des outils de construction de fenêtres. Voici ce qu'il dit, ici sur l'installation de node-gyp sur Windows . N'oubliez pas que node-gyp est impliqué dans le processus d'installation de node-sass. Et vous n'avez pas vraiment à réinstaller une autre version de python.

Ceci est le sauveur, configurez le chemin d'accès python que "npm" doit rechercher lors de l'installation des packages qui nécessitent des outils de build.

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

J'avais installé python3.6.3, sur windows-7, là-bas.

MwamiTovi
la source
La même solution a fonctionné pour moi lors de l'installation [email protected], lorsque je suis passé à windows-10, en utilisant [email protected]et[email protected]
MwamiTovi
Notez que cela Python36/pythondevrait être le chemin vers votre fichier exécutable python.exe
MwamiTovi
Si nouveau, allez à l'endroit où votre exécutable python a été installé. Dans Windows , appuyez sur hold Shift, and Right-Clicket entrez ceci:npm config set python
MwamiTovi
2

Pourquoi ne pas télécharger le programme d'installation de python ici ? Il fait le travail pour vous lorsque vous vérifiez l'installation du chemin

T-prod
la source
2

Pour moi, ces étapes ont résolu le problème:

1- Exécuter ce cmd en tant qu'administrateur:

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

2- Puis en cours d'exécution une npm rebuildfois la 1ère étape terminée (en particulier l'achèvement de l'installation de python 2.7, qui était la principale cause du problème)

Ahmed Elkoussy
la source
1

Voici la commande correcte: set path =% path%; C: \ Python34 [Remplacez par le chemin correct de votre installation python]

J'ai eu le même problème et je viens de résoudre ça comme ça.

Comme d'autres personnes l'ont souligné, il s'agit d'une configuration volatile, cela ne fonctionne que pour la session cmd actuelle et (évidemment) vous devez définir votre chemin avant d'exécuter l'installation de npm.

J'espère que ça aide.

Projenix
la source
1

gyp ERR! configurer l'erreur gyp ERR! Erreur de pile: Impossible de trouver l'exécutable Python "python", vous pouvez définir la variable env PYT HON.

Pas nécessaire de réinstaller, cette exception lance par le script node-gyp, puis essayez de reconstruire. C'est assez de variable d'environnement d'installation comme dans mon cas, je l'ai fait:

SET PYTHON=C:\work\_env\Python27\python.exe
Y. Aliaksei
la source
1

Si vous essayez de l'utiliser sur Cygwin, vous devez suivre les instructions de cette réponse. (La façon dont Cygwin traite les liens symboliques Windows pose problème.)

emigenix
la source
1

Exemple: pg_config non exécutable / erreur node-gyp

Lösung: Sous Windows essayez juste d'ajouter PATH Env -> C: \ Program Files \ PostgreSQL \ 12 \ bin

Travaillez pour moi, maintenant je peux utiliser npm i pg-promise par exemple ou d'autres dépendances.

P0y
la source
Car pg-promisevous n'en avez pas besoin. Vous avez probablement été rattrapé par cela . Utilisez simplement la dernière version, et tout ira bien, pas besoin de ces trucs supplémentaires;)
vitaly-t
0

Pour moi, le problème était que j'utilisais la dernière version de node et non la LTSversion qui est la version stable et recommandée pour la plupart des utilisateurs.
L'utilisation de la LTSversion a résolu le problème.
Vous pouvez télécharger ici:

Version LTS

Dernière version actuelle

Nurul Sundarani
la source