`py -V:X.Y script.py` fails with "No suitable Python runtime found" when script arguments contain forward slashes
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Summary
When using the Python Launcher (py.exe) with a version flag (-V:X.Y), any script argument containing a forward slash (e.g. ./output, /tmp, C:/foo) causes exit code 103 ("No suitable Python runtime found"), even though the specified Python version is installed.
Reproduction
# test_simple.py
import sys
print('ran ok, argv:', sys.argv[1:])
py -V:3.14 test_simple.py files # OK
py -V:3.14 test_simple.py ./files # FAIL: "No suitable Python runtime found"
py -V:3.14 test_simple.py --help # OK (no slash)
py -V:3.14 test_simple.py .\files # OK (backslash is fine)
py -V:3.14 test_simple.py /files # FAIL
py -V:3.14 test_simple.py C:/files # FAIL
py test_simple.py ./files # OK (no -V: flag = unaffected)
Root cause
In PC/launcher2.c, parseCommandLine() parses -V:company/tag as follows:
const wchar_t *argStart = wcschr(arg, L':') + 1; // points past ':' in "-V:3.14"
const wchar_t *tagStart = wcschr(argStart, L'/'); // BUG: scans entire remaining cmdline
arg points into the full command-line string (from GetCommandLineW), not just the current token. tail (the whitespace-bounded end of the -V: token) is computed earlier but is not used to bound the wcschr search.
For py -V:3.14 script.py ./files, argStart is "3.14 script.py ./files...". The unbounded wcschr finds the / in ./files, and misparses:
company = "3.14 script.py ." (should be empty)
tag = "files" (should be "3.14")
selectEnvironment then finds no Python matching this bogus company/tag and returns RC_NO_PYTHON.
Fix
Limit the / search to within tail:
const wchar_t *argStart = wcschr(arg, L':') + 1;
// Search for '/' only within the current token boundary
const wchar_t *tagStart = NULL;
for (const wchar_t *p = argStart; p < tail; ++p) {
if (*p == L'/') { tagStart = p; break; }
}
Environment
- Python 3.14.4 (Windows 11, version 25H2)
py.exeversion: 3.14.4 (C:\Windows\py.EXE)- Also present in
launcher2.conmainand3.13branches (same code)
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 PC/launcher2.c, en parseCommandLine(), y luego reproduce el problema con los comandos py -V:3.14 indicados y test_simple.py en Windows. Se considera terminado cuando los argumentos de script que contienen barras ya no producen “No suitable Python runtime found” al usar un indicador de versión, y el análisis existente de company/tag sigue funcionando.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- c, python
- Área
- cli
- Tipo de issue
- Error
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Estado de actividad
- Tranquilo
- Claridad
- Bien especificado
- Aptitud para principiantes
- 72/100