Executando o Python no Windows para dependências do Node.js.

226

Estou entrando em uma base de código Node.js., que requer o download de algumas dependências via NPM, a saber, jQuery.

Ao tentar executar npm install jquery, continuo recebendo este erro:

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>

Parece que a falha ocorreu devido à falta de uma instalação do Python. Bem, eu instalei o Python, configurei a variável e reiniciei e ainda assim o erro.

Alguma pista do que estou perdendo?

Matt Cashatt
fonte
1
Você pode colar texto como texto, em vez de uma imagem? Além de ser difícil de ler (especialmente porque aparentemente reduziu as fontes de bitmap de baixa resolução), não é copiável.
abarnert
1
Mais importante: como você definiu a variável de ambiente antes de reiniciar? Se você fez PYTHON=C:\Python27\Python.exena janela do cmd e reiniciou, a configuração foi perdida.
abarnert
7
Além disso, qual versão do Python você instalou? Pelo menos versões mais antigas do waf e gyp exigiam 2.x, mas não disseram nada sobre isso, e dariam todos os tipos de erros misteriosos se você instalasse o 3.x.
abarnert
Obrigado por seus comentários. Eu publiquei o erro no formato de texto. Estou usando a versão
2.7
OK, mas responda à pergunta "mais importante", porque isso é, como o texto indica, importante. Você também pode testar isso: Na cmd.exejanela, antes de tentar o npmcomando, um dos intérpretes Python é iniciado pythonou %PYTHON%iniciado? Caso contrário, você não configurou corretamente.
abarnert

Respostas:

132

Seu problema é que você não definiu a variável de ambiente.

O erro diz claramente isso:

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

E no seu comentário, você diz que fez o seguinte:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

Isso é legal, mas isso não define a PYTHONvariável, define a PYTHONPATHvariável.


Enquanto isso, apenas o uso do setcomando afeta apenas a cmdsessão atual . Se você reiniciar depois disso, como disse, acaba com uma cmdsessão totalmente nova que não possui essa variável definida.

Existem algumas maneiras de definir variáveis ​​de ambiente permanentemente - a mais fácil é no Painel de controle do sistema no XP, que é obviamente diferente no Vista, diferente novamente no 7 e diferente no 8, mas você pode pesquisar no Google.

Como alternativa, basta fazer o setdireito antes do npmcomando, sem reiniciar no meio.


Você pode testar se fez as coisas corretamente, fazendo exatamente a mesma coisa que o script de configuração está tentando fazer: Antes de executar npm, tente executar %PYTHON%. Se você fez isso corretamente, receberá um intérprete Python (do qual você pode sair imediatamente). Se você receber um erro, não o fez corretamente.


Existem dois problemas com isso:

set PYTHON=%PYTHON%;D:\Python

Primeiro, você está definindo PYTHONa ;D:\Python. Esse ponto e vírgula extra é bom para uma lista de caminhos separados por ponto e vírgula, como PATHou PYTHONPATH, mas não para um único valor como PYTHON. Da mesma forma, adicionar um novo valor ao valor existente é o que você deseja quando deseja adicionar outro caminho a uma lista de caminhos, mas não para um único valor. Então, você só quer set PYTHON=D:\Python.

Segundo, D:\Pythonnão é o caminho para o seu intérprete Python. É algo como D:\Python\Python.exe, ou D:\Python\bin\Python.exe. Encontre o caminho certo, verifique se ele funciona sozinho (por exemplo, digite D:\Python\bin\Python.exee certifique-se de obter um intérprete Python), depois defina a variável e use-a.


Assim:

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

Ou, se você quiser torná-lo permanente, faça o equivalente no Painel de Controle.

