Запуск Python в Windows для зависимостей Node.js

226

Я попадаю в кодовую базу Node.js, которая требует, чтобы я загрузил несколько зависимостей через NPM, а именно jQuery.

При попытке запустить npm install jqueryя получаю эту ошибку:

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>

Похоже, что ошибка связана с отсутствующей установкой Python. Ну, я установил Python, установил переменную, перезагрузил и все еще ошибка.

Любой ключ к тому, что мне не хватает?

Мэтт Кашатт
источник
1
Можете ли вы вставить текст как текст, а не изображение? Помимо того, что его трудно читать (тем более, что он, по-видимому, уменьшен уже растровыми шрифтами с низким разрешением), он не копируется.
abarnert
1
Более важно: как вы установили переменную окружения перед перезагрузкой? Если вы просто сделали это PYTHON=C:\Python27\Python.exeв окне cmd и перезагрузили компьютер, настройка была потеряна.
abarnert
7
Кроме того, какую версию Python вы установили? По крайней мере, более старые версии waf и gyp требовали 2.x, но ничего не говорили об этом, и вы могли бы получить всевозможные загадочные ошибки, если бы вы установили 3.x вместо этого.
abarnert
Спасибо за ваши комментарии. Я разместил ошибку в текстовом формате. Я использую v2.7
Matt Cashatt
Хорошо, но, пожалуйста, ответьте на «более важный» вопрос, потому что это, как следует из текста, важно. Вы также можете проверить это сами: В cmd.exeокне , прежде чем пытаться npmкоманду, это либо pythonили %PYTHON%запустить интерпретатор Python? Если нет, вы не настроили это правильно.
abarnert

Ответы:

132

Ваша проблема в том, что вы не установили переменную окружения.

Ошибка ясно говорит об этом:

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

И в своем комментарии вы говорите, что сделали это:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

Это хорошо, но это не устанавливает PYTHONпеременную, она устанавливает PYTHONPATHпеременную.


Между тем, только использование setкоманды влияет только на текущий cmdсеанс. Если вы перезагрузитесь после этого, как вы и сказали, вы получите совершенно новый cmdсеанс, в котором не установлена ​​эта переменная.

Есть несколько способов постоянной установки переменных среды - самый простой - в Системной панели управления в XP, которая, конечно, отличается в Vista, снова отличается в 7 и снова отличается в 8, но вы можете поискать ее в Google.

В качестве альтернативы, просто сделайте setпрямо перед npmкомандой, без перезагрузки между ними.


Вы можете проверить, правильно ли вы все сделали, выполнив то же самое, что пытается сделать скрипт конфигурации: перед запуском npmпопробуйте запустить %PYTHON%. Если вы все сделали правильно, вы получите интерпретатор Python (из которого вы можете немедленно выйти). Если вы получили ошибку, вы не сделали это правильно.


Есть две проблемы с этим:

set PYTHON=%PYTHON%;D:\Python

Во-первых, вы устанавливаете PYTHONна ;D:\Python. Эта лишняя точка с запятой подходит для списка путей, разделенных точкой с запятой, например PATHили PYTHONPATH, но не для одного значения типа PYTHON. И аналогично, добавление нового значения к существующему значению - это то, что вы хотите, когда хотите добавить другой путь в список путей, но не для одного значения. Итак, вы просто хотите set PYTHON=D:\Python.

Во-вторых, D:\Pythonэто не путь к вашему интерпретатору Python. Это что - то вроде D:\Python\Python.exe, или D:\Python\bin\Python.exe. Найдите правильный путь, убедитесь, что он работает сам по себе (например, введите D:\Python\bin\Python.exeи убедитесь, что вы получаете интерпретатор Python), затем установите переменную и используйте ее.


Так:

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

Или, если вы хотите сделать его постоянным, сделайте эквивалент в Панели управления.

