gpt4 book ai didi

python - dill.dump_session 在 jupyter 实验室中不起作用

转载 作者:行者123 更新时间:2023-12-05 07:13:33 28 4
gpt4 key购买 nike

我想开始使用 jupyter lab 而不是 spyder,但我遇到了问题。我无法将变量保存在我的工作区中。

我正在尝试使用 jupyter lab 来运行这样的代码:

import dill
import pandas as pd
import numpy as np

df = pd.DataFrame({'A': np.arange(1,300), 'B': np.arange(2,301)})
STRIN = 'A'
aa = 34

dill.dump_session('filename.p')

我收到以下错误:

TypeError: no default __reduce__ due to non-trivial __cinit__

完整的回溯是:

TypeError                                 Traceback (most recent call last)
<ipython-input-12-613d82353bf4> in <module>
----> 1 dill.dump_session('filename.p')

~\Anaconda3\lib\site-packages\dill\_dill.py in dump_session(filename, main, byref, **kwds)
349 pickler._recurse = False # disable pickling recursion for globals
350 pickler._session = True # is best indicator of when pickling a session
--> 351 pickler.dump(main)
352 finally:
353 if f is not filename: # If newly opened file

~\Anaconda3\lib\site-packages\dill\_dill.py in dump(self, obj)
443 raise PicklingError(msg)
444 else:
--> 445 StockPickler.dump(self, obj)
446 stack.clear() # clear record of 'recursion-sensitive' pickled objects
447 return

~\Anaconda3\lib\pickle.py in dump(self, obj)
435 if self.proto >= 4:
436 self.framer.start_framing()
--> 437 self.save(obj)
438 self.write(STOP)
439 self.framer.end_framing()

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
502 f = self.dispatch.get(t)
503 if f is not None:
--> 504 f(self, obj) # Call unbound method with explicit self
505 return
506

~\Anaconda3\lib\site-packages\dill\_dill.py in save_module(pickler, obj)
1293 + ["__builtins__", "__loader__"]]
1294 pickler.save_reduce(_import_module, (obj.__name__,), obj=obj,
-> 1295 state=_main_dict)
1296 log.info("# M1")
1297 else:

~\Anaconda3\lib\pickle.py in save_reduce(self, func, args, state, listitems, dictitems, obj)
660
661 if state is not None:
--> 662 save(state)
663 write(BUILD)
664

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
502 f = self.dispatch.get(t)
503 if f is not None:
--> 504 f(self, obj) # Call unbound method with explicit self
505 return
506

~\Anaconda3\lib\site-packages\dill\_dill.py in save_module_dict(pickler, obj)
910 # we only care about session the first pass thru
911 pickler._session = False
--> 912 StockPickler.save_dict(pickler, obj)
913 log.info("# D2")
914 return

~\Anaconda3\lib\pickle.py in save_dict(self, obj)
857
858 self.memoize(obj)
--> 859 self._batch_setitems(obj.items())
860
861 dispatch[dict] = save_dict

~\Anaconda3\lib\pickle.py in _batch_setitems(self, items)
883 for k, v in tmp:
884 save(k)
--> 885 save(v)
886 write(SETITEMS)
887 elif n:

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
547
548 # Save the reduce() output and finally memoize the object
--> 549 self.save_reduce(obj=obj, *rv)
550
551 def persistent_id(self, obj):

~\Anaconda3\lib\pickle.py in save_reduce(self, func, args, state, listitems, dictitems, obj)
660
661 if state is not None:
--> 662 save(state)
663 write(BUILD)
664

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
502 f = self.dispatch.get(t)
503 if f is not None:
--> 504 f(self, obj) # Call unbound method with explicit self
505 return
506

~\Anaconda3\lib\site-packages\dill\_dill.py in save_module_dict(pickler, obj)
910 # we only care about session the first pass thru
911 pickler._session = False
--> 912 StockPickler.save_dict(pickler, obj)
913 log.info("# D2")
914 return

~\Anaconda3\lib\pickle.py in save_dict(self, obj)
857
858 self.memoize(obj)
--> 859 self._batch_setitems(obj.items())
860
861 dispatch[dict] = save_dict

~\Anaconda3\lib\pickle.py in _batch_setitems(self, items)
883 for k, v in tmp:
884 save(k)
--> 885 save(v)
886 write(SETITEMS)
887 elif n:

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
547
548 # Save the reduce() output and finally memoize the object
--> 549 self.save_reduce(obj=obj, *rv)
550
551 def persistent_id(self, obj):

~\Anaconda3\lib\pickle.py in save_reduce(self, func, args, state, listitems, dictitems, obj)
660
661 if state is not None:
--> 662 save(state)
663 write(BUILD)
664

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
502 f = self.dispatch.get(t)
503 if f is not None:
--> 504 f(self, obj) # Call unbound method with explicit self
505 return
506

~\Anaconda3\lib\site-packages\dill\_dill.py in save_module_dict(pickler, obj)
910 # we only care about session the first pass thru
911 pickler._session = False
--> 912 StockPickler.save_dict(pickler, obj)
913 log.info("# D2")
914 return

~\Anaconda3\lib\pickle.py in save_dict(self, obj)
857
858 self.memoize(obj)
--> 859 self._batch_setitems(obj.items())
860
861 dispatch[dict] = save_dict

~\Anaconda3\lib\pickle.py in _batch_setitems(self, items)
883 for k, v in tmp:
884 save(k)
--> 885 save(v)
886 write(SETITEMS)
887 elif n:

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
502 f = self.dispatch.get(t)
503 if f is not None:
--> 504 f(self, obj) # Call unbound method with explicit self
505 return
506

~\Anaconda3\lib\site-packages\dill\_dill.py in save_module_dict(pickler, obj)
910 # we only care about session the first pass thru
911 pickler._session = False
--> 912 StockPickler.save_dict(pickler, obj)
913 log.info("# D2")
914 return

~\Anaconda3\lib\pickle.py in save_dict(self, obj)
857
858 self.memoize(obj)
--> 859 self._batch_setitems(obj.items())
860
861 dispatch[dict] = save_dict

~\Anaconda3\lib\pickle.py in _batch_setitems(self, items)
883 for k, v in tmp:
884 save(k)
--> 885 save(v)
886 write(SETITEMS)
887 elif n:

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
547
548 # Save the reduce() output and finally memoize the object
--> 549 self.save_reduce(obj=obj, *rv)
550
551 def persistent_id(self, obj):

~\Anaconda3\lib\pickle.py in save_reduce(self, func, args, state, listitems, dictitems, obj)
660
661 if state is not None:
--> 662 save(state)
663 write(BUILD)
664

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
502 f = self.dispatch.get(t)
503 if f is not None:
--> 504 f(self, obj) # Call unbound method with explicit self
505 return
506

~\Anaconda3\lib\site-packages\dill\_dill.py in save_module_dict(pickler, obj)
910 # we only care about session the first pass thru
911 pickler._session = False
--> 912 StockPickler.save_dict(pickler, obj)
913 log.info("# D2")
914 return

~\Anaconda3\lib\pickle.py in save_dict(self, obj)
857
858 self.memoize(obj)
--> 859 self._batch_setitems(obj.items())
860
861 dispatch[dict] = save_dict

~\Anaconda3\lib\pickle.py in _batch_setitems(self, items)
883 for k, v in tmp:
884 save(k)
--> 885 save(v)
886 write(SETITEMS)
887 elif n:

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
502 f = self.dispatch.get(t)
503 if f is not None:
--> 504 f(self, obj) # Call unbound method with explicit self
505 return
506

~\Anaconda3\lib\site-packages\dill\_dill.py in save_module_dict(pickler, obj)
910 # we only care about session the first pass thru
911 pickler._session = False
--> 912 StockPickler.save_dict(pickler, obj)
913 log.info("# D2")
914 return

