Skip to content

Python 3.14: TypeError: cannot pickle 'weakref.ReferenceType' object #181

@The-Compiler

Description

@The-Compiler

After upgrading my Archlinux system to Python 3.13, when launching keepmenu and entering my password, I get:

Traceback (most recent call last):
  File "/usr/bin/keepmenu", line 8, in <module>
    sys.exit(main())
             ~~~~^^
  File "/usr/lib/python3.14/site-packages/keepmenu/__main__.py", line 214, in main
    run(**args)
    ~~~^^^^^^^^
  File "/usr/lib/python3.14/site-packages/keepmenu/__main__.py", line 144, in run
    dmenu.start()
    ~~~~~~~~~~~^^
  File "/usr/lib/python3.14/multiprocessing/process.py", line 121, in start
    self._popen = self._Popen(self)
                  ~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.14/multiprocessing/context.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.14/multiprocessing/context.py", line 300, in _Popen
    return Popen(process_obj)
  File "/usr/lib/python3.14/multiprocessing/popen_forkserver.py", line 35, in __init__
    super().__init__(process_obj)
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.14/multiprocessing/popen_fork.py", line 20, in __init__
    self._launch(process_obj)
    ~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.14/multiprocessing/popen_forkserver.py", line 47, in _launch
    reduction.dump(process_obj, buf)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/multiprocessing/reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
TypeError: cannot pickle 'weakref.ReferenceType' object
when serializing dict item '_weakref'
when serializing multiprocessing.util.Finalize state
when serializing multiprocessing.util.Finalize object
when serializing dict item 'finalizer'
when serializing multiprocessing.popen_forkserver.Popen state
when serializing multiprocessing.popen_forkserver.Popen object
when serializing dict item '_popen'
when serializing keepmenu.__main__.Server state
when serializing keepmenu.__main__.Server object
when serializing dict item 'server'
when serializing keepmenu.keepmenu.DmenuRunner state
when serializing keepmenu.keepmenu.DmenuRunner object
Traceback (most recent call last):
  File "/usr/lib/python3.14/multiprocessing/forkserver.py", line 340, in main
    code = _serve_one(child_r, fds,
                      unused_fds,
                      old_handlers)
  File "/usr/lib/python3.14/multiprocessing/forkserver.py", line 380, in _serve_one
    code = spawn._main(child_r, parent_sentinel)
  File "/usr/lib/python3.14/multiprocessing/spawn.py", line 132, in _main
    self = reduction.pickle.load(from_parent)
  File "/usr/lib/python3.14/multiprocessing/synchronize.py", line 117, in __setstate__
    self._semlock = _multiprocessing.SemLock._rebuild(*state)
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory
Process Server-1:
Traceback (most recent call last):
  File "/usr/lib/python3.14/multiprocessing/process.py", line 320, in _bootstrap
    self.run()
    ~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/keepmenu/__main__.py", line 105, in run
    _ = self.server()
  File "/usr/lib/python3.14/site-packages/keepmenu/__main__.py", line 130, in server
    mgr.start()  # pylint: disable=consider-using-with
    ~~~~~~~~~^^
  File "/usr/lib/python3.14/multiprocessing/managers.py", line 570, in start
    self._address = reader.recv()
                    ~~~~~~~~~~~^^
  File "/usr/lib/python3.14/multiprocessing/connection.py", line 256, in recv
    buf = self._recv_bytes()
  File "/usr/lib/python3.14/multiprocessing/connection.py", line 447, in _recv_bytes
    buf = self._recv(4)
  File "/usr/lib/python3.14/multiprocessing/connection.py", line 416, in _recv
    raise EOFError
EOFError

I can also reproduce this with uvx and its Python binary builds:

  • uvx -p python3.13 --managed-python keepmenu works
  • uvx -p python3.14 --managed-python keepmenu crashes in the same way as above.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions