firebase / firebase-admin-node

Firebase Admin Node.js SDK
https://firebase.google.com/docs/admin/setup
Apache License 2.0
1.63k stars 371 forks source link

12.1.0 errors with `Python is not set from command line or npm configuration` #2552

Closed k2xl closed 5 months ago

k2xl commented 6 months ago

[READ] Step 1: Are you in the right place?

[REQUIRED] Step 2: Describe your environment

[REQUIRED] Step 3: Describe the problem

Getting error when building on docker on Mac FROM node:20-alpine AS base https://github.com/sspenst/thinky.gg/pull/1101/files

Works fine on 12.0.0.

Error is below:

21.06 npm ERR! gyp info using node@20.13.1 | linux | arm64
21.06 npm ERR! gyp ERR! find Python 
21.06 npm ERR! gyp ERR! find Python Python is not set from command line or npm configuration
21.06 npm ERR! gyp ERR! find Python Python is not set from environment variable PYTHON
21.06 npm ERR! gyp ERR! find Python checking if "python3" can be used
21.06 npm ERR! gyp ERR! find Python - executable path is ""
21.06 npm ERR! gyp ERR! find Python - "" could not be run
21.06 npm ERR! gyp ERR! find Python checking if "python" can be used
21.06 npm ERR! gyp ERR! find Python - executable path is ""
21.06 npm ERR! gyp ERR! find Python - "" could not be run
21.06 npm ERR! gyp ERR! find Python 
21.06 npm ERR! gyp ERR! find Python **********************************************************
21.06 npm ERR! gyp ERR! find Python You need to install the latest version of Python.
21.06 npm ERR! gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
21.06 npm ERR! gyp ERR! find Python you can try one of the following options:
21.06 npm ERR! gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
21.06 npm ERR! gyp ERR! find Python (accepted by both node-gyp and npm)
21.06 npm ERR! gyp ERR! find Python - Set the environment variable PYTHON
21.06 npm ERR! gyp ERR! find Python - Set the npm configuration variable python:
21.06 npm ERR! gyp ERR! find Python npm config set python "/path/to/pythonexecutable"
21.06 npm ERR! gyp ERR! find Python For more information consult the documentation at:
21.06 npm ERR! gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
21.06 npm ERR! gyp ERR! find Python **********************************************************
21.06 npm ERR! gyp ERR! find Python 
21.06 npm ERR! gyp ERR! configure error 
21.06 npm ERR! gyp ERR! stack Error: Could not find any Python installation to use
21.06 npm ERR! gyp ERR! stack at PythonFinder.fail (/thinky_app/node_modules/node-gyp/lib/find-python.js:306:11)
21.06 npm ERR! gyp ERR! stack at PythonFinder.findPython (/thinky_app/node_modules/node-gyp/lib/find-python.js:164:17)
21.06 npm ERR! gyp ERR! stack at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
21.06 npm ERR! gyp ERR! stack at async configure (/thinky_app/node_modules/node-gyp/lib/configure.js:27:18)
21.06 npm ERR! gyp ERR! stack at async run (/thinky_app/node_modules/node-gyp/bin/node-gyp.js:81:18)
21.06 npm ERR! gyp ERR! System Linux 5.15.49-linuxkit-pr
21.06 npm ERR! gyp ERR! command "/usr/local/bin/node" "/thinky_app/node_modules/.bin/node-gyp" "rebuild"
21.06 npm ERR! gyp ERR! cwd /thinky_app/node_modules/farmhash
21.06 npm ERR! gyp ERR! node -v v20.13.1
21.06 npm ERR! gyp ERR! node-gyp -v v10.1.0
21.06 npm ERR! gyp ERR! not ok
google-oss-bot commented 6 months ago

I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.

ezequiel-imajine commented 6 months ago

Hi, I had a similar error with the same version of firebase admin and also on ARM. I changed my node version to 20.13 and updated my docker file by adding: RUN apk add --no-cache -u \ curl \ g++ \ automake \ autoconf \ nasm \ gcc \ gifsicle \ zlib \ git \ unzip\ make\ python3

lahirumaramba commented 6 months ago

This should also be related to https://github.com/firebase/firebase-admin-node/pull/2534 Which you can fix by upgrading farmhash to v3.3.1. We will also include this change in the upcoming release

sspenst commented 6 months ago

I am seeing the same issue with firebase-admin v12.1.1 + farmhash v3.3.1

mustafababil commented 6 months ago

Experiencing same here :/

sspenst commented 6 months ago

@lahirumaramba FYI, should reopen this issue

lahirumaramba commented 6 months ago

