VSCode finding different python by default than the first one on the path

Viewed 217

I'm using vscode on macOS and using nix to manage my environment. I do have python3.9 installed via homebrew as my system-default python, but I'm working on a project using a nix environment that is setting my path such that the only python executable available is python 3.8.

$ which python
/nix/store/mr2p1ycgj3wfppbw8ry2wwxg9r0xjz0z-python3-3.8.8-env/bin/python

$ whence python
/nix/store/mr2p1ycgj3wfppbw8ry2wwxg9r0xjz0z-python3-3.8.8-env/bin/python

$ whence python3
/nix/store/mr2p1ycgj3wfppbw8ry2wwxg9r0xjz0z-python3-3.8.8-env/bin/python

$ code .

The VSCode instance that comes up finds my 3.9 install as the default interpreter...

VSCode python version: Python 3.9.2 64-bit

This causes a problem because the interpreter that's put on the path by nix is also the one with all my packages installed for this particular project, including developer utilities like black, flake8, pylint, etc... and my default 3.9 install does not necessarily have those.

It seems like there's a mechanism by which the Python extension discovers various python installs (I see in the extension output things where it tries to source virtualenvs and query pyenv), so what I think is happening is that it's finding a bunch of different python interpreters and blindly defaulting to the newest.

Is there any way to override the way the Python extension discovers python installs? I just want it to use the python interpreter that it finds on the path by default. I know I can override the interpreter per-project via the .vscode/settings.json, but that's a bit tedious to do for every project, and the way nix works that path may change occasionally. I already have "python.pythonPath": "python" in my vscode settings (which is the default anyway) - I was hoping that would work... it does not.

1 Answers

When we use "code." to open VS Code from the system terminal outside VS Code, it uses the latest version (highest version) of python installed in the system by default.

For directly opening an existing folder (containing python files) from VS Code, it defaults to using the python environment used last time, and for a new project that has not been selected, it also defaults to using the latest version (highest version) of python installed in the system .

You could click on the python environment in the lower left corner of VS Code, and then switch to the desired python environment in the options. In addition, it is recommended that you open the previously used project from VS Code (click File, Open Folder) and use the virtual environment in VS Code.

Related