Jupyter中shutil复制文件夹报错问题求解
嘿,我来帮你排查下这个问题!这种本地.py脚本运行正常,但Jupyter Notebook里报错的情况,大多和工作目录差异或者权限/路径解析有关,我整理了几个常见的解决方向:
先确认Jupyter的当前工作目录
Jupyter默认的工作目录很可能和你直接运行.py文件的目录不一样!先在Notebook里执行这段代码看看当前路径:import os print(os.getcwd())对比你
.py文件所在的目录,如果不一致,要么用os.chdir("你的目标目录")切换工作目录,要么在复制命令里使用绝对路径(别用相对路径),比如把shutil.copytree("source", "dest")改成shutil.copytree("/full/path/to/source", "/full/path/to/dest"),绝对路径能彻底避开工作目录的坑。检查权限与目标路径可用性
Jupyter的运行权限可能和你直接跑.py文件的权限不同(比如用Anaconda的话,Jupyter可能用的是conda环境的权限)。试试把目标路径改成你肯定有权限的位置,比如用户个人目录下的文件夹:Linux/macOS用~/test_dest,Windows用C:\Users\你的用户名\test_dest。另外Windows下要注意目标文件夹有没有被占用、是不是只读属性。适配
shutil.copytree的参数(如果用的是这个命令)
如果你用的是shutil.copytree,默认情况下目标文件夹已存在会直接报错,说不定你在.py文件里已经处理了这个情况(比如先删除目标目录),但Notebook里没做?- Python 3.8及以上版本可以直接加
dirs_exist_ok=True参数:shutil.copytree(src, dst, dirs_exist_ok=True) - 旧版本Python需要先手动删除目标目录:
import shutil import os dst = "你的目标路径" if os.path.exists(dst): shutil.rmtree(dst) shutil.copytree(src, dst)
- Python 3.8及以上版本可以直接加
排查路径中的特殊字符
如果路径里有空格、非ASCII字符,Notebook里的路径解析可能出问题。建议用原始字符串定义路径(比如Windows下写r"C:\My Folder\source"),避免转义字符干扰。捕获详细错误信息精准定位
如果上面的方法都没解决,把复制代码用try-except包裹,打印完整错误信息,这样能快速找到问题根源:import shutil import traceback try: # 替换成你的复制命令 shutil.copytree("你的源路径", "你的目标路径") except Exception as e: print(f"错误详情: {e}") traceback.print_exc()
内容的提问来源于stack exchange,提问作者Mauro Gentile

