当我在 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 模块?