我正在 Jupyter 笔记本中工作。我创建了一个名为 conv.py 的简单模块,用于将英里转换为公里。当我尝试在单独的代码中(在同一目录中)导入此模块时,导入似乎成功,但它无法识别我在“conv”模块中定义的任何函数。
我已经导入了 os 并且 os.getcwd() 为 conv.py 提供了正确的文件夹...
conv.py代码
in_n_ft = 12
ft_n_mile = 5280
m_n_km = 1000
cm_n_in = 2.54
cm_n_m = 100
mm_n_m = 1000
def ft_to_km(feet):
return feet*in_n_ft*cm_n_in/cm_n_m/m_n_km
print(ft_to_km(5280))
def mil_to_km(mile):
return mile*ft_n_mile*in_n_ft*cm_n_in/cm_n_m/m_n_km
print(mil_to_km(3.2))
新模块代码
import conv
km = conv.mil_to_km(5)
提供错误
AttributeError Traceback (most recent call last)
<ipython-input-111-bfd778724ae2> in <module>
3 import conv
4
----> 5 km = conv.mil_to_km(5)
AttributeError: module 'conv' has no attribute 'mil_to_km'
当我打字时
dir(conv)
我明白了
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__']
我做错了什么?
编辑
我也尝试过
from conv import mil_to_km
当我这样做时,我得到了一个不同的错误
cannot import name 'mil_to_km' from 'conv' (C:\Users\223023441\Documents\python\conv.py)
我还使用以下方式查询了模块:
from inspect import getmembers, isfunction
import conv
print(getmembers(conv, isfunction))
从这里我得到:
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__']
导入后我也无法访问 conv.py 文件中的任何变量...保存 py 文件时我是否做错了什么? Jupyter 将 ipynb 作为通用文件,当我“另存为”到 conv.py 时,这会搞砸吗?
所以最终的问题是我保存 .py 文件的方式...我在 jupyter 笔记本中使用“另存为”命令并输入“conv.py”进行文件保存...这显示在目录作为 .py 文件,但我的主文件无法正确识别它。当我将文件下载为 .py 文件后,从我的下载文件夹中剪切并粘贴到我的工作目录中,一切正常...
您应该导入
from
模块。
试试这个:
from conv import mil_to_km
km = mil_to_km(5)
原因是当你以这种方式导入模块时,你正在执行它。 按照我展示的方式,您只需导入所需的功能。
我遇到了同样的问题,花了几个小时才解决。对我来说,当我重新启动 Jupyter 内核时,一切正常并且我的功能得到了识别。