ancient-france-42909
08/25/2026, 6:56 PMancient-france-42909
08/25/2026, 6:57 PMpex: Installing 273 distributions: 240.3ms
pex: Using 5 parallel jobs to install 22 wheels: 9.7ms
Traceback (most recent call last):
File "/pants-named-caches/pex_root/installed_wheels/2/015e3985f214e986656c608f730e3d286e670df3fa711cfe5ac3580de021b320/pex-2.97.1-py2.py3-none-any.whl/pex/result.py", line 105, in catch
return func(*args, **kwargs)
File "/pants-named-caches/pex_root/installed_wheels/2/015e3985f214e986656c608f730e3d286e670df3fa711cfe5ac3580de021b320/pex-2.97.1-py2.py3-none-any.whl/pex/bin/pex.py", line 1435, in do_main
pex_builder = build_pex(
requirement_configuration=requirement_configuration,
...<3 lines>...
options=options,
)
File "/pants-named-caches/pex_root/installed_wheels/2/015e3985f214e986656c608f730e3d286e670df3fa711cfe5ac3580de021b320/pex-2.97.1-py2.py3-none-any.whl/pex/bin/pex.py", line 1111, in build_pex
resolve_result = resolve(
targets=targets,
...<9 lines>...
dependency_configuration=dependency_config,
)
File "/pants-named-caches/pex_root/installed_wheels/2/015e3985f214e986656c608f730e3d286e670df3fa711cfe5ac3580de021b320/pex-2.97.1-py2.py3-none-any.whl/pex/resolve/configured_resolve.py", line 172, in resolve
return resolve_via_pip(
targets=targets,
...<20 lines>...
dependency_configuration=dependency_configuration,
)
File "/pants-named-caches/pex_root/installed_wheels/2/015e3985f214e986656c608f730e3d286e670df3fa711cfe5ac3580de021b320/pex-2.97.1-py2.py3-none-any.whl/pex/resolver.py", line 1710, in resolve
build_and_install_request.install_distributions(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
ignore_errors=ignore_errors, max_parallel_jobs=max_parallel_jobs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/pants-named-caches/pex_root/installed_wheels/2/015e3985f214e986656c608f730e3d286e670df3fa711cfe5ac3580de021b320/pex-2.97.1-py2.py3-none-any.whl/pex/resolver.py", line 1513, in install_distributions
for install_result in iter_map_parallel(
~~~~~~~~~~~~~~~~~^
inputs=install_requests,
^^^^^^^^^^^^^^^^^^^^^^^^
...<6 lines>...
result_render_function=InstallResult.wheel_file,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
):
^
File "/pants-named-caches/pex_root/installed_wheels/2/015e3985f214e986656c608f730e3d286e670df3fa711cfe5ac3580de021b320/pex-2.97.1-py2.py3-none-any.whl/pex/jobs.py", line 788, in iter_map_parallel
with _mp_pool(size=pool_size) as pool:
~~~~~~~~^^^^^^^^^^^^^^^^
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/contextlib.py", line 141, in __enter__
return next(self.gen)
File "/pants-named-caches/pex_root/installed_wheels/2/015e3985f214e986656c608f730e3d286e670df3fa711cfe5ac3580de021b320/pex-2.97.1-py2.py3-none-any.whl/pex/jobs.py", line 704, in _mp_pool
pool = multiprocessing.Pool(processes=size)
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/context.py", line 119, in Pool
return Pool(processes, initializer, initargs, maxtasksperchild,
context=self.get_context())
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/pool.py", line 215, in __init__
self._repopulate_pool()
~~~~~~~~~~~~~~~~~~~~~^^
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/pool.py", line 306, in _repopulate_pool
return self._repopulate_pool_static(self._ctx, self.Process,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
self._processes,
^^^^^^^^^^^^^^^^
...<3 lines>...
self._maxtasksperchild,
^^^^^^^^^^^^^^^^^^^^^^^
self._wrap_exception)
^^^^^^^^^^^^^^^^^^^^^
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/pool.py", line 329, in _repopulate_pool_static
w.start()
~~~~~~~^^
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/process.py", line 121, in start
self._popen = self._Popen(self)
~~~~~~~~~~~^^^^^^
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/context.py", line 300, in _Popen
return Popen(process_obj)
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/popen_forkserver.py", line 35, in __init__
super().__init__(process_obj)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/popen_fork.py", line 20, in __init__
self._launch(process_obj)
~~~~~~~~~~~~^^^^^^^^^^^^^
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/popen_forkserver.py", line 51, in _launch
self.sentinel, w = forkserver.connect_to_new_process(self._fds)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/forkserver.py", line 89, in connect_to_new_process
self.ensure_running()
~~~~~~~~~~~~~~~~~~~^^
File "/pants-named-caches/python_build_standalone/39fa30435b5f9f2e3ed08a1247c0a6527fce9d8511437a3ed71b1dff568b92e6/lib/python3.14/multiprocessing/forkserver.py", line 159, in ensure_running
os.chmod(address, 0o600)
~~~~~~~~^^^^^^^^^^^^^^^^
OSError: [Errno 22] Invalid argument: '/pants-sandbox/pants-sandbox-uOpBP2/.tmp/pymp-j_z_u9v6/sock-d3zx1djz'
[Errno 22] Invalid argument: '/pants-sandbox/pants-sandbox-uOpBP2/.tmp/pymp-j_z_u9v6/sock-d3zx1djz'ancient-france-42909
08/25/2026, 6:58 PMpex: Installing 273 distributions: 984.2ms
pex: Using 5 parallel jobs to install 22 wheels: 530.9ms
pex: Checking install: 85.5ms
pex: Configuring PEX dependencies: 151.0ms
Saving PEX file to creek/bin-creek.pexancient-france-42909
08/25/2026, 7:01 PMancient-france-42909
08/25/2026, 7:01 PMancient-france-42909
08/25/2026, 7:01 PMancient-france-42909
08/25/2026, 7:05 PMancient-france-42909
08/25/2026, 7:25 PMancient-france-42909
08/25/2026, 7:28 PMbrief-scientist-13682
08/25/2026, 9:05 PM/pants-named-caches/ is a volume mount from the host machine. With that, page in these:
+ github.com/docker/for-mac/issues/6614
+ docs.python.org/3/whatsnew/…#…
On Unix platforms other than macOS, ‘forkserver’ is now the default start method (replacing ‘fork’). This change does not affect Windows or macOS, where ‘spawn’ remains the default start method.So ... afaict there is no Pex bug. There is certainly a Docker bug on macOS (linked above). And exactly that bug would be triggered by a switch from mp fork to mp forkserver, which is a new 3.14 thing for Linux. I will point out I knew 0 here and just used your backtrace and some googling.
brief-scientist-13682
08/25/2026, 9:13 PMIt turns out, it might be related to forums.docker.com/t/unix-socket-on-bind-mount/142653 - though, not really, since the socket is created in the container"though, not really, since the socket is created in the container" <- by "the socket", what are you referring to? If
/pants-sandbox/pants-sandbox-uOpBP2/.tmp/pymp-j_z_u9v6/sock-d3zx1djz, that socket used by the mp forkserver for communications is not in the container - its on the /pants-named-caches bind mount.ancient-france-42909
08/25/2026, 9:15 PMbrief-scientist-13682
08/25/2026, 9:16 PMancient-france-42909
08/25/2026, 9:19 PMbrief-scientist-13682
08/25/2026, 9:20 PMancient-france-42909
08/25/2026, 9:20 PMbrief-scientist-13682
08/25/2026, 9:20 PMancient-france-42909
08/25/2026, 9:20 PMbrief-scientist-13682
08/25/2026, 9:21 PMancient-france-42909
08/25/2026, 9:21 PMancient-france-42909
08/25/2026, 9:21 PMbrief-scientist-13682
08/25/2026, 9:21 PMbrief-scientist-13682
08/25/2026, 9:23 PMancient-france-42909
08/25/2026, 9:23 PMancient-france-42909
08/25/2026, 9:24 PMbrief-scientist-13682
08/25/2026, 9:24 PMbrief-scientist-13682
08/25/2026, 9:25 PMancient-france-42909
08/25/2026, 9:25 PMancient-france-42909
08/25/2026, 9:25 PMcan i get my thinkpad back
brief-scientist-13682
08/25/2026, 9:26 PMancient-france-42909
08/25/2026, 9:26 PMbrief-scientist-13682
08/25/2026, 9:26 PMancient-france-42909
08/25/2026, 9:26 PMbrief-scientist-13682
08/25/2026, 9:27 PMancient-france-42909
08/25/2026, 9:27 PMancient-france-42909
08/25/2026, 9:28 PMbrief-scientist-13682
08/25/2026, 9:28 PMancient-france-42909
08/25/2026, 9:30 PMbrief-scientist-13682
08/25/2026, 10:51 PMbrief-scientist-13682
08/26/2026, 2:10 AMspawn to be safe. That said, I also fixed --jobs and --max-install-jobs to skip multiprocessing if set to 1.ancient-france-42909
08/26/2026, 7:24 PMancient-france-42909
08/26/2026, 7:24 PMancient-france-42909
08/26/2026, 7:24 PMancient-france-42909
08/26/2026, 7:24 PMbrief-scientist-13682
08/26/2026, 7:27 PMPants does allow you to pass cmdline args to pexThis is only available via env var, not a command line arg (unless you mean restricting jobs to 1 - but that's a crappy option IMO). Regardless, it does look like Pants allows passing the env var through one of the many env var options listed for pantsbuild.org/2.32/reference/targets/docker_environment
ancient-france-42909
08/26/2026, 7:28 PMancient-france-42909
08/27/2026, 5:30 PMbrief-scientist-13682
08/28/2026, 12:10 AMspawn is used as the start method in this example: github.com/jsirois/pants-PEX_MU…
It's true getting a repro is tricky, you must nuke pants named cache volumes and ensure a fresh container is started to observe PEX_MULTIPROCESSING_START_METHOD=spawn is plumbed to the container and seen by Pex there.ancient-france-42909
08/28/2026, 7:26 PM.last_access when starting.brief-scientist-13682
08/28/2026, 7:41 PMA coworker tried to use spawn and it still crashed. jobs=1 works, so whatever.FWIW I put actual effort into the fixes / release; so I do not take this as "so whatever". When you throw stuff over the wall and actually get a response back - its nice to meet the effort with at least equal effort since this is free labor.