RobertCraigie / RobertCraigie/pyright-python

PYRIGHT_PYTHON_NODE_VERSION forces NodeJS installation on every "python -m pyright" execution

Open
#319 1 comment 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
277
Forks
31
Avg merge
4h 22m
Merged PRs (30d)
3

Description

https://github.com/RobertCraigie/pyright-python/blame/795fdcb2cf22164ac105f74fd1f25b5cf6276753/src/pyright/node.py#L50-L50C9

    if path.exists() and not NODE_VERSION:
        log.debug('Binary at %s exists, skipping nodeenv installation', path)
    else:
        log.debug('Installing nodeenv as a binary at %s could not be found', path)
        _install_node_env()

STEPS TO REPRODUCE
Create a docker image by the followin Dockerfile

FROM python:latest

RUN python -m pip install pyright

RUN mkdir /src
ENV PYRIGHT_PYTHON_NODE_VERSION=23.1.0
ENV PYRIGHT_PYTHON_DEBUG=true

RUN python -m pyright --outputjson /src

RUN file /root/.cache/pyright-python/nodeenv/bin/node && \
    ls -la /root/.cache/pyright-python/nodeenv/bin/node && \
    python -m pyright --outputjson /src

ACTUAL RESULT
NodeJS 23.1.0 will be installed two times on every python -m pyright execution

EXPECTED RESULT
NodeJS 23.1.0 will be installed only one time on the first python -m pyright execution

ADDITIONAL INFORMATION

docker build --progress=plain -t pyright:latest .
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 367B done
#1 DONE 0.0s

#2 [internal] load metadata for docker.io/library/python:latest
#2 DONE 0.0s

#3 [internal] load .dockerignore
#3 transferring context: 2B done
#3 DONE 0.0s

#4 [1/5] FROM docker.io/library/python:latest
#4 DONE 0.0s

#5 [2/5] RUN python -m pip install pyright
#5 CACHED

#6 [3/5] RUN mkdir /src
#6 CACHED

#7 [4/5] RUN python -m pyright --outputjson /src
#7 CACHED

#8 [5/5] RUN file /root/.cache/pyright-python/nodeenv/bin/node &&     ls -la /root/.cache/pyright-python/nodeenv/bin/node &&     python -m pyright /src
#8 0.197 /root/.cache/pyright-python/nodeenv/bin/node: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=8faab1ff1a91864f812561dc1f333fa2fd2d7630, for GNU/Linux 3.2.0, with debug_info, not stripped, too many notes (256)
#8 0.198 -rwxr-xr-x 1 root root 121761992 Oct 24 12:22 /root/.cache/pyright-python/nodeenv/bin/node
#8 1.229 2024-11-02 09:42:23,449 - DEBUG - pyright.utils - Latest pyright-python version is: 1.1.387
#8 1.230 2024-11-02 09:42:23,450 - DEBUG - pyright.node - Checking for global target binary: node
#8 1.230 2024-11-02 09:42:23,450 - DEBUG - pyright.node - Global target binary: node not found
#8 1.230 2024-11-02 09:42:23,450 - DEBUG - pyright.node - Installing binaries using nodeenv
#8 1.230 2024-11-02 09:42:23,450 - DEBUG - pyright.node - Checking for nodeenv node binary
#8 1.230 2024-11-02 09:42:23,450 - DEBUG - pyright.node - Using /root/.cache/pyright-python/nodeenv/bin/node path for binary
#8 1.230 2024-11-02 09:42:23,450 - DEBUG - pyright.node - Installing nodeenv as a binary at /root/.cache/pyright-python/nodeenv/bin/node could not be found
#8 1.230 2024-11-02 09:42:23,450 - DEBUG - pyright.node - Installing nodeenv to /root/.cache/pyright-python/nodeenv
#8 1.230 2024-11-02 09:42:23,450 - DEBUG - pyright.node - Using user specified node version: 23.1.0
#8 1.230 2024-11-02 09:42:23,450 - DEBUG - pyright.node - Running command with args: ['/usr/local/bin/python', '-m', 'nodeenv', '--node', '23.1.0', '--force', '/root/.cache/pyright-python/nodeenv']
#8 1.273  * Environment already exists: /root/.cache/pyright-python/nodeenv
#8 1.273  * Install prebuilt node (23.1.0) ../usr/local/lib/python3.13/site-packages/nodeenv.py:639: DeprecationWarning: Python 3.14 will, by default, filter extracted tar archives and reject files or modify their metadata. Use the filter argument to control this behavior.
#8 43.16   archive.extractall(src_dir, extract_list)
#8 44.13 ... done.
#8 44.63 2024-11-02 09:43:06,848 - DEBUG - pyright.node - Attempting to prepend /root/.cache/pyright-python/nodeenv/bin to the PATH
#8 44.63 2024-11-02 09:43:06,848 - DEBUG - pyright.node - Found PATH contents: /usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#8 44.63 2024-11-02 09:43:06,848 - DEBUG - pyright.node - Using PATH environment variable: /root/.cache/pyright-python/nodeenv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#8 44.63 2024-11-02 09:43:06,848 - DEBUG - pyright.node - Running nodeenv command with args: ['/root/.cache/pyright-python/nodeenv/bin/node', '/root/.cache/pyright-python/1.1.387/node_modules/pyright/index.js', '/src']
#8 44.80 0 errors, 0 warnings, 0 informations 
#8 DONE 45.1s

#9 exporting to image
#9 exporting layers
#9 exporting layers 0.9s done
#9 writing image sha256:26338d9799f57ce5c697ff052d9ab36794187653eafa6d7fb4b78d3a4c9552e3 done
#9 naming to docker.io/library/pyright:latest 0.0s done
#9 DONE 0.9s

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with src/pyright/node.py at the conditional around line 50 and reproduce the behavior using the Dockerfile in the issue. Verify the cached nodeenv binary check when PYRIGHT_PYTHON_NODE_VERSION is set; done means NodeJS is installed only during the first python -m pyright execution.

Written by the indexing model from the issue text.

Assessment

Tech stack
node.js, python
Domain
cli
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.