Ошибка во время «Сохранить и контрольная точка» при запуске ноутбука Jupyter в папке Google DFS - PullRequest
0 голосов
/ 21 мая 2018

Я уже давно использую Jupyter Notebook в своем Google Диске, и он работал отлично.Недавно я был вынужден перейти на более новую версию Drive File Stream.Я сделал свою папку Available offline, что должно означать, что я сохранил папку в своем локальном хранилище.Когда я запускаю Jupyter Notebook, он работает нормально, но при попытке Save and Checkpoint выдает ошибку Checkpoint failed.Похоже, что он как-то правильно сохраняет файл, но вернул ошибку.

Я запустил блокнот jupyter, запустив Jupyter Notebook в Anaconda Prompt.Следующая ошибка получается, когда я пытаюсь Save and Checkpoint.Похоже, он жалуется, что сохраненные файлы одинаковы - shutil.SameFileError, что действительно странно, поскольку я определенно изменил ноутбук, добавив дополнительный Save Attempt x, чтобы помочь мне определить, сохранился ли он.Я также попытался удалить соответствующую контрольную точку в папке .ipynb_checkpoints и сделать Save and Checkpoint, но все равно получаю ту же ошибку ...

Я отправил заявку на выпуск на страницу ноутбука Jupyter github, и похоже, что некоторые другие люди также испытывают ту же проблему, но никакой помощи не получали.

Ниже приведен журнал, который у меня есть:

[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

Любая помощь высоко ценится!

1 Ответ

0 голосов
/ 22 января 2019

Отличная отладка от deniz195 привела к отличному ответу!Это временное решение работает для меня и многих других друзей github!

Цитирую его оригинальный ответ здесь:

Я немного отладил проблему и нашел следующее решение:

Часть 1 - минимальный рабочий пример Кажется, проблема возникла из shutil.copyfile, который проверяет, совпадают ли исходный и целевой файлы (используя os.path.samefile).

ItПохоже, что комбинация окон и потока файлов на диске Google дает неверные результаты.Вот минимальный пример (при условии, что G: \ My Drive \ foo.txt существует с использованием python 3.6.2): ​​

>>> f1 = 'G:\\My Drive\\foo.txt'
>>> f2 = 'G:\\My Drive\\foo2.txt'
>>> import shutil
>>> shutil.copyfile(f1, f2)
>>> shutil.copyfile(f1, f2)

-> Последняя строка выдает ошибку SameFileError, хотя она явно не должна!

Принимая во внимание:

>>> f1 = 'G:\\My Drive\\foo.txt'
>>> f3 = 'C:\\Scratch\\foo2.txt'
>>> import shutil
>>> shutil.copyfile(f1, f3)
>>> shutil.copyfile(f1, f3)

-> Не выдает ошибку (правильно)!

Часть 2 - Почему? Как это происходит?

Оказывается, что shutil.copyfile использует os.path.samefile, чтобы определить, копируется ли файл на себя: (из https://github.com/python/cpython/blob/master/Lib/genericpath.py)

# Are two filenames really pointing to the same file?
def samefile(f1, f2):
    """Test whether two pathnames reference the same actual file"""
    s1 = os.stat(f1)
    s2 = os.stat(f2)
    return samestat(s1, s2)

# Are two stat buffers (obtained from stat, fstat or lstat)
# describing the same file?
def samestat(s1, s2):
    """Test whether two stat buffers reference the same file"""
    return (s1.st_ino == s2.st_ino and
            s1.st_dev == s2.st_dev)

Теперь, к сожалению, st_ino зависит от окон в файлеsystem ( Значение ST_INO (os.stat () output) в ОС Windows ) и, в частности, st_ino == 0 для всех файлов в Файловом потоке Google Диска.

Часть 3- Куда пойти и кого винить? Похоже, что эта ошибка является неудачной комбинацией ленивой файловой системы (почему бы не сообщить какой-то uid в качестве inode?) И наивной библиотекой python os (Проверка идентичности файла этокажется, не очень хорошо обобщать ... почему бы не проверить, если st_ino == 0?)

Часть 4 - TГрязное исправление

  1. Найдите файл genericpath.py вашей библиотеки Python:
>>> import os
>>> os.path.genericpath.__file__
'C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Anaconda3_64\\lib\\genericpath.py'
  1. В этом файле замените функцию samestat следующимпатч:
# Are two stat buffers (obtained from stat, fstat or lstat)
# describing the same file?
def samestat(s1, s2):
    """Test whether two stat buffers reference the same file"""
    return (s1.st_ino != 0 and
          s2.st_ino != 0 and
          s1.st_ino == s2.st_ino and
            s1.st_dev == s2.st_dev)
  1. Сохраните файл.Перезапустите Python (и / или Jupyter).
  2. Будьте счастливы и подождите, пока Google или Python не исправят эту проблему должным образом ...
...