模块"x"没有属性"y",我该创建自己的模块.py。

4
我正在尝试创建自己的模块(mi_modulo.py),并将所有在我的Jupyter Notebook脚本中定义的函数移动到该模块中,以使其看起来更加清晰。
然而,当我尝试使用已移至模块中的这些函数时,我无法使用它们,并出现以下消息:module 'mi_modulo' has no attribute 'train4_data_import' 我已安装Anaconda 3.0,并通过Jupyter Notebooks运行Python 3.7.0。(如果表达不够流畅,请原谅,我对Python有一定了解,但并没有深入研究安装、软件、IDE等细节)
## mi_modulo.py ##

def train4_data_import(file_name):

    df = pandas.read_excel(file_name)

    force = df["Signal 1"].values[13:]
    acceleration1 = df["Signal 2"].values[13:]
    acceleration2 = df["Signal 3"].values[13:]

    return force, acceleration1, acceleration2

def hola_mundo():
    print("whatever")

## script ##

import pandas
import mi_modulo as mi

mi.hola_mundo()

mi.train4_data_import("Tren4.xlsx")

这是我得到的内容: (我本来想展示一张图片,但是我不确定如何在这个新的stackoverflow表单样式中进行操作)
whatever

AttributeError                            Traceback (most recent call last)
<ipython-input-18-69a38929f7e6> in <module>()
      3 mi.hola_mundo()
      4 
----> 5 mi.train4_data_import()

AttributeError: module 'mi_modulo' has no attribute 'train4_data_import'

我不明白为什么它可以读取一个函数但不能读取另一个函数。
----------------------------- 编辑1 ----------------------------
按照U9-Forward的建议进行操作:
import pandas
from mi_modulo import *

hola_mundo()

train4_data_import("Tren4.xlsx")

我现在遇到了以下错误:

whatever


NameError                                 Traceback (most recent call last)
<ipython-input-25-e1885200beb7> in <module>()
      3 hola_mundo()
      4 
----> 5 train4_data_import("Tren4.xlsx")

NameError: name 'train4_data_import' is not defined

1
你能否重新启动核心并再试一次?它可以找到hola_mundo(),所以它也应该能找到train4_data_import。同时确保先保存你的mi_modulo。也许你写了那个函数但没有保存它。 - Osman Mamun
重启内核确实解决了问题。太好了。 最后一个问题,当使用模块时,似乎我应该在模块本身中导入所有我在该模块中使用的包(如numpy、pandas...),是这样吗? 在导入我的模块之前在Notebook中导入它们是不够的,我还应该将它们包含在模块中。 - sdiabr
1
是的,你应该在 mi_modulo 中导入 pandas,否则它将无法工作。 - Osman Mamun
1
好的,我想我应该给你“正确答案”奖项,但我不知道如何做到这一点,因为你没有写一个“答案”,而是一个评论。你有什么办法解决这个问题吗? - sdiabr
我将我的评论作为答案添加了进去。 - Osman Mamun
我知道另外一件事情,如果你重启内核仍然不能工作,那么你的模块可能没有正确构建。如果你使用Jupyter创建一个模块,你应该新建一个文本文件,然后编写你的代码并保存成.py文件。 - Nicole
2个回答

12

在jupyter-notebook中,有时候需要重启内核以导入所有未保存的模块。此外,您需要在自定义模块中导入该模块的所有依赖项。


1
可能是因为您没有按下Ctrl+S或点击文件上的保存按钮,如果这样做,它可能会起作用:

Ctrl+S

或者保存按钮。

然后运行script.py并查看它是否工作 :-)


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