Запуск 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

Або, якщо ви хочете зробити його постійним, зробіть еквівалент на панелі керування.


1
Гаразд, тому я отримую це: Microsoft Windows [Версія 6.1.7601] Авторські права (c) 2009 Microsoft Corporation. Всі права захищені. C: \ Користувачі \ Matt Cashatt> встановити PYTHON =% PYTHON%; D: \ Python C: \ Users \ Matt Cashatt>% PYTHON% '% PYTHON%' не розпізнається як внутрішня чи зовнішня команда, функціонуюча програма чи пакетний файл . C: \ Користувачі \ Matt Cashatt>
Метт Кашатт

1
Крім того, Dпривід там, де у мене є Python, якщо вам цікаво. Ще раз дякую за вашу допомогу.
Метт Кашатт

Працювало як шарм, дякую! Для інших: мені setчомусь довелося запустити команду у вікні команди NPM, а потім виконати mpm install jqueryкоманду відразу після цього. Якщо я робив їх окремо, це чомусь не вийшло.
Метт Кашатт

@MatthewPatrickCashatt: Як я пояснив, setкоманда впливає лише на поточне cmdвікно, тому ви повинні зробити це перед запуском npmу тому ж вікні. Якщо ви хочете встановити змінні середовища довше, це знаходиться на панелі керування системою або еквівалент для вашої версії Windows.
abarnert

3
@abarnert - це фактична відповідь на це запитання, тоді встановіть PYTHON = D: \ Python \ bin \ Python.exe - було б корисно, якщо ви дали правильний шлях, а також пояснили неправильний шлях
достигайте4thelasers

449

Якщо у вас не встановлений python разом із усіма залежностями від node-gyp, просто відкрийте 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>


1
У мене були деякі помилки дозволів, але мені вдалося вручну встановити python з: C: \ Users [me] \. Windows-build-tools \ python.msi. В інсталяції є варіант додати його до шляху. (Перезапуск cmd / PS), і це спрацювало
d.raev

Мені здається, що ключ dh помилки занадто малий: openssk \ ssl \ s3_clnt, c: 3641
user1428716

14
Для встановлення інструментів Windows-build потрібен запуск PowerShell як адміністратора в Windows 10. Це означає, що команда setx стаєsetx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae

Мені довелося запускати ці команди в підвищеному командному рядку, але, схоже, це спрацювало. Вручну встановити Python 3.x та встановити змінну середовища PYTHON, щоб вказати на це не вийшло. Я припускаю, що моя помилка пов'язана з різницею у версії python? Спасибі незалежно!
JeffryHouser

16

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

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


10

Один та / або кілька з них повинні допомогти:

  1. Додайте C:\Python27\до своєї PATHзмінної (враховуючи, що у вас в цьому каталозі встановлений Python)
    Як встановити PATHзмінну env: http://www.computerhope.com/isissue/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.xnode-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


8

У мене було те саме питання, і жодна з цих відповідей не допомогла. У моєму випадку змінна PYTHON була встановлена ​​правильно. Однак python був встановлений занадто глибоко, тобто має занадто довгий шлях. Отже, я зробив наступне:

  1. перевстановлений python в c: \ python
  2. встановити змінну середовища PYTHON на C: \ python \ python.exe

І це все!



6

Є рішення для вирішення цієї проблеми: 1) запустіть командний рядок як "адміністратор".

якщо перше рішення не вирішує вашу проблему, спробуйте це:

2) відкрити командний рядок як адміністратор вставити наступний рядок коду та натиснути Enter:

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

5

TL; DR Зробіть копію або псевдонім вашого python.exe з ім'ям python2.7.exe

Мій python 2.7 був встановлений як

D: \ app \ Python27 \ python.exe

Я завжди отримував цю помилку незалежно від того, як я встановив (і підтвердив) змінну PYTHON env:

gyp ERR! Помилка стека: Неможливо знайти виконуваний Python "python2.7", ви можете встановити змінну PYTHON env.
gyp ERR! стек у failNoPython (C: \ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 103: 14)

Причиною цього було те, що в node-gyp's configure.js виконуваний файл python був вирішений так:

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

І виявилося, що gyp.opts.python має значення "python2.7", таким чином, перекриваючи процес.env.PYTHON.

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

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

Для цієї операції вам потрібні права адміністратора.


5

Наступне працювало для мене з командного рядка як адміністратор:

Встановлення windows-build-інструментів (це може зайняти 15-20 хвилин):

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

Додавання / оновлення змінної середовища:

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

Встановлення node-gyp:

npm install --global node-gyp

Зміна імені файлу exe з 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. Про це йдеться тут про встановлення node-gyp на windows . Пам'ятайте, що node-gyp бере участь у процесі встановлення node-sass. І вам не доведеться перевстановлювати іншу версію python.

Це рятівник, налаштуйте шлях python, який "npm" повинен шукати під час встановлення будь-яких пакетів, які потребують збирання-інструментів.

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

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


Те саме рішення працювало для мене під час встановлення 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після завершення першого кроку (особливо завершення встановлення python 2.7, що було основною причиною проблеми)


1

Ось правильна команда: встановити шлях =% шлях%; C: \ Python34 [Замініть правильним шляхом вашої установки python]

У мене була така ж проблема, і я просто вирішив подібне.

Як зазначали деякі інші люди, це конфігурація летюча, вона працює лише для поточного сеансу cmd, і (очевидно) вам доведеться встановити свій шлях до запуску npm установки.

Я сподіваюся, що це допомагає.


1

gyp ERR! налаштування помилки gyp ERR! Помилка стека: Неможливо знайти виконуваний Python "python", ви можете встановити змінну PYT HON ​​env.

Не потрібно перевстановлювати, цей виняток кидайте за допомогою сценарію node-gyp, а потім спробуйте відновити. Досить змінної середовища налаштування, як у моєму випадку:

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

1

Якщо ви намагаєтесь використовувати це на Cygwin, то вам потрібно слідувати інструкціям у цьому відповіді. (Це проблема в тому, як Cygwin поводиться з посиланнями на Windows.)


1

Приклад: pg_config не виконується / помилка node-gyp

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

Робота для мене, тепер я можу використовувати npm я pg-обіцянку, наприклад, або інші залежності.


Бо pg-promiseвам цього не потрібно. Ви , ймовірно , були захоплені цим . Просто скористайтеся останньою версією, і вам буде добре, не потрібно нічого із цього зайвого;)
vitaly-t

0

Для мене проблема полягала в тому, що я використовував останню версію вузла, а не свою LTS версію, яка є стабільною версією і рекомендується для більшості користувачів.
Використання LTSВерсії вирішило проблему.
Ви можете завантажити тут:

Версія LTS

Поточна остання версія

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.