Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skip $PATH entries we cannot check rather than dying with PermissionError #2782

Merged
merged 1 commit into from
Oct 18, 2024

Commits on Oct 16, 2024

  1. Skip $PATH entries we cannot check rather than dying with PermissionE…

    …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'
    hroncok committed Oct 16, 2024
    Configuration menu
    Copy the full SHA
    7a77931 View commit details
    Browse the repository at this point in the history