Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PATH not updated correctly from conda activate in VSCode's terminal

I am using VSCodes terminal pane. I activate a conda environment. For some reason, the python command is still set to /usr/bin/python, instead of the correct path to the conda environment.

% conda activate myenv
% which python
/usr/bin/python

The correct anaconda environment directory does seem to be in the $PATH variable, but /usr/bin seems above it in priority.

When I open a standard terminal through the OS, the behavior is as I expect.

% conda activate myenv
% which python
/Users/cpl/anaconda3/envs/myenv/bin/python

Please note: I have already set the VSCode preferences key python.pythonPath to /Users/cpl/anaconda3/envs/myenv/bin/python, and I think that it works correctly. When I run a file through right-clicking and selecting Run Python File In Terminal, the correct python (from the conda environment) is executed. My problem is using the VSCode terminal directly to execute python.

My shell is zsh, and I am using OSX. Any advice?

like image 740
Caleb Avatar asked Aug 10 '18 18:08

Caleb


People also ask

How do you activate conda Environment Terminal?

To activate your Conda environment, type source activate <yourenvironmentname> . Note that conda activate will not work on Discovery with this version. To install a specific package, type conda install -n <yourenvironmentname> [package] . To deactivate the current, active Conda environment, type conda deactivate .

How do you add conda path to Vscode?

You can manually specify the path to the conda executable to use for activation (version 4.4+). To do so, open the Command Palette (Ctrl+Shift+P) and enter Preferences: Open User Settings. Then set python.condaPath , which is in the Python extension section of User Settings, with the appropriate path.


3 Answers

This behavior is explained in the VSCode docs: Why are there duplicate paths in the terminal's $PATH environment variable and/or why are they reversed?#

It sounds like VSCode will run your .zshrc twice in MacOS, conflicting with the conda-generated PATH variable definitions.

There are two solutions listed in the link above. The one that works for me is to set the VSCode setting "terminal.integrated.inheritEnv": false. The documentation warns that all of your environmental variables will be stripped if you do this. However, I find I still have my custom variables defined in the .zshrc file.

It is worth noting that recent versions of VSCode will prompt you when it detects you are using a conda environment, and suggests making this change.

like image 139
Caleb Avatar answered Oct 16 '22 15:10

Caleb


I don't use zsh, but I've run into this issue in bash and I believe the cause is the same.

Conda has recently changed the "official" method of activating environments, as described in this issue: https://github.com/Microsoft/vscode-python/issues/1882

Before, you needed to modify your .bashrc/.zshrc to prepend PATH with the directory of conda's activate script, and then activate specific environments by typing source activate name_of_env. VSCode-Python activates conda terminals by sending this command to the shell — with visible echo, like you typed it yourself.

The new method is to source $HOME/anaconda3/etc/profile.d/conda.sh in .bashrc and then activate environments with conda activate name_of_env, which is the behavior you're seeing work correctly in a dedicated terminal. VSCode-Python does not yet support this, and there appear to be issues with cross-platform support on Windows that are complicating the transition.

The best solution for now is to ignore the "correct" method of conda activate and consistently use the older source activate name_of_env, which still works (if your PATH is set to include $HOME/anaconda3/bin).

like image 27
goodside Avatar answered Oct 16 '22 14:10

goodside


A dark magic below may work:-

In my Big Sur, I added the following empty entry to my settings.json -- can be found at File(Windows)/Code(Mac)>Preferences>Settings -- click on any link stated "Edit in settings.json"

"terminal.integrated.env.osx": {
        "PATH": ""
}

All the best!

like image 1
hongkail Avatar answered Oct 16 '22 15:10

hongkail