Linux: shutil.which fails to find executable in current working directory/cwd when PATH unset (subprocess works)
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par le point d’entrée shutil.which et reproduisez le cas Linux avec PATH=, en le comparant à subprocess.run(['python', '-V']). Déterminez le comportement attendu pour un PATH vide, puis vérifiez que shutil.which le respecte et couvrez ce cas avec un test de régression.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- operating-systems
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100