在Google Drive File Stream中Jupyter Notebook存Checkpoint报错求助
Jupyter Notebook Checkpoint Failed with shutil.SameFileError on Google Drive File Stream (Offline Mode)
问题回顾
你在切换到Google Drive File Stream并设置文件夹为Available offline后,Jupyter Notebook启动正常,但执行Save and Checkpoint时触发shutil.SameFileError,提示原Notebook文件和.ipynb_checkpoints下的checkpoint文件是同一个文件,即使修改内容、删除原有checkpoint文件夹也无法解决。
解决方案
1. 临时应急方案(快速恢复保存功能)
- 先关闭当前运行的Jupyter Notebook服务器
- 找到你的Notebook所在的Google Drive文件夹,手动删除
.ipynb_checkpoints文件夹 - 重新启动Jupyter Notebook,尝试手动保存(注意:如果再次触发自动checkpoint,问题可能会重复,建议配合下面的配置修改)
2. 长期修复:修改Checkpoint存储路径到本地
这个方法从根源上避免Drive File Stream的文件映射冲突:
- 打开Anaconda Prompt,运行以下命令生成Jupyter配置文件:
jupyter notebook --generate-config - 在输出信息里找到配置文件的路径(通常是
C:\Users\[你的用户名]\.jupyter\jupyter_notebook_config.py),用文本编辑器打开它 - 找到
# c.FileCheckpoints.checkpoint_dir = ''这一行,去掉开头的注释符号#,并设置为一个本地路径(非Drive File Stream映射的路径),比如:
注意:确保你创建了这个本地目录,或者让Jupyter自动创建(需要目录有写入权限)c.FileCheckpoints.checkpoint_dir = 'C:/Jupyter_Checkpoints/.ipynb_checkpoints' - 保存配置文件后,重新启动Jupyter Notebook,之后checkpoint会存储在本地,不会再和云端路径的文件产生冲突
3. 备选方案:禁用自动Checkpoint
如果你不需要自动checkpoint功能,可以直接关闭它:
- 打开上述的
jupyter_notebook_config.py文件,找到# c.FileContentsManager.autosave_interval = 120这一行 - 修改为:
这样Jupyter就不会自动创建checkpoint,你可以通过手动点击c.FileContentsManager.autosave_interval = 0Save按钮保存文件(不会触发checkpoint操作)
原因分析
Google Drive File Stream的离线模式会将云端文件同步到本地缓存,但对外展示的还是云端映射路径(比如你的G:\My Drive)。当Jupyter在这个映射路径下创建checkpoint文件时,Drive的文件同步机制可能导致系统识别错误,认为原文件和checkpoint文件是同一个实体,从而触发shutil库的SameFileError异常。
错误日志参考
[I 10:49:44.573 NotebookApp] Saving file at /Writing_MVUE_2d.ipynb [E 10:49:44.690 NotebookApp] Unhandled error in API request Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\notebook\base\handlers.py", line 516, in wrapper result = yield gen.maybe_future(method(self, *args, **kwargs)) File "C:\ProgramData\Anaconda3\lib\site-packages\tornado\gen.py", line 1015, in run value = future.result() File "C:\ProgramData\Anaconda3\lib\site-packages\tornado\concurrent.py", line 237, in result raise_exc_info(self._exc_info) File "<string>", line 3, in raise_exc_info File "C:\ProgramData\Anaconda3\lib\site-packages\tornado\gen.py", line 285, in wrapper yielded = next(result) File "C:\ProgramData\Anaconda3\lib\site-packages\notebook\services\contents\handlers.py", line 278, in post checkpoint = yield gen.maybe_future(cm.create_checkpoint(path)) File "C:\ProgramData\Anaconda3\lib\site-packages\notebook\services\contents\manager.py", line 468, in create_checkpoint return self.checkpoints.create_checkpoint(self, path) File "C:\ProgramData\Anaconda3\lib\site-packages\notebook\services\contents\filecheckpoints.py", line 56, in create_checkpoint self._copy(src_path, dest_path) File "C:\ProgramData\Anaconda3\lib\site-packages\notebook\services\contents\fileio.py", line 241, in _copy copy2_safe(src, dest, log=self.log) File "C:\ProgramData\Anaconda3\lib\site-packages\notebook\services\contents\fileio.py", line 51, in copy2_safe shutil.copyfile(src, dst) File "C:\ProgramData\Anaconda3\lib\shutil.py", line 98, in copyfile raise SameFileError("{!r} and {!r} are the same file".format(src, dst)) shutil.SameFileError: 'G:\\My Drive\\Research\\Camera_Project\\Writing_MVUE_2d.ipynb' and 'G:\\My Drive\\Research\\Camera_Project\\.ipynb_checkpoints\\Writing_MVUE_2d-checkpoint.ipynb' are the same file [E 10:49:44.698 NotebookApp] { "Cache-Control": "no-cache", "Cookie": "username-localhost-8891=\"2|1:0|10:1525749572|23:username-localhost-8891|44:ZGE5NjFkMTgwOTI3NDFjMWJhMzY1NDIwNjhlODk5ODA=|52cc6ad64c261ccd78d2f66a0c14a95edc8468e7e4ac9c27770ce2bbebd8cd55\"; _xsrf=2|f34c78bf|7c7913196386a495e7fb6a7c3c7bbf7e|1525206477; username-localhost-8890=\"2|1:0|10:1525723124|23:username-localhost-8890|44:MGFhNmE2ZjMxZmFmNDU0M2IyMTgzNWE2NDdmMmRhMDc=|73c556d569c5f55b60a18dd36f06850f90c89c2dc329e11a4041a6c5ede7cb38\"; username-localhost-8889=\"2|1:0|10:1526327000|23:username-localhost-8889|44:YjdmMTExODQyNjNmNGM5MWIzZmM0OWIzYjE3NDgzZmM=|43a55e40b88869d8e054546feca0fbf7efae9c993b450311f5046f4c0ba45a66\"; username-localhost-8888=\"2|1:0|10:1526395222|23:username-localhost-8888|44:ZDJmZWNjZWUzZDJjNDVmMjkwMTZhNWZmNTI1MjhhMTE=|9cd671557f9b67b203088e3852aaf37de56ad7c8ad45f26798bc3e0d47a49c43\"", "Referer": "http://localhost:8888/notebooks/Writing_MVUE_2d.ipynb", "X-Xsrftoken": "2|f34c78bf|7c7913196386a495e7fb6a7c3c7bbf7e|1525206477", "Origin": "http://localhost:8888", "Content-Length": "0", "Connection": "Keep-Alive", "Accept-Encoding": "gzip, deflate", "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Language": "en-US", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299", "X-Requested-With": "XMLHttpRequest", "Host": "localhost:8888" } [E 10:49:44.698 NotebookApp] 500 POST /api/contents/Writing_MVUE_2d.ipynb/checkpoints (::1) 12.00ms referer=http://localhost:8888/notebooks/Writing_MVUE_2d.ipynb
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