abarnert
fonte
1
OK, entendi o seguinte: Microsoft Windows [Versão 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Todos os direitos reservados. C: \ Users \ Matt Cashatt> defina PYTHON =% PYTHON%; D: \ Python C: \ Users \ Matt Cashatt>% PYTHON% '% PYTHON%' não é reconhecido como um comando interno ou externo, programa operacional ou arquivo em lote . C: \ Users \ Matt Cashatt>
Matt Cashatt
1
Além disso, a Dunidade é onde eu tenho o Python, caso você esteja se perguntando. Obrigado novamente por sua ajuda.
Matt Cashatt
Funcionou como um encanto, obrigado! Para outros: tive que executar o setcomando na janela de comando do NPM por algum motivo e, em seguida, execute o mpm install jquerycomando logo depois. Se eu os fiz separadamente, não funcionou por algum motivo.
Matt Cashatt
@MatthewPatrickCashatt: Como expliquei, o setcomando afeta apenas a cmdjanela atual , então você deve fazê-lo antes de executar npmna mesma janela. Se você deseja definir variáveis ​​de ambiente de forma mais permanente, isso está no Painel de Controle do Sistema ou equivalente à sua versão do Windows.
22813 abarnert
3
@abarnert é a resposta real para essa pergunta, em seguida, definir PYTHON = D: \ Python \ bin \ python.exe - seria útil se você deu a maneira correta, bem como explicar a maneira errada
reach4thelasers
449

Se você não possui o python instalado junto com todas as dependências do node-gyp, basta abrir o Powershell ou o Git Bash com privilégios de administrador e execute:

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

e depois instalar o pacote:

npm install --global node-gyp

uma vez instalado, você terá todas as dependências do node-gyp baixadas, mas ainda precisará da variável de ambiente. Validar Python é realmente encontrado na pasta correta:

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

Nota - ele usa python 2.7 e não 3.x, pois não é suportado

Se não se lamentar, vá em frente e crie sua variável de ambiente (usuário):

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

reinicie o cmd e verifique se a variável existe através da set PYTHONqual deve retornar a variável

Por fim, aplique novamente npm install <module>

benscabbia
fonte
1
Eu tive algum erro de permissão, mas consegui instalar manualmente o python de: C: \ Users [me] \. Windows-build-tools \ python.msi. Na instalação, há uma opção para adicioná-lo ao caminho. (Reiniciar o cmd / PS) e funcionou
d.raev
Eu recebo a chave dh do erro muito pequena: openssk \ ssl \ s3_clnt, c: 3641
user1428716
14
Instalação de janelas-build-ferramentas necessárias PowerShell Executar como Administrador no Windows 10. Isso significa que o comando setx tornasetx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae
Eu tive que executar esses comandos em um prompt de comando elevado, mas parece ter funcionado. Instalar manualmente o Python 3.xe configurar a variável de ambiente PYTHON para apontar para isso não funcionou. Presumo que meu erro esteja relacionado à diferença no controle de versão do python? Obrigado independentemente!
JeffryHouser
16

Para mim depois de instalar o windows-build-tools com o comentário abaixo

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

executando o código abaixo

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

trabalhou.

Serhat Oz
fonte
Eu também precisava dos dois passos acima. Também acrescentarei que, para mim (Windows 10 Pro 1803, nó v10.15.3, npm v6.9.0), quando executei a primeira etapa, a etapa 'npm install windows-build-tools', que a instalação nunca parecia completo, parecia estar em loop infinito (retornando as mesmas linhas de saída para o console). Depois de assistir a esse loop sem fim por alguns minutos, optei por usar Ctrl + C para "finalizar o trabalho em lotes". Tudo funcionou como planejado, interromper o loop não parecia ser um problema.
StackOverflowUser
15

Aqui está um guia que resolveu muitos desses problemas para mim.

http://www.steveworkman.com/node-js/2012/installing-jsdom-on-windows/

Lembro-me em particular da versão python como importante. Certifique-se de instalar o 2.7.3 em vez dos 3.

Jon Leavitt
fonte
1
Infelizmente, o link está quebrado.
Juangui Jordán
10

Um e / ou vários desses devem ajudar:

  1. Adicione C:\Python27\à sua PATHvariável (considerando que você tem o Python instalado neste diretório)
    Como definir a PATHvariável env: http://www.computerhope.com/issues/ch000549.htm
    Reinicie seu console e / ou Windows após definir a variável.

  2. Na mesma seção acima ("Variáveis ​​de ambiente"), adicione nova variável com nome PYTHONe valor C:\Python27\python.exe
    Reinicie seu console e / ou Windows após definir a variável.

  3. Abra a linha de comando do Windows ( cmd) no modo Admin .
    Altere o diretório para o caminho da instalação do Python: cd C:\Python27
    faça o link simbólico necessário para algumas instalações:mklink python2.7.exe python.exe

Observe que você deve ter o Python 2.x, NÃO 3.x , para executar node-gypinstalações baseadas!

O texto abaixo diz sobre o Unix, mas a versão do Windows também requer o 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

Este artigo também pode ajudar: https://github.com/nodejs/node-gyp#installation

thybzi
fonte
8

Eu tive o mesmo problema e nenhuma dessas respostas ajudou. No meu caso, a variável PYTHON foi definida corretamente. No entanto, o python foi instalado muito profundo, ou seja, possui um caminho muito longo. Então, eu fiz o seguinte:

  1. reinstalado python para c: \ python
  2. defina a variável de ambiente PYTHON como C: \ python \ python.exe

E é isso!

zhekaus
fonte
7

Isso ajudou: https://www.npmjs.com/package/node-gyp

Eu segui estes passos:

npm install -g node-gyp

então:

npm install --global --production windows-build-tools
peegee
fonte
npm instalar -g nó-gyp foi suficiente
Chamin Thilakarathne
6

Existem algumas soluções para resolver esse problema: 1) execute o prompt de comando como "administrador".

Se a primeira solução não resolver o seu problema, tente esta:

2) abra um prompt de comando como administrador, cole a seguinte linha de código e pressione enter:

npm install --global --production windows-build-tools
Pedram Rastegar
fonte
5

