相同Jupyter Notebook无法导入模块问题排查及路径追踪咨询
Jupyter Notebook导入模块不一致的问题分析与解决
这种情况我之前踩过坑,大概率是环境或者工作目录的差异导致的,下面给你拆解可能的原因,以及怎么追踪模块路径:
可能的报错原因
- Python Kernel环境不匹配:Jupyter的Notebook是和Kernel绑定的,不同的Kernel对应不同的Python环境(比如conda虚拟环境、venv环境)。你打开第一份Notebook时用的Kernel可能已经安装了
example_name模块,而另一份Notebook用的是没装这个模块的Kernel——你可以看看两个Notebook右上角显示的Kernel名称是不是一样,大概率是这里的问题。 - 启动Jupyter时的工作目录不同:如果
example_name是你自己写的本地模块(不是通过pip安装的第三方包),Python会从当前工作目录和sys.path里的路径找模块。比如你从文件夹A启动Jupyter,打开A里的Notebook,当前工作目录就是A,若example_name在A里就能被找到;但如果是从文件夹B启动Jupyter,打开B里的同一份Notebook,工作目录变成B,而example_name不在B也不在全局搜索路径里,就会报错。 - 模块搜索路径被手动修改:可能能正常运行的那份Notebook里,有悄悄修改
sys.path的代码(比如sys.path.append('/xxx/xxx')),把example_name所在的路径加进了搜索列表,而另一份Notebook没有这段代码,自然找不到。
如何追踪example_name的文件路径
在能正常加载模块的Notebook里,运行下面这几行代码就能轻松找到路径:
- 直接打印模块的文件路径:
import example_name # 打印模块的具体位置 print(example_name.__file__)
如果是单个.py文件,会直接输出它的完整路径;如果是一个包,会输出包内__init__.py的路径,你顺着往上找就能看到包的根目录。
- 查看Python的模块搜索路径:
如果想确认这个路径是不是在Python的默认搜索列表里,可以运行:
import sys # 输出所有Python会搜索模块的路径 print(sys.path)
对比一下两份Notebook的sys.path,就能清楚看到差异在哪里了。
内容的提问来源于stack exchange,提问作者modLmakur
相关产品推荐
相关产品推荐

