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

  1. Run `pyenv global 3.x.y` (or create a .python-version in the project) so version-name has something to report.
  2. Run `pyenv version-name` manually in the affected directory and check its output is a plain version string.
  3. Reinstall/repair pyenv if version-name errors or prints nothing.
  4. 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

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


AI-assisted analysis of JanDeDobbeleer/oh-my-posh@0976794618 (2026-08-31). Data as JSON: /api/errors/54e3d0ae230a7431. Report an issue: GitHub.