Hey folks, we will look into a better fix for this. In the meantime, are you able to add python to your docker image (or https://github.com/firebase/firebase-admin-node/issues/2552#issuecomment-2104813661) to and see if that resolves the issue?

Also, see: https://github.com/lovell/farmhash/issues/48

lahirumaramba commented 6 months ago

For others facing the same issue, it would help us if you can share more information on your environment and the errors you are seeing.

lhermann commented 6 months ago

Here is the exact error:

/var/server # npm ci
npm error code 1
npm error path /var/server/node_modules/farmhash
npm error command failed
npm error command sh -c prebuild-install || node-gyp rebuild
npm error prebuild-install warn install No prebuilt binaries found (target=3 runtime=napi arch=arm64 libc=musl platform=linux)
npm error gyp info it worked if it ends with ok
npm error gyp info using node-gyp@10.1.0
npm error gyp info using node@18.20.3 | linux | arm64
npm error gyp ERR! find Python
npm error gyp ERR! find Python Python is not set from command line or npm configuration
npm error gyp ERR! find Python Python is not set from environment variable PYTHON
npm error gyp ERR! find Python checking if "python3" can be used
npm error gyp ERR! find Python - executable path is ""
npm error gyp ERR! find Python - "" could not be run
npm error gyp ERR! find Python checking if "python" can be used
npm error gyp ERR! find Python - executable path is ""
npm error gyp ERR! find Python - "" could not be run
npm error gyp ERR! find Python
npm error gyp ERR! find Python **********************************************************
npm error gyp ERR! find Python You need to install the latest version of Python.
npm error gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
npm error gyp ERR! find Python you can try one of the following options:
npm error gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
npm error gyp ERR! find Python (accepted by both node-gyp and npm)
npm error gyp ERR! find Python - Set the environment variable PYTHON
npm error gyp ERR! find Python - Set the npm configuration variable python:
npm error gyp ERR! find Python npm config set python "/path/to/pythonexecutable"
npm error gyp ERR! find Python For more information consult the documentation at:
npm error gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
npm error gyp ERR! find Python **********************************************************
npm error gyp ERR! find Python
npm error gyp ERR! configure error
npm error gyp ERR! stack Error: Could not find any Python installation to use
npm error gyp ERR! stack at PythonFinder.fail (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:306:11)
npm error gyp ERR! stack at PythonFinder.findPython (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:164:17)
npm error gyp ERR! stack at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
npm error gyp ERR! stack at async configure (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:27:18)
npm error gyp ERR! stack at async run (/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js:81:18)
npm error gyp ERR! System Linux 6.1.0-13-arm64
npm error gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
npm error gyp ERR! cwd /var/server/node_modules/farmhash
npm error gyp ERR! node -v v18.20.3
npm error gyp ERR! node-gyp -v v10.1.0
npm error gyp ERR! not ok

Running inside a node:18-alpine docker container on the following environment: Linux 267451d27941 6.1.0-13-arm64 #1 SMP Debian 6.1.55-1 (2023-09-29) aarch64 Linux

Edit: Tried to update the server to 6.1.0-21-arm64, but without success. The error prevails.

Edit 2: Tried node:18 (no alpine) and could successfully run npm install, no building from sources or python error ✅.

lahirumaramba commented 6 months ago

Thanks @lhermann for the detailed response! Would adding python build tools to your docker help? See: https://stackoverflow.com/a/59471030/1526201

How many of y'all facing this issue use the remote config API? I am wondering if we should make farmhash an optional dependency, so you would have to deal with this only if you are using the remote config API (which depends on farmhash).

sspenst commented 6 months ago

Getting a similar error using the dockerfile here: https://github.com/sspenst/thinky.gg/blob/main/Dockerfile.dev

19.32 npm error code 1
19.32 npm error path /thinky_app/node_modules/farmhash
19.32 npm error command failed
19.32 npm error command sh -c prebuild-install || node-gyp rebuild
19.32 npm error prebuild-install warn install No prebuilt binaries found (target=3 runtime=napi arch=arm64 libc=musl platform=linux)
19.32 npm error gyp info it worked if it ends with ok
19.32 npm error gyp info using node-gyp@10.1.0
19.32 npm error gyp info using node@22.2.0 | linux | arm64
19.32 npm error gyp ERR! find Python 
19.32 npm error gyp ERR! find Python Python is not set from command line or npm configuration
19.32 npm error gyp ERR! find Python Python is not set from environment variable PYTHON
19.32 npm error gyp ERR! find Python checking if "python3" can be used
19.32 npm error gyp ERR! find Python - executable path is ""
19.32 npm error gyp ERR! find Python - "" could not be run
19.32 npm error gyp ERR! find Python checking if "python" can be used
19.32 npm error gyp ERR! find Python - executable path is ""
19.32 npm error gyp ERR! find Python - "" could not be run
19.32 npm error gyp ERR! find Python 
19.32 npm error gyp ERR! find Python **********************************************************
19.32 npm error gyp ERR! find Python You need to install the latest version of Python.
19.32 npm error gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
19.32 npm error gyp ERR! find Python you can try one of the following options:
19.32 npm error gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
19.32 npm error gyp ERR! find Python (accepted by both node-gyp and npm)
19.32 npm error gyp ERR! find Python - Set the environment variable PYTHON
19.32 npm error gyp ERR! find Python - Set the npm configuration variable python:
19.32 npm error gyp ERR! find Python npm config set python "/path/to/pythonexecutable"
19.32 npm error gyp ERR! find Python For more information consult the documentation at:
19.32 npm error gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
19.32 npm error gyp ERR! find Python **********************************************************
19.32 npm error gyp ERR! find Python 
19.32 npm error gyp ERR! configure error 
19.32 npm error gyp ERR! stack Error: Could not find any Python installation to use
19.32 npm error gyp ERR! stack at PythonFinder.fail (/thinky_app/node_modules/node-gyp/lib/find-python.js:306:11)
19.32 npm error gyp ERR! stack at PythonFinder.findPython (/thinky_app/node_modules/node-gyp/lib/find-python.js:164:17)
19.32 npm error gyp ERR! stack at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
19.32 npm error gyp ERR! stack at async configure (/thinky_app/node_modules/node-gyp/lib/configure.js:27:18)
19.32 npm error gyp ERR! stack at async run (/thinky_app/node_modules/node-gyp/bin/node-gyp.js:81:18)
19.32 npm error gyp ERR! System Linux 6.6.26-linuxkit
19.32 npm error gyp ERR! command "/usr/local/bin/node" "/thinky_app/node_modules/.bin/node-gyp" "rebuild"
19.32 npm error gyp ERR! cwd /thinky_app/node_modules/farmhash
19.32 npm error gyp ERR! node -v v22.2.0
19.32 npm error gyp ERR! node-gyp -v v10.1.0
19.32 npm error gyp ERR! not ok

Optional dependency could be a possible solution, we are currently only using the messaging API.

KwamsC commented 5 months ago

Indeed same issue for me on 12.1.1

Xhale1 commented 5 months ago

@lahirumaramba my team isn't using the remote config api so that solution seems appealing (at least in our case).

This issue also occurs when using the node:20-bookworm-slim docker image as a base.

Thank you for looking into all of this, I appreciate it :)

