Jupyter Notebook(Python3.6)无法导入自定义模块utils.py排查求助
排查Jupyter Notebook自定义模块导入失败的问题
我来帮你一步步拆解这个导入问题,这种情况在Jupyter里其实挺常见的,咱们从最基础的点开始排查:
1. 先确认Jupyter的当前工作目录
Jupyter的工作目录不一定是你打开Notebook的目录,这是最容易踩坑的点。在Notebook里运行这段代码:
import os print(os.getcwd())
如果输出不是/path/to/myapp(你的项目根目录),那问题就出在这——比如你可能是从上级目录启动的Jupyter,导致相对路径解析错误。
解决办法:
- 切换到项目根目录:
os.chdir("/path/to/myapp") # 替换成你实际的myapp路径 - 然后重启Jupyter内核(Kernel → Restart),再尝试
from packages import utils。
2. 检查Python的模块搜索路径
Python只会在sys.path列表里的路径查找模块,哪怕文件就在眼前,不在这个列表里也找不到。运行这段代码查看:
import sys print(sys.path)
你需要确认/path/to/myapp或者/path/to/myapp/packages是否在这个列表里。
如果不在,手动添加路径:
# 如果当前工作目录已经是myapp,直接添加packages的绝对路径 sys.path.append(os.path.abspath("packages")) # 或者更稳妥的绝对路径写法(推荐) sys.path.append("/path/to/myapp/packages")
添加完之后再尝试导入模块。
3. 排查命名冲突问题
如果上面两步都没问题,那有可能是命名冲突导致的:
- 检查Notebook里有没有定义过名为
utils的变量或函数,比如utils = pd.DataFrame()这种,会和模块名冲突; - 检查项目里有没有其他同名的
utils.py文件,或者有没有安装过第三方的utils包(可以用pip list | grep utils检查)。
4. 验证模块本身是否正常
有时候导入失败是因为utils.py本身有问题:
- 先在终端里测试导入(脱离Jupyter环境):cd到
myapp目录,运行python -c "from packages import utils"。如果也报错,说明模块本身有问题:- 检查
utils.py里有没有语法错误; - 检查是否存在循环导入(比如
utils.py导入了packages里的另一个模块,而那个模块又导入了utils); - 检查
utils.py里的myfunc函数是否定义正确,有没有拼写错误。
- 检查
5. 确认Jupyter内核与Python环境一致
虽然你说sys.executable路径正确,但再确认一下:
- 在Notebook里运行:
print(sys.executable) - 再在终端里运行
which python(Linux/Mac)或where python(Windows),对比两者路径是否完全一致。如果不一致,说明Jupyter用的是另一个Python环境,你需要切换到正确的内核(Kernel → Change Kernel)。
内容的提问来源于stack exchange,提问作者ingrid




