ModuleNotFoundError:未命名模块... Jupyter笔记本

时间:2019-08-09 02:44:44

标签: python visual-studio-code jupyter-notebook

dev 是我的根目录。我有以下文件。

dev\sitehealthcheck\test.py
dev\sitehealthcheck\draw.py

test.py 中,第一行显示为:

from sitehealthcheck.draw import *

如果我在VSCode终端中运行 test.py ,那么一切都会按预期进行。但是,当我尝试在交互式窗口中执行 test.py 时,Jupyter返回:

ModuleNotFoundError:没有名为“ sitehealthcheck”的模块

我该怎么做,VSCode会自动在与我正在执行的文件相同的目录中搜索模块?

我希望只键入以下行..,并让VSCode编辑器/ Intellisense和Jupyter在与我正在执行的文件相同的目录中自动搜索模块。

from draw import *

4 个答案:

答案 0 :(得分:2)

为了支持现有答案,在子文件夹中使用笔记本和同级文件夹中的模块时,您需要将 jupyter.notebookFileRoot 行添加到工作区中的 settings.json 文件中:

.vscode/settings.json

{
    "python.pythonPath": "env/bin/python",
    "jupyter.notebookFileRoot": "${workspaceFolder}"
}

答案 1 :(得分:1)

对于交互式窗口,当前工作目录未设置为正在执行的文件的路径,而是设置为已在VSCode中打开的工作空间文件夹的路径。如果我有以下内容:

WorkspaceFolder:
    SubFolder:
      MyScript.py
      ImportMe.py

如果您在终端中运行MyScript.py,则需要这样做:

from importme import * since the file location is added to the path

但是,如果您正在使用交互式窗口,则可以按照上面的建议将其添加到PythonPath中。或者您可以使用此:

from SubFolder.importme import *

由于CWD设置为Interactive Window会话的工作区根。

答案 2 :(得分:0)

如果将.../dev/sitehealthcheck添加到PYTHONPATH,则可以import draw

答案 3 :(得分:0)

要解决此问题,您可以在Python扩展名中搜索一个设置,该设置称为“ Python›数据科学:笔记本文件根”。此设置标题下的一行显示:“设置用于为Python Interactive窗口加载文件的根目录。”。然后,将$ {workspaceFolder}更改为$ {fileDirname},关闭交互式Python终端并重新启动,它应该可以工作。