carusooo commented 5 months ago

This issue will sometimes resolve if the platform of the container is set to --platform=linux/amd64 although it can depend on your docker invocation (ex: works on a local mac build, fails on a github container build)

Setting the platform to amd64 allows for the prebuilt binary of farmhash to be fetched

razvanilin commented 5 months ago

If making farmhash optional, I'd be all for that as my project does not use the remote config API. Alternatively, I can confirm that if I install python before installing the dependencies, it works as intended. It does increase my docker image quite a bit so for now I just downgraded firebase-admin to 12.0.0

Thanks for looking into this!

lahirumaramba commented 5 months ago

Thanks for the additional context folks! We are also looking into switching to an alternative dependency https://www.npmjs.com/package/farmhash-modern that does not require python. Let me run some tests with that as that seem to be a better option...

hdr-js commented 5 months ago

Do we have an update on this?

I am seeing lots of merges on this, but still facing the issue. I have tried almost everything, installing python, adding PATH, node-gyp build with python. but nothing seems to work.

The critical problem on my end is that my setup is using firebase-admin@9.6.0 for sending multi-cast messages for push notifications. Now upgrading it to 12 directly is a problem. Can anyone tell of a safe version, where I can shift without much hassle.

Any help would be appreciated.

chandrasekhar2039 commented 5 months ago

If you are experiencing issues installing firebase-admin, you can try downgrading to firebase-admin@12.0.0.

Environment:

OS: Windows, macOS (Linux might work too) Node version: 18+

Reason: The issue is related to the farmhash dependency, which requires Python and node-gyp.

lahirumaramba commented 5 months ago

Hey folks, we replaced farmhash with farmhash-modern in v12.2.0. Please test with the latest firebase-admin v12.2.0 and let us know if you run into any issues. Thanks!

SnowMarble commented 5 months ago

works well on docker build with bun:1.1.13-alpine

hassanzadeh commented 2 months ago

Hi @lahirumaramba , Can you elaborate what you did exactly? the farmhash is used under the hood right by firebase-admin, how did you replace it? THanks