当我在 python 中编写自己的模块时,导入模块的正确方法是啥?

Posted

技术标签:

【中文标题】当我在 python 中编写自己的模块时,导入模块的正确方法是啥?【英文标题】:What is the correct way to import modules when I'm writing my own module in python?当我在 python 中编写自己的模块时,导入模块的正确方法是什么? 【发布时间】:2020-09-14 11:25:44 【问题描述】:

我搜索过类似的问题,但我发现的内容对我不起作用。 我正在一个 jupyter 笔记本中写我的分析报告(比如说main.ipynb)。我想导入一个外部functions.py 文件,其中包含一些我用来绘制一些结果的函数。准确地说,我的工作目录结构如下: -main.ipynb -实用工具 ----functions.py ---- 其他文件...

functions.py 文件是这样的:

import matplotlib.pyplot as plt


def myPlot():
    plt.figure()
    plt.plot([0,1],[0,1])
    plt.show()
    ....

笔记本的第一个单元格是这样的:

import matplotlib.pyplot as plt
from utils.functions import *

myPlot()

当我运行笔记本时,我得到了这个错误: NameError: name 'plt' is not defined,虽然我在两个文件中都定义了 plt(即使我认为我真的不应该在 main.ipynb 中需要它)。

S0,在外部文件中导入包(在这种情况下为matplotlib.pyplot)的正确方法是什么?我做错了什么?

【问题讨论】:

【参考方案1】:

我发现了我的代码中的缺陷,我认为值得分享,所以我在这里。 也许对于使用 jupyter notebook 的初学者(如我)来说,这可能很难检测到:一旦您使用 import 语句运行单元格,您是否编辑文件 functions.py 并重新运行该单元格都没关系。内核已经导入了一个具有完全相同名称的文件,因此即使您进行了更改,它也不会注意到差异。

我找到的解决方案(我认为是唯一的一个)是每次更改 functions.py 文件时都重新启动内核。

【讨论】:

以上是关于当我在 python 中编写自己的模块时,导入模块的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Pig 中使用 Python UDF 时,如何让 Hadoop 查找导入的 Python 模块?

FPGA测试的时候需要编写测试模块,即激励模块,在编写测试模块时啥时候需要产生输入激励信号?

导入的 python 模块覆盖选项解析器

TMUX会话不会导入Python模块

通过文件路径导入模块时使用 Python 多处理

如何利用Golang为Python编写模块