Skip to content

tox failiing if there is an exe in path #3485

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

Open
AdrianCert opened this issue Feb 19, 2025 · 4 comments
Open

tox failiing if there is an exe in path #3485

AdrianCert opened this issue Feb 19, 2025 · 4 comments
Labels
bug:minor does not affect many people or has no big impact help:wanted Issues that have been acknowledged, a solution determined and a PR might likely be accepted.

Comments

@AdrianCert
Copy link
Contributor

Issue

I noticed that when I have an .exe file in the PATH environment variable, Tox crashes.

Environment

Provide at least:

  • OS: Windows 10 Enterprise (10.0, Build 19045)
Output of pip list of the host Python, where tox is installed
Package            Version     Editable project location
------------------ ----------- -----------------------------------------------
my-packages      1.4.2       C:\mnt\dev\handy_helpers\packages\my-packages
build              1.2.2.post1
cachetools         5.5.1
certifi            2025.1.31
chardet            5.2.0
charset-normalizer 3.4.1
colorama           0.4.6
distlib            0.3.9
docutils           0.21.2
dohq-artifactory   1.0.0
filelock           3.17.0
id                 1.5.0
idna               3.10
importlib-metadata 8.6.1
jaraco-classes     3.4.0
jaraco-context     6.0.1
jaraco-functools   4.1.0
keyring            25.6.0
markdown-it-py     3.0.0
mdurl              0.1.2
more-itertools     10.6.0
nh3                0.2.20
packaging          24.2
platformdirs       4.3.6
pluggy             1.5.0
pygments           2.19.1
pyjwt              2.10.1
pyproject-api      1.9.0
pyproject-hooks    1.2.0
python-dateutil    2.9.0.post0
pywin32-ctypes     0.2.3
pyyaml             6.0.2
readme-renderer    44.0
requests           2.32.3
requests-toolbelt  1.0.0
rfc3986            2.0.0
rich               13.9.4
six                1.17.0
tox                4.24.1
twine              6.1.0
urllib3            2.3.0
virtualenv         20.29.2
zipp               3.21.0

Output of running tox

