pypa / pipenv

Python Development Workflow for Humans.
https://pipenv.pypa.io
MIT License
24.83k stars 1.87k forks source link

Access is denied: 'C:\WINDOWS\system32\config\systemprofile' in `pythonfinder.Finder` #6093

Open Joinyy opened 7 months ago

Joinyy commented 7 months ago

Issue description

The pythonfinder.Finder dataclass, which tries to search all paths on the PATH environment variable somehow tries to access some system32 folders and throws an exception when that is not accessible. This happens with every pipenv call that tries gather information on the installed python versions, which means even pipenv --support broke.

Expected result

As I gave the --python option with a path to my python.exe on the commandline, I expected pipenv to completely ignore the pathsearch in the first place. When I don't give that option, I expect the pathsearch to skip non-accessible paths.

Actual result

 pipenv sync --python=C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\python.exe -v                                                                                                                   14:48:14
Traceback (most recent call last):
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\Scripts\pipenv.exe\__main__.py", line 7, in <module>
    # when invoked as python -m pip <command>
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\cli\options.py", line 58, in main
    return super().main(*args, **kwargs, windows_expand_args=False)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\decorators.py", line 92, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\decorators.py", line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\cli\command.py", line 644, in sync
    retcode = do_sync(
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\routines\install.py", line 321, in do_sync
    ensure_project(
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\utils\project.py", line 38, in ensure_project
    ensure_virtualenv(
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\utils\virtualenv.py", line 149, in ensure_virtualenv
    python = ensure_python(project, python=python)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\utils\virtualenv.py", line 242, in ensure_python
    path_to_python = find_a_system_python(python)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\utils\virtualenv.py", line 350, in find_a_system_python
    finder = Finder(system=True, global_search=True)
  File "<string>", line 8, in __init__
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\pythonfinder\pythonfinder.py", line 24, in __post_init__
    self.system_path = self.create_system_path()
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\pythonfinder\pythonfinder.py", line 30, in create_system_path
    return SystemPath.create(
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\pythonfinder\models\path.py", line 544, in create
    instance._run_setup()
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\pythonfinder\models\path.py", line 182, in _run_setup
    path_instances = [
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\pythonfinder\models\path.py", line 185, in <listcomp>
    if exists_and_is_accessible(Path(p.strip('"')).resolve())
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\pathlib.py", line 1205, in resolve
    s = self._flavour.resolve(self, strict=strict)
  File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\pathlib.py", line 206, in resolve
    s = self._ext_to_normal(_getfinalpathname(s))
PermissionError: [WinError 5] Access is denied: 'C:\\WINDOWS\\system32\\config\\systemprofile'

Steps to replicate

A simple pipenv install will do on my system (Windows 10, Python 3.9.5, pipenv 2023.12.1).

Minimal pipfile: ``` [[source]] url = "https://credentials@our-artifactory.com/artifactory/api/pypi/python-virtual/simple" name = "pypi" verify_ssl = true [dev-packages] python-dotenv = {version = ">=0.21.0"} requests = {version = ">=2.29.0"} [packages] Sphinx = {version = ">=6.2.1"} furo = {version = ">=2023.3.27"} [requires] python_version = "3.9.5" [pipenv] allow_prereleases = true install_search_all_sources = true ```
My PATH env variable: ``` C:\Program Files\PowerShell\7 C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.16.10261.0_x64__8wekyb3d8bbwe C:\Program Files\Python312\Scripts\ C:\Program Files\Python312\ C:\Program Files (x86)\Vector vFlash 9\Bin\Automation\ C:\Program Files (x86)\Vector vFlash 8\Bin\Automation\ C:\Program Files (x86)\Vector vFlash 7\Bin\Automation\ C:\Progra~1\Rational\ClearCase\bin C:\WINDOWS\system32 C:\WINDOWS C:\WINDOWS\System32\Wbem C:\WINDOWS\System32\WindowsPowerShell\v1.0\ C:\WINDOWS\System32\OpenSSH\ C:\Program Files\RedHat\java-1.8.0-openjdk\missioncontrol\ C:\Program Files\RedHat\java-1.8.0-openjdk\webstart\ C:\Program Files\RedHat\java-1.8.0-openjdk\bin C:\Program Files\RedHat\java-1.8.0-openjdk\jre\bin C:\Program Files\Rational\common C:\Program Files (x86)\IBM\gsk8\lib C:\Program Files (x86)\IBM\gsk8\bin C:\Program Files\Rational\ClearCase\RemoteClient\cteapis C:\Program Files\gs\gs9.21\bin C:\Program Files\Git\cmd C:\Program Files\dotnet\ C:\Program Files\MATLAB\R2020b\runtime\win64 C:\Program Files\MATLAB\R2020b\bin C:\Program Files\MATLAB\R2019b\runtime\win64 C:\Program Files\MATLAB\R2019b\bin C:\Program Files\MATLAB\R2017b\runtime\win64 C:\Program Files\MATLAB\R2017b\bin C:\Program Files\MATLAB\R2015b64\runtime\win64 C:\Program Files\MATLAB\R2015b64\bin C:\Program Files\MATLAB\R2015b64\polyspace\bin C:\WINDOWS\system32\config\systemprofile\.dnx\bin C:\Program Files\Microsoft DNX\Dnvm\ C:\Program Files\Microsoft SQL Server\120\Tools\Binn\ C:\Program Files\Microsoft SQL Server\130\Tools\Binn\ C:\Program Files\MATLAB\MATLAB Runtime\v97\runtime\win64 C:\Program Files\7-Zip C:\Program Files\Anaconda3\condabin C:\Program Files (x86)\Plantronics\Spokes3G\ C:\Program Files (x86)\dotnet\ C:\Program Files\MiKTeX 2.9\miktex\bin\x64\ C:\Program Files (x86)\RedHat\java-1.8.0-openjdk\webstart\ C:\Program Files (x86)\RedHat\java-1.8.0-openjdk\bin C:\Program Files (x86)\RedHat\java-1.8.0-openjdk\jre\bin C:\Program Files (x86)\Vector CANdb++ 3.1\Exec32 C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\ C:\Program Files\PowerShell\7\ C:\Program Files\nodejs\ C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin C:\toolbase\cmake\3.20.2\bin C:\Program Files\MATLAB\R2020b\bin\win64 C:\app\ninja C:\Users\USERNAME\.dnx\bin C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps C:\Users\USERNAME\AppData\Local\Programs\Microsoft VS Code\bin C:\Users\USERNAME\AppData\Local\Gpg4win\..\GnuPG\bin C:\Program Files\Anaconda3 C:\Program Files\Anaconda3\Scripts C:\Users\USERNAME\AppData\Roaming\Python\Python38\Scripts C:\app\cygwin64\bin C:\Program Files\MATLAB\R2017b\bin\win64 C:\Users\USERNAME\AppData\Local\Programs\oh-my-posh\bin C:\Program Files\Anaconda3\Library\bin C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps C:\Users\USERNAME\AppData\Roaming\Python\Python39\Scripts C:\app\Graphviz\bin C:\Users\USERNAME\AppData\Local\Pandoc\ C:\Users\USERNAME\AppData\Local\Programs\Neovim\bin C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\vcpkg C:\Users\USERNAME\AppData\Roaming\npm C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64 C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\Scripts ```

I added the closing </details> tag manually!

$ pipenv --support Pipenv version: `'2023.12.1'` Pipenv location: `'C:\\toolbase\\python\\3.9.5.0.0\\python-3.9.5.amd64\\lib\\site-packages\\pipenv'` Python location: `'C:\\toolbase\\python\\3.9.5.0.0\\python-3.9.5.amd64\\python.exe'` OS Name: `'nt'` User pip version: `'23.3.2'` user Python installations found: Traceback (most recent call last): File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\runpy.py", line 87, in _run_code exec(code, run_globals) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\Scripts\pipenv.exe\__main__.py", line 7, in # when invoked as python -m pip File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 1157, in __call__ return self.main(*args, **kwargs) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\cli\options.py", line 58, in main return super().main(*args, **kwargs, windows_expand_args=False) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 1078, in main rv = self.invoke(ctx) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 1666, in invoke rv = super().invoke(ctx) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 1434, in invoke return ctx.invoke(self.callback, **ctx.params) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 783, in invoke return __callback(*args, **kwargs) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\decorators.py", line 92, in new_func return ctx.invoke(f, obj, *args, **kwargs) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\core.py", line 783, in invoke return __callback(*args, **kwargs) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\click\decorators.py", line 33, in new_func return f(get_current_context(), *args, **kwargs) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\cli\command.py", line 134, in cli get_pipenv_diagnostics(state.project) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\help.py", line 32, in get_pipenv_diagnostics finder = pythonfinder.Finder(system=False, global_search=True) File "", line 8, in __init__ File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\pythonfinder\pythonfinder.py", line 24, in __post_init__ self.system_path = self.create_system_path() File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\pythonfinder\pythonfinder.py", line 30, in create_system_path return SystemPath.create( File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\pythonfinder\models\path.py", line 544, in create instance._run_setup() File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\pythonfinder\models\path.py", line 182, in _run_setup path_instances = [ File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\site-packages\pipenv\vendor\pythonfinder\models\path.py", line 185, in if exists_and_is_accessible(Path(p.strip('"')).resolve()) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\pathlib.py", line 1205, in resolve s = self._flavour.resolve(self, strict=strict) File "C:\toolbase\python\3.9.5.0.0\python-3.9.5.amd64\lib\pathlib.py", line 206, in resolve s = self._ext_to_normal(_getfinalpathname(s)) PermissionError: [WinError 5] Access is denied: 'C:\\WINDOWS\\system32\\config\\systemprofile'
matteius commented 6 months ago

Thank you for the issue report, it would be helpful to open a similar issue in pythonfinder to track there as that is where any fix would need to be applied.