~\Anaconda3\lib\pickle.py in save_dict(self, obj)
857
858 self.memoize(obj)
--> 859 self._batch_setitems(obj.items())
860
861 dispatch[dict] = save_dict

~\Anaconda3\lib\pickle.py in _batch_setitems(self, items)
883 for k, v in tmp:
884 save(k)
--> 885 save(v)
886 write(SETITEMS)
887 elif n:

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
547
548 # Save the reduce() output and finally memoize the object
--> 549 self.save_reduce(obj=obj, *rv)
550
551 def persistent_id(self, obj):

~\Anaconda3\lib\pickle.py in save_reduce(self, func, args, state, listitems, dictitems, obj)
660
661 if state is not None:
--> 662 save(state)
663 write(BUILD)
664

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
502 f = self.dispatch.get(t)
503 if f is not None:
--> 504 f(self, obj) # Call unbound method with explicit self
505 return
506

~\Anaconda3\lib\site-packages\dill\_dill.py in save_module_dict(pickler, obj)
910 # we only care about session the first pass thru
911 pickler._session = False
--> 912 StockPickler.save_dict(pickler, obj)
913 log.info("# D2")
914 return

~\Anaconda3\lib\pickle.py in save_dict(self, obj)
857
858 self.memoize(obj)
--> 859 self._batch_setitems(obj.items())
860
861 dispatch[dict] = save_dict

~\Anaconda3\lib\pickle.py in _batch_setitems(self, items)
888 k, v = tmp[0]
889 save(k)
--> 890 save(v)
891 write(SETITEM)
892 # else tmp is empty, and we're done

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
547
548 # Save the reduce() output and finally memoize the object
--> 549 self.save_reduce(obj=obj, *rv)
550
551 def persistent_id(self, obj):

~\Anaconda3\lib\pickle.py in save_reduce(self, func, args, state, listitems, dictitems, obj)
660
661 if state is not None:
--> 662 save(state)
663 write(BUILD)
664

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
502 f = self.dispatch.get(t)
503 if f is not None:
--> 504 f(self, obj) # Call unbound method with explicit self
505 return
506

~\Anaconda3\lib\site-packages\dill\_dill.py in save_module_dict(pickler, obj)
910 # we only care about session the first pass thru
911 pickler._session = False
--> 912 StockPickler.save_dict(pickler, obj)
913 log.info("# D2")
914 return

~\Anaconda3\lib\pickle.py in save_dict(self, obj)
857
858 self.memoize(obj)
--> 859 self._batch_setitems(obj.items())
860
861 dispatch[dict] = save_dict

~\Anaconda3\lib\pickle.py in _batch_setitems(self, items)
883 for k, v in tmp:
884 save(k)
--> 885 save(v)
886 write(SETITEMS)
887 elif n:

~\Anaconda3\lib\pickle.py in save(self, obj, save_persistent_id)
522 reduce = getattr(obj, "__reduce_ex__", None)
523 if reduce is not None:
--> 524 rv = reduce(self.proto)
525 else:
526 reduce = getattr(obj, "__reduce__", None)

~\Anaconda3\lib\site-packages\zmq\backend\cython\socket.cp37-win_amd64.pyd in zmq.backend.cython.socket.Socket.__reduce_cython__()

TypeError: no default __reduce__ due to non-trivial __cinit__

我该怎么做才能解决这个问题?

谢谢!

最佳答案

看起来 dill 正在尝试 pickle zmq 套接字,这是由于 jupyter 环境 Hook 到您的 session 中而发生的。参见例如https://github.com/uqfoundation/pathos/issues/132#issuecomment-501906583https://github.com/uqfoundation/dill/issues/255 .

我敢打赌,如果您尝试在 jupyter 之外执行此操作,它会成功。

我想 dill 可能会做更多的事情来检测它正在 jupyter 中运行并避免这种情况,但目前它似乎不是这样工作的。

关于python - dill.dump_session 在 jupyter 实验室中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60150341/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com