Python/Jupyter notebook in VSCode does not use the right environment
Question:
The situation
I use Anaconda 3 on Windows 10.
I have a Visual Studio Code workspace (my_workspace
) than contains a Jupyter notebook (my_notebook.ipynb
). VSCode has the Python extension installed.
The file my_workspace/settings.json
contains:
{
"python.pythonPath": "C:\Users\Me\Anaconda3\envs\my_env\python.exe"
}
my_env
is an existing Anaconda environment. I can activate it and work with it in a shell, and if I run jupyter lab
in such a shell, the code inside the notebooks can import my_env
‘s packages as expected.
If I open my_workspace
in VSCode, then my_notebook.ipynb
in a tab, my_env
is also mentioned in VSCode’s status bar (“Python 3.7.6 64-bit (‘my_env’: conda)”), and my_env
is automatically activated when I open a PowerShell prompt in VSCode’s console (I ran conda init
once).
The problem
When the notebook is opened in VSCode, the Jupyter kernel seems to use the base
environment’s Python interpreter instead of the one in my_env
. When importing a package installed in my_env
, but not in base
, I get this error:
>>> import keras
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'keras'
This happens for all packages, not just keras
.
In the notebook tab in VSCode, if I click on the interpreter’s name in the top-right corner, then choose the correct interpreter (the one in my_env
), then the notebook runs correctly in my_env
. But I have to do this every time I re-open VSCode.
How to make the default kernel respect the environment chosen in settings.json
?
Answers:
I think there is no parameter right now to control that in the settings.json
. I had similar problems with the environments in which the notebook is launched and I was able to fix this modifying the kernelspec
section in the IPython notebook.
Basically, open the notebook as a JSON file and remove the kernelspec
section. When the notebook is launched from vscode, that part will be filled with the default python environment kernel for the workspace. In my case, is filled with the pipenv environment.
In my case, after creating the new Environment the VS Code had to be relaunched several times and then it found the new env. It looked as if VS Code had to take some time to find the new Env in the system.
maybe this helps, but maybe not. I ran into this issue during a ssh session on a remote machine. I had to use the VS code command > Python: Select Interpreter
form here I needed to add the location to the environment I wished to work form.
so long as jupyter is installed in the path there should be no issues (:
The situation
I use Anaconda 3 on Windows 10.
I have a Visual Studio Code workspace (my_workspace
) than contains a Jupyter notebook (my_notebook.ipynb
). VSCode has the Python extension installed.
The file my_workspace/settings.json
contains:
{
"python.pythonPath": "C:\Users\Me\Anaconda3\envs\my_env\python.exe"
}
my_env
is an existing Anaconda environment. I can activate it and work with it in a shell, and if I run jupyter lab
in such a shell, the code inside the notebooks can import my_env
‘s packages as expected.
If I open my_workspace
in VSCode, then my_notebook.ipynb
in a tab, my_env
is also mentioned in VSCode’s status bar (“Python 3.7.6 64-bit (‘my_env’: conda)”), and my_env
is automatically activated when I open a PowerShell prompt in VSCode’s console (I ran conda init
once).
The problem
When the notebook is opened in VSCode, the Jupyter kernel seems to use the base
environment’s Python interpreter instead of the one in my_env
. When importing a package installed in my_env
, but not in base
, I get this error:
>>> import keras
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'keras'
This happens for all packages, not just keras
.
In the notebook tab in VSCode, if I click on the interpreter’s name in the top-right corner, then choose the correct interpreter (the one in my_env
), then the notebook runs correctly in my_env
. But I have to do this every time I re-open VSCode.
How to make the default kernel respect the environment chosen in settings.json
?
I think there is no parameter right now to control that in the settings.json
. I had similar problems with the environments in which the notebook is launched and I was able to fix this modifying the kernelspec
section in the IPython notebook.
Basically, open the notebook as a JSON file and remove the kernelspec
section. When the notebook is launched from vscode, that part will be filled with the default python environment kernel for the workspace. In my case, is filled with the pipenv environment.
In my case, after creating the new Environment the VS Code had to be relaunched several times and then it found the new env. It looked as if VS Code had to take some time to find the new Env in the system.
maybe this helps, but maybe not. I ran into this issue during a ssh session on a remote machine. I had to use the VS code command > Python: Select Interpreter
form here I needed to add the location to the environment I wished to work form.
so long as jupyter is installed in the path there should be no issues (: