VSCode 中的 Python/Jupyter notebook 没有使用正确的环境

Elz*_*lzo 17 python ipython anaconda windows-10 visual-studio-code

情况

我在 Windows 10 上使用 Anaconda 3。

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

该文件my_workspace/settings.json包含:

{
    "python.pythonPath": "C:\\Users\\Me\\Anaconda3\\envs\\my_env\\python.exe"
}
Run Code Online (Sandbox Code Playgroud)

my_env是现有的 Anaconda 环境。我可以激活它并在 shell 中使用它,如果我jupyter lab在这样的 shell 中运行,笔记本中的代码可以my_env按预期导入的包。

如果我my_workspace在 VSCode 中打开,那么my_notebook.ipynb在选项卡my_env中,VSCode 的状态栏中也会提到(“Python 3.7.6 64-bit ('my_env': conda)”),并且my_env在我在 VSCode 的控制台中打开 PowerShell 提示符时自动激活(我跑过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'
Run Code Online (Sandbox Code Playgroud)

这适用于所有软件包,而不仅仅是keras.

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

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

pab*_*sjv 17

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

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

  • 我们(我负责扩展)尝试使用笔记本中的内核规范(如果有)。因此,如果内核规范引用了有效的内核,我们将使用它来启动 IPython 内核。不幸的是,正如 @pablosjv 注意到的,这不使用您选择的 python 环境。它实际上只是运行 kernel.json 中指定的 python,就像从空命令 shell 启动它一样。但是,如果您从笔记本中删除内核规范,我们将生成一个与您在 VS Code 中选择的环境相匹配的新内核规范。这就是 pablosjv 修复有效的原因。 (7认同)
  • @RChiodo VSCode Jupyter 和 Python 是很棒的扩展,但我认为可以通过明确让用户知道它正在使用哪个内核解释器来改进这种行为。我不得不深入研究一段时间,以找出为什么“import torch”在 VSCode 的 Jupyter 上不起作用,而它在本机 Jupyter 环境中运行得很好。 (2认同)