TL; DR Faça uma cópia ou alias do seu python.exe com o nome python2.7.exe

Meu python 2.7 foi instalado como

D: \ app \ Python27 \ python.exe

Sempre recebi esse erro, independentemente de como eu defini (e verifiquei) a variável env PYTHON env:

gyp ERR! Erro na pilha: Não é possível encontrar o executável Python "python2.7", você pode definir a variável env PYTHON.
gyp ERR! empilhe no failNoPython (C: \ Arquivos de programas \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 103: 14)

A razão para isso foi que, no configure.js do node-gyp, o executável python foi resolvido da seguinte forma:

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

E acabou que o gyp.opts.python tinha o valor 'python2.7', substituindo assim process.env.PYTHON.

Eu resolvi isso criando um alias para python.exe executável com o nome node-gyp que estava procurando:

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

Você precisa de direitos de administrador para esta operação.

iaarnio
fonte
5

O seguinte funcionou para mim na linha de comando como administrador:

Instalando o windows-build-tools (isso pode levar de 15 a 20 minutos):

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

Adicionando / atualizando a variável de ambiente:

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

Instalando o node-gyp:

npm install --global node-gyp

Alterando o nome do arquivo exe de Python para Python2.7.

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

npm install module_name --save

Sikander
fonte
5

Essa é a maneira mais fácil de permitir que o NPM faça tudo por você

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

O caminho certo é 1) Baixe e instale o python 2.7.14 a partir daqui . 2) Defina a variável de ambiente para python a partir daqui .

feito!

Nota: Defina a variável de ambiente de acordo. Eu respondi aqui pelas janelas.

Herat Patel
fonte
4

Eu enfrentei o mesmo desafio ao tentar instalar o [email protected] .

E depois de examinar a documentação oficial atual e de ter lido as respostas acima, notei que talvez você não precise necessariamente instalar o node-gyp nem instalar as ferramentas de construção do Windows. É o que diz aqui sobre a instalação do node-gyp no Windows . Lembre-se de que o node-gyp está envolvido no processo de instalação do node-sass. E você realmente não precisa reinstalar outra versão do python.

Este é o salvador, configure o caminho python que o "npm" deve procurar ao instalar quaisquer pacotes que exijam ferramentas de construção.

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

Eu tinha instalado o python3.6.3, no Windows-7, lá.

MwamiTovi
fonte
Mesma solução funcionou para mim durante a instalação [email protected], quando eu mudei para windows-10, usando [email protected]e[email protected]
MwamiTovi
Note-se que Python36/pythondeve ser o caminho para o arquivo executável python.exe
MwamiTovi
Se novo, vá para onde o seu executável python foi instalado. Nas janelas , pressione hold Shift, and Right-Clicke digite:npm config set python
MwamiTovi 29/01
2

Por que não baixar o instalador python aqui ? Faz o trabalho para você quando você verifica a instalação do caminho

T-prod
fonte
2

Para mim, essas etapas corrigiram o problema:

1- Executando este cmd como administrador:

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

2- Em seguida, execute a npm rebuildconclusão da 1ª etapa (principalmente a instalação da python 2.7, que foi a principal causa do problema)

Ahmed Elkoussy
fonte
1

Aqui está o comando correto: set path =% path%; C: \ Python34 [Substitua pelo caminho correto da sua instalação do python]

Eu tive o mesmo problema e resolvi isso assim.

Como algumas pessoas apontaram, essa é uma configuração volátil, funciona apenas para a sessão atual do cmd e (obviamente) você precisa definir seu caminho antes de executar o npm install.

Eu espero que isso ajude.

Projenix
fonte
1

gyp ERR! configurar erro gyp ERR! Erro na pilha: Não é possível encontrar o executável Python "python", você pode definir a variável env PYT HON.

Não é necessário reinstalar, jogue essa exceção pelo script node-gyp e tente reconstruir. É suficiente variável de ambiente de instalação como no meu caso:

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

Se você estiver tentando usar isso no Cygwin, precisará seguir as instruções nesta resposta. (É um problema como o Cygwin trata os links simbólicos do Windows.)

emigenix
fonte
1

Exemplo: pg_config não executável / erro node-gyp

Solução: No Windows, apenas tente adicionar PATH Env -> C: \ Arquivos de Programas \ PostgreSQL \ 12 \ bin

Trabalhe para mim, agora eu posso usar o npm i pg-promessa por exemplo ou outras dependências.

P0y
fonte
Para pg-promisevocê não precisa disso. Você provavelmente foi pego por isso . Basta usar a versão mais recente, e você vai ficar bem, não há necessidade de qualquer dessas coisas extra;)
vitaly-t
0

Para mim, o problema era que eu estava usando a versão mais recente do nó e não a LTSversão que é a versão estável e recomendada para a maioria dos usuários.
O uso da LTSversão resolveu o problema.
Você pode fazer o download aqui:

Versão LTS

Versão Atual Atual

Nurul Sundarani
fonte