Не могу найти модуль cPickle в поэзии и jupyter

Я пытаюсь кэшировать некоторые переменные в ячейках записной книжки Jupyter, которые велики и требуют много времени для вычисления. Я использую Ubuntu 20.04 и Python 3.8. Я добавил в свой файл pyproject.toml, и он был успешно установлен вместе с Poetry. Затем я добавил %load_ext ipycache в ячейке, и когда я ее выполняю, я получаю:

      ModuleNotFoundError                       Traceback (most recent call last)
/tmp/ipykernel_47459/791109313.py in <module>
----> 1 get_ipython().run_line_magic('load_ext', 'ipycache')

~/.cache/pypoetry/virtualenvs/toxic-comments-bias-kaggle-yMytpa1p-py3.8/lib/python3.8/site-packages/IPython/core/interactiveshell.py in run_line_magic(self, magic_name, line, _stack_depth)
   2362                 kwargs['local_ns'] = self.get_local_scope(stack_depth)
   2363             with self.builtin_trap:
-> 2364                 result = fn(*args, **kwargs)
   2365             return result
   2366 

~/.cache/pypoetry/virtualenvs/toxic-comments-bias-kaggle-yMytpa1p-py3.8/lib/python3.8/site-packages/decorator.py in fun(*args, **kw)
    230             if not kwsyntax:
    231                 args, kw = fix(args, kw, sig)
--> 232             return caller(func, *(extras + args), **kw)
    233     fun.__name__ = func.__name__
    234     fun.__doc__ = func.__doc__

~/.cache/pypoetry/virtualenvs/toxic-comments-bias-kaggle-yMytpa1p-py3.8/lib/python3.8/site-packages/IPython/core/magic.py in <lambda>(f, *a, **k)
    185     # but it's overkill for just that one bit of state.
    186     def magic_deco(arg):
--> 187         call = lambda f, *a, **k: f(*a, **k)
    188 
    189         if callable(arg):

~/.cache/pypoetry/virtualenvs/toxic-comments-bias-kaggle-yMytpa1p-py3.8/lib/python3.8/site-packages/IPython/core/magics/extension.py in load_ext(self, module_str)
     31         if not module_str:
     32             raise UsageError('Missing module name.')
---> 33         res = self.shell.extension_manager.load_extension(module_str)
     34 
     35         if res == 'already loaded':
~/.cache/pypoetry/virtualenvs/toxic-comments-bias-kaggle-yMytpa1p-py3.8/lib/python3.8/site-packages/IPython/core/extensions.py in load_extension(self, module_str)
     78             if module_str not in sys.modules:
     79                 with prepended_to_syspath(self.ipython_extension_dir):
---> 80                     mod = import_module(module_str)
     81                     if mod.__file__.startswith(self.ipython_extension_dir):
     82                         print(("Loading extensions from {dir} is deprecated. "

/usr/lib/python3.8/importlib/__init__.py in import_module(name, package)
    125                 break
    126             level += 1
--> 127     return _bootstrap._gcd_import(name[level:], package, level)
    128 
    129 

/usr/lib/python3.8/importlib/_bootstrap.py in _gcd_import(name, package, level)

/usr/lib/python3.8/importlib/_bootstrap.py in _find_and_load(name, import_)

/usr/lib/python3.8/importlib/_bootstrap.py in _find_and_load_unlocked(name, import_)

/usr/lib/python3.8/importlib/_bootstrap.py in _load_unlocked(spec)

/usr/lib/python3.8/importlib/_bootstrap_external.py in exec_module(self, module)

/usr/lib/python3.8/importlib/_bootstrap.py in _call_with_frames_removed(f, *args, **kwds)

~/.cache/pypoetry/virtualenvs/toxic-comments-bias-kaggle-yMytpa1p-py3.8/lib/python3.8/site-packages/ipycache.py in <module>
      9 
     10 # Stdlib
---> 11 import inspect, os, sys, textwrap, cPickle
     12 
     13 # Our own

ModuleNotFoundError: No module named 'cPickle'

Я думал, что это используется по умолчанию в Python>=3, и всякий раз, когда cPickle импортируется, тогда он автоматически использует pickleвместо. Однако этот импорт ( import inspect, os, sys, textwrap, cPickle) не на моей стороне, поэтому я не могу сделать что-то вроде import pickle as cPickleчтобы исправить эту ошибку. Также кажется ipycacheбольше не поддерживается. Можно ли решить эту проблему с моей стороны или попробовать другой метод кеширования?

2 ответа

В последней выпущенной версии Pip (0.1.14) ipycache не исправил эту известную ошибку (проблема ipycache Github ). Тем не менее, есть очевидный план выпустить исправление для этого в следующем выпуске (0.1.5). Между тем, эта проблема ipycache дает решение использования последней версии разработчика с

      pip install git+https://github.com/rossant/ipycache --upgrade

который, я могу подтвердить, сработал для меня, как и для других, комментирующих проблему Github.

Я также не смог запустить его в среде Azure Databricks по состоянию на 2022 год из-за того же cPickleошибка импорта. Этот вопрос имеет альтернативы ipycache.

Расширение блокнота Freeze jupyter, кажется, предлагает почти такие же функции кэширования.

Другие вопросы по тегам