diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py index caa77948..5073a8bc 100644 --- a/pre_commit/languages/python.py +++ b/pre_commit/languages/python.py @@ -158,10 +158,12 @@ def py_interface( yield def healthy(prefix: Prefix, language_version: str) -> bool: + envdir = helpers.environment_dir(_dir, language_version) + exe_name = 'python.exe' if sys.platform == 'win32' else 'python' + py_exe = prefix.path(bin_dir(envdir), exe_name) with in_env(prefix, language_version): retcode, _, _ = cmd_output_b( - 'python', '-c', - 'import ctypes, datetime, io, os, ssl, weakref', + py_exe, '-c', 'import ctypes, datetime, io, os, ssl, weakref', cwd='/', retcode=None, ) diff --git a/tests/languages/python_test.py b/tests/languages/python_test.py index 245c73a0..34c6c7fc 100644 --- a/tests/languages/python_test.py +++ b/tests/languages/python_test.py @@ -59,3 +59,17 @@ def test_healthy_types_py_in_cwd(tmpdir): # even if a `types.py` file exists, should still be healthy tmpdir.join('types.py').ensure() assert python.healthy(prefix, C.DEFAULT) is True + + +def test_healthy_python_goes_missing(tmpdir): + with tmpdir.as_cwd(): + prefix = tmpdir.join('prefix').ensure_dir() + prefix.join('setup.py').write('import setuptools; setuptools.setup()') + prefix = Prefix(str(prefix)) + python.install_environment(prefix, C.DEFAULT, ()) + + exe_name = 'python' if sys.platform != 'win32' else 'python.exe' + py_exe = prefix.path(python.bin_dir('py_env-default'), exe_name) + os.remove(py_exe) + + assert python.healthy(prefix, C.DEFAULT) is False