Jupyter Notebook导入错误与相对导入问题求解
Jupyter Notebook导入问题解决方案
问题根源
- 第一个报错
TypeError: the 'package' argument is required to perform a relative import for './deeplearning':多半是Jupyter当前工作目录和文件实际所在目录不匹配,导致加载deeplearning.mplstyle或导入lab_utils_uni时路径出错;也可能是lab_utils_uni.py内部用了相对路径引用资源,却没在包环境下运行。 - 第二个报错
ImportError: attempted relative import with no known parent package:Jupyter直接运行Notebook时,脚本不会被识别为Python包的一部分,所以用.开头的相对导入语法无效。
可行解决办法
办法1:对齐Jupyter工作目录与文件目录
- 启动Jupyter时直接从
Cost function.ipynb所在的文件夹打开,这样工作目录默认就是文件目录,无需修改代码。 - 若已打开Notebook,可通过代码切换工作目录:
import os # 查看当前工作目录 print(os.getcwd()) # 替换成你的Notebook实际存放路径,切换过去 os.chdir("/你/的/文件/所在/路径")
办法2:用绝对导入(推荐)
保持最初的代码不变:
import numpy as np import matplotlib.pyplot as plt from lab_utils_uni import plt_intuition plt.style.use('deeplearning.mplstyle')
只要工作目录和文件目录一致,这个写法就能正常导入模块和加载样式。
办法3:手动添加路径到Python搜索范围
如果没法切换工作目录,就把文件所在目录加到Python的模块搜索路径里:
import sys import os # 获取当前Notebook的目录路径 notebook_path = os.path.dirname(os.path.abspath("__file__")) # 把路径加入sys.path if notebook_path not in sys.path: sys.path.append(notebook_path) # 之后正常导入和加载样式 import numpy as np import matplotlib.pyplot as plt from lab_utils_uni import plt_intuition plt.style.use(os.path.join(notebook_path, 'deeplearning.mplstyle'))
重要提醒
- 别在Jupyter Notebook里用
.开头的相对导入,这种写法只适用于作为包结构一部分的普通Python脚本。 - 确保
lab_utils_uni.py、deeplearning.mplstyle和Cost function.ipynb在同一目录下,或者通过路径配置让Python能定位到它们。
内容的提问来源于stack exchange,提问作者Trieu Vu
相关产品推荐
相关产品推荐

