Skip to content

Program is failing with Python 3.14 (pickle.PicklingError: Can't pickle local object ) #388

Description

@imincik
bang scan -v -u bang-results ./test-file.txt
[DEBUG/MainProcess] cli:scan: starting processes...
Traceback (most recent call last):
  File "/nix/store/qvd2j67zjjvwk4a715p9xvad7n563q8m-bang-0-unstable-2026-06-21/bin/.bang-wrapped", line 9, in <module>
    sys.exit(app())
             ~~~^^
  File "/nix/store/zvg9zh2x2agaybynbiz514lwbsia3f3p-python3.14-click-8.3.3/lib/python3.14/site-packages/click/core.py", line 1514, in __call__
    return self.main(*args, **kwargs)
           ~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/nix/store/zvg9zh2x2agaybynbiz514lwbsia3f3p-python3.14-click-8.3.3/lib/python3.14/site-packages/click/core.py", line 1435, in main
    rv = self.invoke(ctx)
  File "/nix/store/zvg9zh2x2agaybynbiz514lwbsia3f3p-python3.14-click-8.3.3/lib/python3.14/site-packages/click/core.py", line 1902, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/nix/store/zvg9zh2x2agaybynbiz514lwbsia3f3p-python3.14-click-8.3.3/lib/python3.14/site-packages/click/core.py", line 1298, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/zvg9zh2x2agaybynbiz514lwbsia3f3p-python3.14-click-8.3.3/lib/python3.14/site-packages/click/core.py", line 853, in invoke
    return callback(*args, **kwargs)
  File "/nix/store/qvd2j67zjjvwk4a715p9xvad7n563q8m-bang-0-unstable-2026-06-21/lib/python3.14/site-packages/bang/cli.py", line 228, in scan
    p.start()
    ~~~~~~~^^
  File "/nix/store/jxyrvv4gbpnp3ap5iy7wxwl1sg4x2x88-python3-3.14.6/lib/python3.14/multiprocessing/process.py", line 121, in start
    self._popen = self._Popen(self)
                  ~~~~~~~~~~~^^^^^^
  File "/nix/store/jxyrvv4gbpnp3ap5iy7wxwl1sg4x2x88-python3-3.14.6/lib/python3.14/multiprocessing/context.py", line 230, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/nix/store/jxyrvv4gbpnp3ap5iy7wxwl1sg4x2x88-python3-3.14.6/lib/python3.14/multiprocessing/context.py", line 306, in _Popen
    return Popen(process_obj)
  File "/nix/store/jxyrvv4gbpnp3ap5iy7wxwl1sg4x2x88-python3-3.14.6/lib/python3.14/multiprocessing/popen_forkserver.py", line 35, in __init__
    super().__init__(process_obj)
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/nix/store/jxyrvv4gbpnp3ap5iy7wxwl1sg4x2x88-python3-3.14.6/lib/python3.14/multiprocessing/popen_fork.py", line 20, in __init__
    self._launch(process_obj)
    ~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/nix/store/jxyrvv4gbpnp3ap5iy7wxwl1sg4x2x88-python3-3.14.6/lib/python3.14/multiprocessing/popen_forkserver.py", line 47, in _launch
    reduction.dump(process_obj, buf)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/nix/store/jxyrvv4gbpnp3ap5iy7wxwl1sg4x2x88-python3-3.14.6/lib/python3.14/multiprocessing/reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
_pickle.PicklingError: Can't pickle local object <function pipe_or.<locals>._check at 0x76d4a130c3b0>

Quick fix for Python 3.14 to restore compatibility:

        substituteInPlace src/bang/cli.py \
          --replace-fail \
          "multiprocessing.Process(target = process_jobs, args = (scan_pipeline, scan_environment,))" \
          "multiprocessing.get_context('fork').Process(target = process_jobs, args = (scan_pipeline, scan_environment,))"

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