模块未找到错误:没有名为...的模块。Jupyter Notebooks。

10

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

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

test.py 文件中,第一行的内容是:
from sitehealthcheck.draw import *

如果我在VSCode终端中运行test.py,一切都按预期工作。 但是当我尝试在交互窗口中执行test.py时,Jupyter会返回:ModuleNotFoundError: No module named 'sitehealthcheck'。
我该怎么做才能使VSCode自动搜索与我执行的文件位于同一目录中的模块?
我希望只需键入下面这行代码,VSCode编辑器/Intellisense和Jupyter就可以自动搜索与我执行的文件位于同一目录中的模块。
from draw import *

如果您将.../dev/sitehealthcheck添加到您的PYTHONPATH中,那么您可以import draw - John Gordon
谢谢。你回答了我的问题。不过我没有办法将你的评论选为这个stackoverflow问题的官方答案。 - MKANET
6个回答

11

支持现有答案,当您在子文件夹中使用笔记本和兄弟文件夹中的模块时,需要将jupyter.notebookFileRoot行添加到 settings.json 文件中:

.vscode/settings.json

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

3
为了解决这个问题,您可以在 Python 扩展中搜索一个名为“Python › 数据科学:Notebook 文件根目录”的设置。该设置标题下方的行说:“设置 Python 交互窗口加载文件的根目录。”然后将 ${workspaceFolder} 更改为 ${fileDirname},关闭交互式 Python 终端并重新启动它,就应该可以解决问题了。

3
我不知道VS Code是否更改了默认设置,但对于我而言${fileDirname}是默认选项,我需要设置${workspaceFolder} - Spenhouet

2

对于交互式窗口,当前工作目录并不设置为正在执行的文件路径,而是设置为您在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设置为工作区根目录。

最初的回答:

因为交互式窗口会话的当前工作目录被设置为工作区的根目录。


1

如果在 Jupyter Notebook 中出现错误

  1. 打开:Anaconda 命令提示符
pip install import-ipynb

Open main file(打开主文件)。
import import_ipynb
import first

1

设置适当的内核和虚拟环境的简单方法。尝试像下面这样设置适当的虚拟环境。

enter image description here


请直接将您的代码发布到帖子中,无需添加可能在未来失效的额外URL。 - Tyler2P
1
@Tyler2P 这张图片突出了右上角的解决方案,对我有用。代码可以忽略。 - Aamer

0
如果您将.../dev/sitehealthcheck添加到您的PYTHONPATH中,那么您就可以import draw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接