Output of tox -rvv
.pkg: 245 I find interpreter for spec PythonSpec(major=3, minor=9, free_threaded=False) [virtualenv\discovery\builtin.py:76]
.pkg: 261 D got python info of %s from (WindowsPath('C:/Users/pan7clj/AppData/Roaming/uv/python/cpython-3.12.6-windows-x86_64-noa/virtualenv/py_info/2/f3d9852e03005212b424722c1cfd411efb459e61e6c5adb26794780a3f71760d.json')) [virtualenv\app_data\via_disk_fo
.pkg: 261 D filesystem is not case-sensitive [virtualenv\info.py:26]
.pkg: 261 I proposed PythonInfo(spec=CPython3.12.6.final.0-64, system=C:\Users\pan7clj\AppData\Roaming\uv\python\cpython-3.12.6-kages\my-packages\.venv\Scripts\python.exe, platform=win32, version='3.12.6 (main, Sep  9 2024, 20:50:27) [MSC v.1929 64 bit (ltin.py:83]
.pkg: 261 D discover PATH[0]=C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Scripts [virtualenv\discovery\builtin.py:152]
.pkg: 261 D discover PATH[1]=C:\Program Files\glzr.io\GlazeWM\cli [virtualenv\discovery\builtin.py:152]
.pkg: 261 D discover PATH[2]=C:\Windows\system32 [virtualenv\discovery\builtin.py:152]
.pkg: 279 D discover PATH[3]=C:\Windows [virtualenv\discovery\builtin.py:152]
.pkg: 280 D discover PATH[4]=C:\Windows\System32\Wbem [virtualenv\discovery\builtin.py:152]
.pkg: 282 D discover PATH[5]=C:\Windows\System32\WindowsPowerShell\v1.0 [virtualenv\discovery\builtin.py:152]
.pkg: 282 D discover PATH[6]=C:\Windows\System32\OpenSSH [virtualenv\discovery\builtin.py:152]
.pkg: 283 D discover PATH[7]=C:\Oracle\Client32\bin [virtualenv\discovery\builtin.py:152]
.pkg: 285 D discover PATH[8]=C:\Program Files\dotnet [virtualenv\discovery\builtin.py:152]
.pkg: 285 D discover PATH[9]=C:\Program Files\7-Zip [virtualenv\discovery\builtin.py:152]
.pkg: 286 D discover PATH[10]=C:\Program Files (x86)\Toolbase Client [virtualenv\discovery\builtin.py:152]
.pkg: 286 D discover PATH[11]=C:\Program Files\Conan\conan [virtualenv\discovery\builtin.py:152]
.pkg: 287 D discover PATH[12]=C:\Program Files\Microsoft VS Code\bin [virtualenv\discovery\builtin.py:152]
.pkg: 287 D discover PATH[13]=C:\Program Files\CMake\bin [virtualenv\discovery\builtin.py:152]
.pkg: 287 D discover PATH[14]=C:\Program Files\Git\cmd [virtualenv\discovery\builtin.py:152]
.pkg: 288 D discover PATH[15]=C:\mnt\bin\nodejs [virtualenv\discovery\builtin.py:152]
.pkg: 288 D discover PATH[16]=C:\Program Files\RedHat\java-17-openjdk\bin [virtualenv\discovery\builtin.py:152]
.pkg: 289 D discover PATH[17]=C:\Program Files\RedHat\java-17-openjdk\missioncontrol [virtualenv\discovery\builtin.py:152]
.pkg: 290 D discover PATH[18]=C:\Program Files\glzr.io\Zebar [virtualenv\discovery\builtin.py:152]
.pkg: 290 D discover PATH[19]=C:\Users\pan7clj\.elan\bin [virtualenv\discovery\builtin.py:152]
.pkg: 290 D discover PATH[20]=C:\Users\pan7clj\.local\bin [virtualenv\discovery\builtin.py:152]
.pkg: 290 D discover PATH[21]=C:\Users\pan7clj\.cargo\bin [virtualenv\discovery\builtin.py:152]
.pkg: 293 D discover PATH[22]=C:\ProgramData\PAN7CLJ\gitkraken\bin [virtualenv\discovery\builtin.py:152]
.pkg: 293 D discover PATH[23]=C:\Users\pan7clj\AppData\Local\gitkraken\bin [virtualenv\discovery\builtin.py:152]
.pkg: 294 D discover PATH[24]=C:\Progra~1\Rational\ClearCase\bin [virtualenv\discovery\builtin.py:152]
.pkg: 294 D discover PATH[25]=C:\Users\pan7clj\AppData\Local\Microsoft\WindowsApps [virtualenv\discovery\builtin.py:152]
.pkg: 294 D get interpreter info via cmd: 'C:\Users\pan7clj\AppData\Local\Microsoft\WindowsApps\python.exe' 'C:\mnt\dev\handy_hediscovery\py_info.py' KNqEww6ux3sdI77rv4Fxkrhegaqf9vcq 64K4GiEDKXuFKNrwnJgWub7lijutp0Hu [virtualenv\discovery\cached_py_info.py:
.pkg: 408 I failed to query C:\Users\pan7clj\AppData\Local\Microsoft\WindowsApps\python.exe with code 9009 err: 'Python was not , or disable this shortcut from Settings > Manage App Execution Aliases.\n' [virtualenv\discovery\cached_py_info.py:35]
.pkg: 408 D get interpreter info via cmd: 'C:\Users\pan7clj\AppData\Local\Microsoft\WindowsApps\python3.exe' 'C:\mnt\dev\handy_h\discovery\py_info.py' WcYca31Y62EI4d0C4uFy4ExJsZeb9YBO 2zPVELtmngjqkS4Eff75zvGGQlZu6i3C [virtualenv\discovery\cached_py_info.py
.pkg: 507 I failed to query C:\Users\pan7clj\AppData\Local\Microsoft\WindowsApps\python3.exe with code 9009 err: 'Python was note, or disable this shortcut from Settings > Manage App Execution Aliases.\n' [virtualenv\discovery\cached_py_info.py:35]
.pkg: 507 D discover PATH[26]=. [virtualenv\discovery\builtin.py:152]
.pkg: 507 D discover PATH[27]=C:\mnt\wsl\wsl_Ubuntu-22.04 [virtualenv\discovery\builtin.py:152]
.pkg: 524 D got python info of %s from (WindowsPath('C:/mnt/wsl/wsl_Ubuntu-22.04/python.exe'), WindowsPath('C:/Users/pan7clj/Appeb09c56737f15d53b6d071f1cb7f47279122b.json')) [virtualenv\app_data\via_disk_folder.py:133]
.pkg: 524 I proposed PathPythonInfo(spec=CPython3.12.2.final.0-64, exe=C:\mnt\wsl\wsl_Ubuntu-22.04\python.exe, platform=win32, vC v.1937 64 bit (AMD64)]', encoding_fs_io=utf-8-utf-8) [virtualenv\discovery\builtin.py:83]
.pkg: 524 D discover PATH[28]=C:\Users\pan7clj\AppData\Roaming\npm [virtualenv\discovery\builtin.py:152]
.pkg: 524 D discover PATH[29]=C:\Program Files\Git\git-bash.exe [virtualenv\discovery\builtin.py:152]
.pkg: 540 I find interpreter for spec PythonSpec(path=C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Scripts\python.exe) 
.pkg: 540 I proposed PythonInfo(spec=CPython3.12.6.final.0-64, system=C:\Users\pan7clj\AppData\Roaming\uv\python\cpython-3.12.6-kages\my-packages\.venv\Scripts\python.exe, platform=win32, version='3.12.6 (main, Sep  9 2024, 20:50:27) [MSC v.1929 64 bit (ltin.py:83]
.pkg: 540 D accepted PythonInfo(spec=CPython3.12.6.final.0-64, system=C:\Users\pan7clj\AppData\Roaming\uv\python\cpython-3.12.6-kages\my-packages\.venv\Scripts\python.exe, platform=win32, version='3.12.6 (main, Sep  9 2024, 20:50:27) [MSC v.1929 64 bit (ltin.py:85]
.pkg: 548 D symlink on filesystem does not work [virtualenv\info.py:45]
.pkg: 602 I find interpreter for spec PythonSpec(path=C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Scripts\python.exe) 
.pkg: 603 I proposed PythonInfo(spec=CPython3.12.6.final.0-64, system=C:\Users\pan7clj\AppData\Roaming\uv\python\cpython-3.12.6-kages\my-packages\.venv\Scripts\python.exe, platform=win32, version='3.12.6 (main, Sep  9 2024, 20:50:27) [MSC v.1929 64 bit (ltin.py:83]
.pkg: 603 D accepted PythonInfo(spec=CPython3.12.6.final.0-64, system=C:\Users\pan7clj\AppData\Roaming\uv\python\cpython-3.12.6-kages\my-packages\.venv\Scripts\python.exe, platform=win32, version='3.12.6 (main, Sep  9 2024, 20:50:27) [MSC v.1929 64 bit (ltin.py:85]
.pkg: 613 I find interpreter for spec PythonSpec(path=C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Scripts\python.exe) 
.pkg: 613 I proposed PythonInfo(spec=CPython3.12.6.final.0-64, system=C:\Users\pan7clj\AppData\Roaming\uv\python\cpython-3.12.6-kages\my-packages\.venv\Scripts\python.exe, platform=win32, version='3.12.6 (main, Sep  9 2024, 20:50:27) [MSC v.1929 64 bit (ltin.py:83]
.pkg: 614 D accepted PythonInfo(spec=CPython3.12.6.final.0-64, system=C:\Users\pan7clj\AppData\Roaming\uv\python\cpython-3.12.6-kages\my-packages\.venv\Scripts\python.exe, platform=win32, version='3.12.6 (main, Sep  9 2024, 20:50:27) [MSC v.1929 64 bit (ltin.py:85]
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Scripts\tox.exe\__main__.py", line 10, in <module>
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\run.py", line 20, in run
    result = main(sys.argv[1:] if args is None else args)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\run.py", line 46, in main
    return handler(state)
           ^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\cmd\legacy.py", line 115, in legacy
    return run_sequential(state)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\cmd\run\sequential.py", line 25, in 
    return execute(state, max_workers=1, has_spinner=False, live=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\cmd\run\common.py", line 167, in exe
    state.envs.ensure_only_run_env_is_active()
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\env_select.py", line 436, in ensure_
    envs, active = self._defined_envs, self._env_name_to_active()
                   ^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\env_select.py", line 291, in _define
    raise failed[next(iter(failed_to_create))]
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\env_select.py", line 268, in _define
    run_env.package_env = self._build_pkg_env(pkg_name_type, name, env_name_to_active)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\env_select.py", line 340, in _build_
    name_type = next(child_package_envs)
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\package\pyproject
    yield from super().register_run_env(run_env)
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\package.py", line 117, in reg
    pkg_env = run_env.conf["wheel_build_env"]
              ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\config\sets.py", line 122, in __getitem__
    return self.load(item)
           ^^^^^^^^^^^^^^^
    raise failed[next(iter(failed_to_create))]
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\env_select.py", line 268, in _define
    run_env.package_env = self._build_pkg_env(pkg_name_type, name, env_name_to_active)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\env_select.py", line 340, in _build_
    name_type = next(child_package_envs)
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\package\pyproject
    yield from super().register_run_env(run_env)
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\package.py", line 117, in reg
    pkg_env = run_env.conf["wheel_build_env"]
              ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\config\sets.py", line 122, in __getitem__
    return self.load(item)
           ^^^^^^^^^^^^^^^
    run_env.package_env = self._build_pkg_env(pkg_name_type, name, env_name_to_active)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\env_select.py", line 340, in _build_
    name_type = next(child_package_envs)
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\package\pyproject
    yield from super().register_run_env(run_env)
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\package.py", line 117, in reg
    pkg_env = run_env.conf["wheel_build_env"]
              ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\config\sets.py", line 122, in __getitem__
    return self.load(item)
           ^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\session\env_select.py", line 340, in _build_
    name_type = next(child_package_envs)
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\package\pyproject
    yield from super().register_run_env(run_env)
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\package.py", line 117, in reg
    pkg_env = run_env.conf["wheel_build_env"]
              ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packagesmy-packages\.venv\Lib\site-packages\tox\config\sets.py", line 122, in __getitem__
    return self.load(item)
           ^^^^^^^^^^^^^^^
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\package\pyproject
    yield from super().register_run_env(run_env)
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\package.py", line 117, in reg
    pkg_env = run_env.conf["wheel_build_env"]
              ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\config\sets.py", line 122, in __getitem__
    return self.load(item)
           ^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\config\sets.py", line 133, in load
    return config_definition.__call__(self._conf, self.loaders, ConfigLoadArgs(chain, self.name, self.env_name))  # noqa: PLC280
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\package.py", line 117, in reg
    pkg_env = run_env.conf["wheel_build_env"]
              ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\config\sets.py", line 122, in __getitem__
    return self.load(item)
           ^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\config\sets.py", line 133, in load
    return config_definition.__call__(self._conf, self.loaders, ConfigLoadArgs(chain, self.name, self.env_name))  # noqa: PLC280
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\config\sets.py", line 133, in load
    return config_definition.__call__(self._conf, self.loaders, ConfigLoadArgs(chain, self.name, self.env_name))  # noqa: PLC280
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\config\of_type.py", line 117, in __call__
    value = self.default(conf, args.env_name) if callable(self.default) else self.default
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\package.py", line 93, in defa
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\config\of_type.py", line 117, in __call__
    value = self.default(conf, args.env_name) if callable(self.default) else self.default
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\package.py", line 93, in defa
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\package.py", line 93, in defa
    run_py = cast("Python", run_env).base_python
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\api.py", line 282, in base_py
    self._base_python = self._get_python(base_pythons)
    run_py = cast("Python", run_env).base_python
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\api.py", line 282, in base_py
    self._base_python = self._get_python(base_pythons)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\api.py", line 282, in base_py
    self._base_python = self._get_python(base_pythons)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 139
    interpreter = self.creator.interpreter
                  ^^^^^^^^^^^^
    self._base_python = self._get_python(base_pythons)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 139
    interpreter = self.creator.interpreter
                  ^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 131
    return self.session.creator
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 139
    interpreter = self.creator.interpreter
                  ^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 131
    return self.session.creator
           ^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 112
    interpreter = self.creator.interpreter
                  ^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 131
    return self.session.creator
           ^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 112
    self._virtualenv_session = session_via_cli(env_dir, options=None, setup_logging=False, env=env)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 131
    return self.session.creator
           ^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 112
    self._virtualenv_session = session_via_cli(env_dir, options=None, setup_logging=False, env=env)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
           ^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\tox\tox_env\python\virtual_env\api.py", line 112
    self._virtualenv_session = session_via_cli(env_dir, options=None, setup_logging=False, env=env)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\run\__init__.py", line 49, in session
    parser, elements = build_parser(args, options, setup_logging, env)
    self._virtualenv_session = session_via_cli(env_dir, options=None, setup_logging=False, env=env)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\run\__init__.py", line 49, in session
    parser, elements = build_parser(args, options, setup_logging, env)
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\run\__init__.py", line 49, in session
    parser, elements = build_parser(args, options, setup_logging, env)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\run\__init__.py", line 77, in build_p
    parser._interpreter = interpreter = discover.interpreter  # noqa: SLF001
                                        ^^^^^^^^^^^^^^^^^^^^
                                        ^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\discover.py", line 41, in i
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\discover.py", line 41, in i
    self._interpreter = self.run()
    self._interpreter = self.run()
                        ^^^^^^^^^^
                        ^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\builtin.py", line 62, in ru
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\builtin.py", line 62, in ru
    result = get_interpreter(python_spec, self.try_first_with, self.app_data, self._env)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    result = get_interpreter(python_spec, self.try_first_with, self.app_data, self._env)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\builtin.py", line 79, in ge
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\builtin.py", line 79, in ge
    for interpreter, impl_must_match in propose_interpreters(spec, try_first_with, app_data, env):
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\builtin.py", line 79, in ge
    for interpreter, impl_must_match in propose_interpreters(spec, try_first_with, app_data, env):
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    for interpreter, impl_must_match in propose_interpreters(spec, try_first_with, app_data, env):
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\builtin.py", line 153, in p
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\builtin.py", line 153, in p
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\builtin.py", line 153, in p
    for exe, impl_must_match in find_candidates(path):
                                ^^^^^^^^^^^^^^^^^^^^^
  File "C:\mnt\dev\handy_helpers\packages\my-packages\.venv\Lib\site-packages\virtualenv\discovery\builtin.py", line 213, in path_exes
    for exe in path.iterdir():
               ^^^^^^^^^^^^^^
  File "C:\Users\pan7clj\AppData\Roaming\uv\python\cpython-3.12.6-windows-x86_64-none\Lib\pathlib.py", line 1056, in iterdir
    for name in os.listdir(self):
                ^^^^^^^^^^^^^^^^
NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\Program Files\\Git\\git-bash.exe'
@jugmac00
Copy link
Member

jugmac00 commented Mar 7, 2025

@AdrianCert Thanks for the report. I think the next step would be to create a simple reproducer. Could you do that?

Then we need some help as at least I do not have access to a windows environment.

@AdrianCert
Copy link
Contributor Author

Hi,

Looking at the traceback, the failure appears to be in the virtualenv project.

To reproduce the issue with minimal setup, you need to add an executable file (or even a simple file) to the PATH environment variable. I’m not sure of the equivalent process in Linux, but I know the expectation is usually for PATH entries to be directories. While it’s uncommon for programs to store files directly in PATH, some do.

I’m wondering if the tool could preemptively filter for this scenario. What do you think?

@jugmac00
Copy link
Member

jugmac00 commented Mar 7, 2025

IMHO putting any executables directly on the PATH is neither a thing for Windows nor for Linux, and thus should be avoided.

It is unfortunate that things bubble up and make tox crash.

What I would love to see here, is probably having virtualenv not throw a native exception, but a virtualenv exception, e.g. discovery exception or similar, and then tox could handle that. tox should have no knowledge of implementation details of virtualenv.

As @gaborbernat is the maintainer of both tools, what is your take on this?

@gaborbernat
Copy link
Member

No need for custom exception, this is a bug and can be handled without it too.

@gaborbernat gaborbernat added help:wanted Issues that have been acknowledged, a solution determined and a PR might likely be accepted. bug:minor does not affect many people or has no big impact labels Mar 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug:minor does not affect many people or has no big impact help:wanted Issues that have been acknowledged, a solution determined and a PR might likely be accepted.
Projects
None yet
Development

No branches or pull requests

3 participants