【问题标题】:Import .py with .ipynb within VSCode在 VSCode 中使用 .ipynb 导入 .py
【发布时间】:2020-04-08 09:39:19
【问题描述】:

在同一个项目目录中,我有一个文件 solution.ipynb 和另一个名为 model.py 的文件。在文件 solution.ipynb 中,我必须导入模块 model.py。

虽然这两个文件都在同一个目录中,当我使用下面的代码时:

import import_ipynb
import model

我仍然收到错误:ModuleNotFoundError: No module named 'model'

请注意:我正在使用 VSCode 打开和写入 .ipynb 文件。奇怪的是,当我用 Jupyter lab 打开 .ipynb 文件时,模块 model.py 可以毫无问题地导入。

我已经尝试过:(1) 安装 import-ipynb 并在上面引用它(如代码的第一行所示)和 (2) 添加一个 __init__.py 文件在 .ipynb 所在的目录中。

【问题讨论】:

  • 我是这个扩展的开发者。我对这里发生的事情的猜测是 VS Code 使用了与 Jupyter 不同的默认根目录。 Jupyter 默认会在 ipynb 文件的位置旁边查看,但 VS Code 会查看当前打开的工作区的根目录。如果您的 .ipynb 与工作空间根目录不在同一位置,这将导致找到 .py 文件。你是这种情况吗?如果是这样,将 VS Code 中的“python.dataScience.notebookFileRoot”设置更改为“${fileDirName}”可能对您有用,因为它将工作目录设置为相对于打开的 ipynb 文件。
  • 没错。只有当我在 VSCode 工作区中同时打开两个以上的项目时,才会出现问题。但是,在 settting.json 中插入相对路径并不能解决问题。 VSCode 仍在从我工作区顶部的项目中获取工作目录。
  • 我实际上刚刚意识到我输入了错误的变量。是 ${fileDirname} 而不是 ${fileDirName} 那样可以吗?
  • 我都使用了,但不幸的是它们并没有解决问题。工作目录仍被引用到另一个项目(我的 VSCode 工作区顶部的项目)。我尝试使用命令“os.chdir('path')”更改 file.ipynb 内的工作目录,虽然它确实更改了工作目录,但当我尝试导入 file.py 时,我再次收到 ModuleNotFoundError .

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


【解决方案1】:

你可以用这个

% run "model.py"

【讨论】:

    【解决方案2】:

    正如 Ian Huff 在他的评论中提到的那样,当您有多个目录时,VSCode 设置的 PATH 变量不会查看您的 .ipynb 文件所在的文件夹。它只查看顶层。要明确指出文件夹的路径,请在 .ipynb 开头添加以下代码:

    import sys
    sys.path.insert(0, ".")
    

    注意:

    您可以相应地更改路径,例如如果您的 .py 模块位于 .ipynb 的父文件夹中,请使用“..”;如果它位于与 .ipynb 文件所在文件夹平行的另一个文件夹中,请使用“../another_dir”。

    在评论中查看更多信息:https://stackoverflow.com/a/42727538/14237798

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-25
      • 2022-06-28
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2021-03-22
      相关资源
      最近更新 更多