Eryk Sun added the comment:
difference from the behaviour of Posix's execvpe() was deliberate
POSIX doesn't define execvpe . GNU glibc implemented it in 2009 . On Windows, MSC has had execvpe and spawnvpe since at least 5.0 , and I think it arrived in 4.0 in 1986. Guido added os._execvpe in 1.2b4  in 1995. I think it's the only implementation of execvpe that searches the passed environment.
: http://pubs.opengroup.org/onlinepubs/9699919799/functions/execvp.html : https://sourceware.org/ml/libc-alpha/2009-10/msg00063.html : https://openlibrary.org/works/OL2028669W : https://hg.python.org/cpython/file/534a97c400cc/Lib/os.py
---------- nosy: +eryksun