VSCode中的Python/Jupyter笔记本未使用正确的环境 形势

VSCode中的Python/Jupyter笔记本未使用正确的环境 形势,python,visual-studio-code,anaconda,windows-10,ipython,Python,Visual Studio Code,Anaconda,Windows 10,Ipython,我在Windows10上使用Anaconda3 我有一个Visual Studio代码工作区(my_workspace),其中包含一个Jupyter笔记本(my_notebook.ipynb)。VSCode安装了Python扩展 文件my_workspace/settings.json包含: { "python.pythonPath": "C:\\Users\\Me\\Anaconda3\\envs\\my_env\\python.exe" } my_env是一个现有的蟒蛇环境。我可以

我在Windows10上使用Anaconda3

我有一个Visual Studio代码工作区(my_workspace),其中包含一个Jupyter笔记本(my_notebook.ipynb)。VSCode安装了Python扩展

文件
my_workspace/settings.json
包含:

{
    "python.pythonPath": "C:\\Users\\Me\\Anaconda3\\envs\\my_env\\python.exe"
}
my_env
是一个现有的蟒蛇环境。我可以激活它并在shell中使用它,如果我在这样的shell中运行
jupyter lab
,笔记本中的代码可以按预期导入
my_env
的软件包

如果我在VSCode中打开
my_workspace
,然后在选项卡中打开
my_notebook.ipynb
,VSCode的状态栏中也会提到
my_env
(“Python 3.7.6 64位('my_env':conda)”,并且当我在VSCode的控制台中打开PowerShell提示符时,
my env
会自动激活(我运行了一次
conda init

问题 当在VSCode中打开笔记本时,Jupyter内核似乎使用
base
环境的Python解释器,而不是
my_env
中的解释器。导入安装在
my_env
中但不在
base
中的程序包时,出现以下错误:

>>> import keras
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'keras'
>>导入keras
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ModuleNotFoundError:没有名为“keras”的模块
这适用于所有包,而不仅仅是
keras

在VSCode的笔记本选项卡中,如果我单击右上角的解释器名称,然后选择正确的解释器(在
my_env
中的解释器),则笔记本在
my_env
中正确运行。但每次我重新打开VSCode时都必须这样做


如何使默认内核尊重在
settings.json
中选择的环境?

我认为现在在
settings.json
中没有参数来控制它。我在启动笔记本电脑的环境中遇到了类似的问题,通过修改IPython笔记本电脑中的
kernelspec
部分,我能够解决这个问题


基本上,将笔记本作为JSON文件打开,然后删除
kernelspec
部分。从vscode启动笔记本时,该部分将填充工作区的默认python环境内核。在我的例子中,充满了pipenv环境。

在我的例子中,在创建新环境之后,VS代码必须重新启动几次,然后它找到了新的环境。看起来VS代码需要花费一些时间才能在系统中找到新的Env。

我们(我正在开发扩展)尝试使用笔记本中的kernelspec(如果有)。因此,如果kernelspec引用了一个有效的内核,我们将使用它来启动IPython内核。不幸的是,@pablosjv注意到,这并没有使用您选择的python环境。它实际上只是运行kernel.json中指定的python,就像是从一个空的命令外壳启动它一样。但是,如果您从笔记本中删除kernelspec,我们将生成一个新的kernelspec,该kernelspec与您在VS代码中选择的环境相匹配。这就是pablosjv修复程序工作的原因。非常感谢@pablosjv!奇怪的是,这也适用于c#笔记本电脑!一个“语言不可知”的解决方案肯定应该有一个特殊的标志。@RChiodo-VSCode-Jupyter和Python是很棒的扩展,但我认为可以通过显式地让用户知道它正在使用哪个内核解释器来改进这种行为。我不得不花了一段时间来研究为什么
import torch
不能在VSCode的Jupyter上工作,而它在原生Jupyter env上工作得很好。