Windows10下Jupyter Notebook中Python3无法导入同目录文件
解决Jupyter Notebook中同目录模块导入失败的问题
我之前在Windows 10的Jupyter环境里也碰到过一模一样的坑,给你几个实用的排查和解决方法:
1. 先确认Jupyter的当前工作目录
很多时候问题出在Jupyter启动的工作目录根本不是你文件所在的目录!先在Jupyter单元格里运行这段代码:
import os print(os.getcwd())
如果输出的路径不是Test1.py和Test2.py所在的文件夹,那你添加的sys.path路径自然没用。解决办法:
- 要么用代码切换工作目录:
os.chdir("C:\\你的文件所在绝对路径") # Windows路径要用双反斜杠,或者原始字符串r"C:\xxx" - 要么关闭当前Jupyter,回到Jupyter的启动页面,先进入目标文件夹再打开Test2.ipynb(或Test2.py)。
2. 检查sys.path添加的路径是否正确
Windows的路径格式很容易踩坑:
- 不要直接写类Unix的
/path/to/xxx,要用Windows兼容的路径:比如C:\\Users\\你的用户名\\桌面\\你的文件夹,或者用原始字符串r"C:\Users\你的用户名\桌面\你的文件夹"。 - 添加路径后,打印
sys.path确认路径是否真的被加入列表:import sys print(sys.path)
如果目标路径不在列表里,说明你写的路径有误,修正后再试。
3. 将目录标记为Python包
在Test1和Test2所在的目录里创建一个空的__init__.py文件(文件内容可以是空的),把这个目录变成Python包。然后在Test2里用相对导入:
from .Test1 import method1
注意:这种方式在Jupyter里直接运行Test2.py文件可能还会有问题,你可以直接把导入代码写在Jupyter单元格里执行,效果会更稳定。
4. 手动加载模块(终极临时方案)
如果上面的方法都不行,可以用Python的importlib模块手动加载Test1,绕开默认的模块查找机制:
import importlib.util # 指定Test1.py的路径(如果在当前目录就直接写"Test1.py") spec = importlib.util.spec_from_file_location("Test1", "Test1.py") Test1 = importlib.util.module_from_spec(spec) spec.loader.exec_module(Test1) # 现在可以调用方法了 Test1.method1()
内容的提问来源于stack exchange,提问作者Miguel GC
相关产品推荐
相关产品推荐

