[英]Python libraries imported in custom module is not recognised globally
我创建了一个名为my_module.py
的模块,如下所示
import pandas as pd
def create_df(text):
df = <create a dataframe from the text>
return df
在Jupyter笔记本的单元格中,我可以创建一个这样的数据框
from my_module import create_df
txt = 'this is a test'
df = create_df(txt)
但是,在另一个单元格中,当我运行此查询时
pd.DataFrame?
它回来了
Object `pd.DataFrame` not found.
你能解释发生了什么吗? 我不应该在my_module.py
中将import pandas as pd
包括在内,但应该在笔记本中将import pandas as pd
的单元格声明import pandas as pd
吗?
在笔记本中,您导入了模块,但是您没有写:
import pandas as pd
因此, pandas
不会被导入,也不会将pd
添加到笔记本的命名空间中(请检查dir()
,您在笔记本中不会看到pd
),因此您的解释器不知道pd.DataFrame
是什么。
我认为您的困惑源于您在模块中导入了pandas
的事实,因此也将其导入到主脚本或笔记本中。 不,您需要再次导入它,因为在模块中进行的任何导入都不会继承到主脚本。
编辑 :更具体地说,在python中有一个命名空间的概念,它是与模块关联的全局变量的集合。
关键概念:每个模块都有自己的命名空间: numpy
有一个, pandas
有一个,您的main.py
脚本有一个,并且它们是分开的。
例如,当在my_module.py
中将import pandas as pd
编写import pandas as pd
时,就是将名称空间中的.pd
pandas
导入到my_module.py
脚本中。 在那里,只有在那里,通过写pd.
您将能够访问库的组件。
如果现在from my_module import create_df
main.py
from my_module import create_df
写入main.py
(或笔记本),则将create_df
添加到main.py
的命名空间。 main.py
不知道在my_module.py
完成的导入,因为它不共享其命名空间,因此您不能使用pd.
这里。
同样,您不能在main.py
而不是my_module.py
main.py
import pandas as pd
,并希望将其识别:您将调用create_df
,它将在my_modules.py
命名空间中查找变量,而不是.pd
,它将引发错误。
顺便说一句,您可以使用内置方法dir(<module_name>)
来查看在脚本的名称空间中加载了哪些变量。 默认情况下, dir()
将为您提供调用脚本的名称空间,而dir(pd)
将为您提供一个pandas
(当然,前提是pd
在名称空间中,即将pd
import pandas as pd
!)
希望它更清晰!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.