在VSCode中使用.ipynb导入.py文件

6

在同一项目目录下,我有一个名为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)在位于.ipynb文件的目录中添加__init__.py文件。

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

2
如Ian Huff在评论中提到的,问题出现是因为VSCode设置的PATH变量并没有查找你的.ipynb文件所在的文件夹,当你有多层目录时。它只会查找顶层目录。要明确指出文件夹的路径,请在.ipynb开头添加以下代码:
import sys
sys.path.insert(0, ".")

注意:
你可以相应地更改路径,例如,如果你的.py模块在.ipynb的父文件夹中,请使用“..”; 如果它在与.ipynb文件夹平行的另一个文件夹中,请使用“../ another_dir”。
在此处查看更多评论:https://dev59.com/01sW5IYBdhLWcg3wbm0O#42727538

那恶化了我的处境。 - Ricardo Coelho

0

你可以使用这个

% run "model.py"

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