Linux: shutil.which fails to find executable in current working directory/cwd when PATH unset (subprocess works)
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 36k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Bug report
Bug description:
On Linux, executables from the cwd are used when PATH is unset:
$ PATH= python -V
Python 3.13.7
subprocess.run also works in this case:
$ PATH= python -q
>>> from subprocess import run
... run(['python', '-V'])
...
Python 3.13.7
CompletedProcess(args=['python', '-V'], returncode=0)
>>>
But shutil.which returns None:
>>> from shutil import which
>>> which('python')
>>>
This is because when PATH is empty(""), the executable ("python") is passed to the kernel's execve directly, without resolving. execve then resolves the file relative to the cwd, I believe it's the case in both Linux and FreeBSD.
POSIX 2024 says this about the PATH environment variable:
If PATH is unset or is set to null, or if a path prefix in PATH contains a character ('%'), the path search is implementation-defined.
EDIT: PATH is empty, not unset
CPython versions tested on:
3.13
Operating systems tested on:
Linux
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza en el punto de entrada shutil.which y reproduce el caso de Linux con PATH=, comparándolo con subprocess.run(['python', '-V']). Determina el comportamiento previsto para un PATH vacío, verifica después que shutil.which lo sigue y cubre el caso con una prueba de regresión.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- operating-systems
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 42/100