abarnert
источник
1
Итак, я понял: Microsoft Windows [Версия 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Все права защищены. C: \ Users \ Matt Cashatt> set PYTHON =% PYTHON%; D: \ Python C: \ Users \ Matt Cashatt>% PYTHON% '% PYTHON%' не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл. , C: \ Users \ Matt Cashatt>
Matt Cashatt
1
Кроме того, на Dдиске у меня есть Python на случай, если вам интересно. В очередной раз благодарим за помощь.
Мэтт Кашатт
Работал как шарм, спасибо! Для других: мне пришлось по setкакой-то причине выполнить команду в окне команд NPM, а затем запустить mpm install jqueryкоманду сразу после этого. Если бы я делал их отдельно, по какой-то причине это не сработало.
Мэтт Кашатт
@MatthewPatrickCashatt: Как я объяснил, setкоманда влияет только на текущее cmdокно, поэтому вы должны сделать это перед запуском npmв том же окне. Если вы хотите установить переменные среды более постоянно, это находится в Системной панели управления или эквивалентно для вашей версии Windows.
abarnert
3
@abarnert - фактический ответ на этот вопрос, тогда установите PYTHON = D: \ Python \ bin \ Python.exe - было бы полезно, если бы вы указали правильный путь, а также объяснили неправильный путь
reach4thelasers
449

Если у вас не установлен python вместе со всеми зависимостями узла-гипа, просто откройте Powershell или Git Bash с правами администратора и выполните:

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

а затем установить пакет:

npm install --global node-gyp

после установки у вас будут загружены все зависимости node-gyp, но вам все еще нужна переменная окружения. Проверка Python действительно находится в правильной папке:

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

Обратите внимание - он использует Python 2.7, а не 3.x, так как он не поддерживается

Если он не стонет, создайте свою (пользовательскую) переменную окружения:

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

перезапустите cmd и убедитесь, что переменная существует, с помощью set PYTHONкоторой следует вернуть переменную

Наконец, повторно применить npm install <module>

benscabbia
источник
1
У меня была ошибка некоторых прав доступа, но мне удалось вручную установить python из: C: \ Users [me] \. Windows-build-tools \ python.msi. В установке есть возможность добавить его в путь. (Перезапуск cmd / PS) и все
заработало
Я получаю ошибку dh key, слишком маленькую: openssk \ ssl \ s3_clnt, c: 3641
user1428716
14
Для установки windows-build-tools требуется, чтобы PowerShell запускался от имени администратора в Windows 10. Это означает, что команда setx становитсяsetx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae
Мне нужно было запустить эти команды в командной строке с повышенными правами, но, похоже, это сработало. Установка Python 3.x вручную и установка переменной среды PYTHON, указывающей на это, не сработали. Я предполагаю, что моя ошибка связана с разницей в версиях Python? Спасибо независимо!
Джеффри Хаузер
16

Для меня после установки windows-build-tools с комментарием ниже

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

запустить код ниже

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

работал.

Серхат Оз
источник
Мне также понадобились оба вышеуказанных шага. Я также добавлю, что для меня (Windows 10 Pro 1803, узел v10.15.3, npm v6.9.0), когда я выполнил первый шаг, шаг 'npm install windows-build-tools', эта установка никогда не казалась завершено, казалось, что он зацикливался бесконечно (передавая одни и те же выходные строки на консоль). Наблюдая за этим кажущимся бесконечным циклом в течение нескольких минут, я решил использовать Ctrl + C, чтобы «завершить пакетное задание». Все работало как задумано, прерывание цикла не было проблемой.
StackOverflowUser
15

Вот руководство, которое решило многие из этих проблем для меня.

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

В частности, я помню версию Python как важную. Убедитесь, что вы установили 2.7.3 вместо 3-х.

Джон Ливитт
источник
1
Ссылка к сожалению не работает.
Хуанги Джордан
10

Один и / или несколько из них должны помочь:

  1. Добавьте C:\Python27\к своей PATHпеременной (учитывая, что в этом каталоге установлен Python)
    Как установить PATHпеременную env: http://www.computerhope.com/issues/ch000549.htm
    Перезапустите консоль и / или Windows после установки переменной.

  2. В том же разделе, что и выше («Переменные среды»), добавьте новую переменную с именем PYTHONи значением. C:\Python27\python.exe
    Перезагрузите консоль и / или Windows после установки переменной.

  3. Откройте командную строку Windows ( cmd) в режиме администратора .
    Измените каталог на путь установки Python: cd C:\Python27
    сделайте символическую ссылку необходимой для некоторых установок:mklink python2.7.exe python.exe

Обратите внимание, что у вас должен быть Python 2.x, а не 3.x , для запуска node-gypустановок на основе!

Текст ниже говорит о Unix, но версия Windows также требует 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

Эта статья также может помочь: https://github.com/nodejs/node-gyp#installation

thybzi
источник
8

У меня была такая же проблема, и ни один из этих ответов не помог. В моем случае переменная PYTHON была установлена ​​правильно. Однако python был установлен слишком глубоко, то есть имеет слишком длинный путь. Итак, я сделал следующее:

  1. переустановил python в c: \ python
  2. установите переменную окружения PYTHON в C: \ python \ python.exe

И это все!

zhekaus
источник
7

Это помогло: https://www.npmjs.com/package/node-gyp

Я следовал за этими шагами:

npm install -g node-gyp

затем:

npm install --global --production windows-build-tools
PeeGee
источник
npm install -g node-gyp было достаточно
Chamin Thilakarathne
6

Существует несколько способов решения этой проблемы: 1) запустите командную строку как «администратор».

если первое решение не решает вашу проблему, попробуйте следующее:

2) откройте командную строку, когда администратор вставит следующую строку кода и нажмите Enter:

npm install --global --production windows-build-tools
Педрам Растегар
источник
5

TL; DR Сделайте копию или псевдоним вашего python.exe с именем python2.7.exe

Мой питон 2.7 был установлен как

