Jupyter Notebook从同一目录中的python文件导入类

Posted

技术标签:

【中文标题】Jupyter Notebook从同一目录中的python文件导入类【英文标题】:Jupyter Notebook importing class from python file in same directory 【发布时间】:2020-10-07 07:47:57 【问题描述】:

我在 .ipynb 文件所在的同一目录中编写了名为 CombinedAttributesAdder 的简单类。喜欢:

-project
 -project.ipynb
 -combined_attributes_adder.py

此文件包含名为 CombinedAttributesAdder 的类 当我尝试将此类导入 ipynb 时,例如:

from combined_attributes_adder import CombinedAttributesAdder

它给了我一个错误:

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-73-65ed70439bcc> in <module>
----> 1 from combined_attributes_adder import CombinedAttributesAdder

ImportError: cannot import name 'CombinedAttributesAdder' from 'combined_attributes_adder' (/home/mat/Documents/Projects/machine-learning-notebooks/projects/combined_attributes_adder.py)

这是为什么呢?

【问题讨论】:

【参考方案1】:

这可能有多种原因。当我遇到同样的错误时,我发现 Jupyter 在 Python 文件已经导入一次后似乎没有重新读取它。

因此,如果您使用以下命令进行初始导入:

import combined_attributes_adder

然后将CombinedAttributesAdder 类添加到combined_attributes_adder.py,将您的单元更改为以下内容并在不重新启动内核的情况下重新运行单元,您会收到您发布的错误消息:

from combined_attributes_adder import CombinedAttributesAdder

在导入的 Python 文件发生更改后,如果您之前已经导入了模块,您可能需要重新启动内核才能获取更改。

为避免这种情况,您可以改用'run' magic,如this answer 所示:

%run -i 'combined_attributes_adder.py'

本质上与

from combined_attributes_adder import *

链接的答案还包含一种在更改时自动重新加载的方法。

【讨论】:

以上是关于Jupyter Notebook从同一目录中的python文件导入类的主要内容,如果未能解决你的问题,请参考以下文章

运行 jupyter notebook 时从存储库的根目录导入

jupyter笔记本起始目录

Jupyter Lab 在错误的路径中打开,与 Jupyter Notebook 不同,两者在“jupyter_notebook_config.py”中具有相同的映射。

在 Jupyter notebook 中导入本地模块

jupyter notebook 工作目录修改

jupyter notebook 设置默认目录