JanDeDobbeleer/oh-my-posh · warning
no pyenv version-name found
Error message
no pyenv version-name found
What it means
The python segment found a python executable inside PYENV_ROOT and ran `pyenv version-name`, but the command's output could not be split into a non-empty version string before the ':' separator. This means pyenv itself failed to report the active version (empty or malformed output).
Source
Thrown at src/segments/python.go:195
if cmdPath == "" {
return "", errors.New("no python executable found")
}
pyEnvRoot := p.env.Getenv("PYENV_ROOT")
if pyEnvRoot == "" || !strings.HasPrefix(cmdPath, pyEnvRoot) {
return "", fmt.Errorf("executable at %s is not a pyenv shim", cmdPath)
}
// pyenv version-name will return current version or virtualenv
cmdOutput, err := p.env.RunCommand("pyenv", "version-name")
if err != nil {
return "", err
}
versionString, _, found := strings.Cut(cmdOutput, ":")
if !found || versionString == "" {
return "", errors.New("no pyenv version-name found")
}
// $PYENV_ROOT/versions + versionString (symlinks resolved) == $PYENV_ROOT/versions/(version)[/envs/(virtualenv)]
realPath, err := p.env.ResolveSymlink(filepath.Join(pyEnvRoot, "versions", versionString))
if err != nil {
return "", err
}
// ../versions/(version)[/envs/(virtualenv)]
shortPath, err := filepath.Rel(filepath.Join(pyEnvRoot, "versions"), realPath)
if err != nil {
return "", err
}
// override virtualenv if pyenv set one
parts := strings.SplitN(shortPath, string(filepath.Separator), 4)
if len(parts) > 2 && p.canUseVenvName(parts[2]) {
p.Venv = parts[2]View on GitHub (pinned to 0976794618)
Solutions
- Run `pyenv global 3.x.y` (or create a .python-version in the project) so version-name has something to report.
- Run `pyenv version-name` manually in the affected directory and check its output is a plain version string.
- Reinstall/repair pyenv if version-name errors or prints nothing.
- Verify PYENV_ROOT points at the pyenv installation that actually manages your shims.
Example fix
# before $ pyenv version-name (empty) # after $ pyenv global 3.12.1 $ pyenv version-name 3.12.1
Defensive patterns
Strategy: validation
Validate before calling
out=$(pyenv version-name 2>/dev/null) if [ -z "$out" ]; then echo "pyenv returned no version: run 'pyenv global <ver>' or set .python-version" fi
Try / catch
version, err := p.pyenvVersion()
if err != nil {
if err.Error() == "no pyenv version-name found" {
return "" // pyenv not configured — fall back to plain python tooling
}
return "", err
} Prevention
- Always set a pyenv version: `pyenv global X.Y.Z` and/or a project .python-version.
- Sanity-check `pyenv version-name` output in directories where the prompt misbehaves.
- Keep pyenv and its shims healthy (reinstall if version-name emits nothing).
- Override the tooling option to fall back to plain python/python3 when pyenv is unconfigured.
When it happens
Trigger: `pyenv version-name` returns empty or unexpected output — no version selected anywhere (no .python-version file, no PYENV_VERSION, no global version set), a broken pyenv installation, or output format differing from what strings.Cut(":") expects.
Common situations: pyenv installed but never configured with `pyenv global`, shims resolving inside PYENV_ROOT while version selection files are missing, or corrupted ~/.pyenv/version.
Related errors
- no python executable found
- executable at %s is not a pyenv shim
- failed to parse version in data file: %w
AI-assisted analysis of JanDeDobbeleer/oh-my-posh@0976794618 (2026-08-31).
Data as JSON: /api/errors/54e3d0ae230a7431.
Report an issue: GitHub.