D: \ приложение \ python27 \ python.exe

Я всегда получаю эту ошибку независимо от того, как я установил (и проверил) переменную PYTHON env:

Гипер ERR! Ошибка стека: Не удается найти исполняемый файл Python "python2.7", вы можете установить переменную PYTHON env.
Гипер ERR! стек в failNoPython (C: \ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 103: 14)

Причиной этого было то, что в файле configure.js node-gyp исполняемый файл python был разрешен следующим образом:

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

И оказалось, что gyp.opts.python имеет значение 'python2.7', таким образом переопределяя process.env.PYTHON.

Я решил эту проблему, создав псевдоним для исполняемого файла python.exe с именем node-gyp, который искал:

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

Вам нужны права администратора для этой операции.

iaarnio
источник
5

У меня из командной строки работал админ:

Установка windows-build-tools (это может занять 15-20 минут):

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

Добавление / обновление переменной среды:

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

Установка узла-гипа:

npm install --global node-gyp

Изменение имени исполняемого файла с Python на Python2.7.

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

npm install module_name --save

Сикандер
источник
5

Это самый простой способ позволить NPM сделать все за вас

npm --add-python-to-path='true' --debug install --global windows-build-tools
Ашиш Гупта
источник
4

Правильный путь: 1) Загрузите и установите python 2.7.14 отсюда . 2) Установите переменную окружения для Python отсюда .

сделано!

примечание: пожалуйста, установите переменную среды соответственно. Я ответил здесь за окна.

Герат Патель
источник
4

Я столкнулся с той же проблемой, пытаясь установить node-sass@4.9.4 .

И, посмотрев текущую официальную документацию и прочитав ответы выше, я заметил, что вам не обязательно устанавливать ни node-gyp, ни инструменты Windows-build. Вот что здесь сказано об установке node-gyp на windows . Помните, что node-gyp участвует в процессе установки node-sass. И вам не нужно переустанавливать другую версию Python.

Это спаситель, настройте путь Python, который должен искать «npm» при установке любых пакетов, требующих инструментов сборки.

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

Я установил python3.6.3, на Windows-7, там.

MwamiTovi
источник
Такое же решение работало для меня при установке node-sass@4.9.4, когда я переключился на windows-10использование node@10.6.3иyarn@1.19.1
MwamiTovi
Обратите внимание, что это Python36/pythonдолжен быть путь к вашему исполняемому файлу Python.exe
MwamiTovi
Если новый, перейдите туда, где был установлен ваш исполняемый файл Python. В окнах нажмите hold Shift, and Right-Clickи введите это:npm config set python
MwamiTovi
2

Почему бы не скачать установщик Python здесь ? Это сделает работу за вас, когда вы проверяете путь установки

Т-прод
источник
2

Для меня эти шаги решили проблему:

1- Запуск этого cmd от имени администратора:

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

2- Затем выполняется npm rebuildпосле завершения 1-го шага (особенно после завершения установки Python 2.7, которая была основной причиной проблемы).

Ахмед Элкусси
источник
1

Вот правильная команда: set path =% path%; C: \ Python34 [Заменить на правильный путь вашей установки Python]

У меня была такая же проблема, и я просто решил это так.

Как отмечали некоторые другие люди, это изменчивая конфигурация, она работает только для текущего сеанса cmd, и (очевидно) вы должны указать свой путь перед запуском npm install.

Надеюсь, это поможет.

Projenix
источник
1

Гипер ERR! ошибка конфигурации GYP ERR! Ошибка стека: не удается найти исполняемый файл Python "python", вы можете установить переменную PYT HON ​​env.

Не нужно переустанавливать, это исключение выдается скриптом node-gyp, затем попытайтесь пересобрать. Достаточно переменной среды установки, как в моем случае:

SET PYTHON=C:\work\_env\Python27\python.exe
Ю. Алиаксей
источник
1

Если вы пытаетесь использовать это на Cygwin, то вам нужно следовать инструкциям в этом ответе. (Это проблема, как Cygwin обрабатывает символические ссылки Windows.)

emigenix
источник
1

Пример: pg_config не исполняемый / ошибка node-gyp

Решение: В Windows просто попробуйте добавить PATH Env -> C: \ Program Files \ PostgreSQL \ 12 \ bin

Работайте для меня, теперь я могу использовать npm, например, pg-обещание или другие зависимости.

P0y
источник
Для pg-promiseтебя это не нужно. Вы, вероятно, были захвачены этим . Просто используйте последнюю версию, и у вас все будет в порядке, не нужно никаких дополнительных вещей;)
vitaly-t
0

Для меня проблема заключалась в том, что я использовал последнюю версию узла, а не LTSверсию, которая является стабильной версией и рекомендуется для большинства пользователей.
Использование LTSверсии решило проблему.
Вы можете скачать здесь:

Версия LTS

Текущая последняя версия

Нурул Сундарани
источник