…rror
On Fedora CI, I used runuser to get rid of root privileges before testing virtualenv.
The invocation I used did not clear the root's $PATH and as a result,
one of the entries in $PATH was /root/.local/bin.
But /root/ does not allow other users to browse (execute, read).
That lead to an unhanded PermissionError.
When this happens, the $PATH entry is now skipped as if it did not exist.
As there might be other reasons we cannot check if the $PATH entry exists,
I decided to suppress all OSError types.
For clarity, here is the Traceback I was getting:
# runuser testuser -c 'virtualenv --with-traceback --python pypy3.10 venv'
Traceback (most recent call last):
File "/usr/bin/virtualenv", line 8, in <module>
sys.exit(run_with_catch())
~~~~~~~~~~~~~~^^
File "/usr/lib/python3.13/site-packages/virtualenv/__main__.py", line 56, in run_with_catch
run(args, options, env)
~~~^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/virtualenv/__main__.py", line 18, in run
session = cli_run(args, options, env)
File "/usr/lib/python3.13/site-packages/virtualenv/run/__init__.py", line 31, in cli_run
of_session = session_via_cli(args, options, setup_logging, env)
File "/usr/lib/python3.13/site-packages/virtualenv/run/__init__.py", line 49, in session_via_cli
parser, elements = build_parser(args, options, setup_logging, env)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/virtualenv/run/__init__.py", line 77, in build_parser
parser._interpreter = interpreter = discover.interpreter # noqa: SLF001
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/virtualenv/discovery/discover.py", line 41, in interpreter
self._interpreter = self.run()
~~~~~~~~^^
File "/usr/lib/python3.13/site-packages/virtualenv/discovery/builtin.py", line 58, in run
result = get_interpreter(python_spec, self.try_first_with, self.app_data, self._env)
File "/usr/lib/python3.13/site-packages/virtualenv/discovery/builtin.py", line 75, in get_interpreter
for interpreter, impl_must_match in propose_interpreters(spec, try_first_with, app_data, env):
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/virtualenv/discovery/builtin.py", line 147, in propose_interpreters
for pos, path in enumerate(get_paths(env)):
~~~~~~~~~^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/virtualenv/discovery/builtin.py", line 169, in get_paths
if p.exists():
~~~~~~~~^^
File "/usr/lib64/python3.13/pathlib/_abc.py", line 450, in exists
self.stat(follow_symlinks=follow_symlinks)
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.13/pathlib/_local.py", line 515, in stat
return os.stat(self, follow_symlinks=follow_symlinks)
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: '/root/.local/bin'