You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动