Skip to content

"Failed to create conda environment" after the env is actually created — conda info --envs --json no longer returns envs_dirs (conda 26.x) #1766

Description

Environment

Extension ms-python.vscode-python-envs 1.36.0
VS Code 1.136.1 (Windows 11, 10.0.26200)
conda 26.7.2 (miniforge3)

Steps to reproduce

  1. Python: Create Environment → Conda → Named (with an English display language).
  2. Pick a Python version, enter a name (test).

Actual

conda itself succeeds — the output channel shows the whole transaction completing:

Preparing transaction: ...working... done
Verifying transaction: ...working... done
Executing transaction: ...working... done
#
# To activate this environment, use
#
#     $ conda activate test

and then the extension fails:

[info]    Using conda from cache: C:\Users\...\miniforge3\Library\bin\conda.BAT
[info]    Ran conda in 697: C:\Users\...\miniforge3\Library\bin\conda.BAT info --envs --json
[warning] conda info envs_dirs is undefined/null
[error]   Failed to create conda environment A system error occurred
          (ENOENT: no such file or directory, scandir
           'C:\Users\...\AppData\Local\Programs\Microsoft VS Code\conda-meta')

The environment is created and fully usable. Only the post-creation prefix lookup fails — but the user is shown Failed to create conda environment, which reads as though nothing was created.

Cause

The env-dirs helper calls conda info --envs --json and reads envs_dirs from it:

const e = await H(["info", "--envs", "--json"]);
const t = JSON.parse(e);
const n = t.envs_dirs;
return null == n
    ? (traceWarn("conda info envs_dirs is undefined/null"), { envs_dirs: [] })
    : Array.isArray(n)
    ? { envs_dirs: n }
    : { envs_dirs: [] };

As of conda 26.x, conda info --envs --json returns only envs and envs_details. envs_dirs is present only in the unfiltered conda info --json:

$ conda info --envs --json
{
  "envs": [
    "C:\\Users\\...\\miniforge3",
    "C:\\Users\\...\\miniforge3\\envs\\test",
    ...
  ],
  "envs_details": { ... }
}
# no envs_dirs key

$ conda info --json | findstr envs_dirs
  "envs_dirs": [ ... ]

So envs_dirs becomes []. The empty list makes the subsequent prefix search join an empty base path, and conda-meta ends up resolved relative to the process cwd — VS Code's own install directory — which is the ENOENT above.

Aggravating factor

The empty result is cached, and the cache-hit check accepts an empty array:

const n = await e.get(CONDA_PREFIXES_KEY);
if (n && Array.isArray(n)) return j = n, j;   // [] passes this check
...
j = n.envs_dirs;                              // []
await e.set(CONDA_PREFIXES_KEY, ...);         // and gets cached

Once it has failed, the bad [] is served from cache on later attempts, so the failure persists until the cache is cleared.

Suggested fix

  • Read envs_dirs from conda info --json (or conda config --show envs_dirs --json) instead of conda info --envs --json.
  • Better still, derive the new environment's prefix from the envs array that the same response already returns — it contains the full path of the environment that was just created.
  • Treat an empty envs_dirs as a failure rather than a value: don't cache it, and require a non-empty array on the cache-hit path.

Activity

  1. eleanorjboyd commented on Sep 23, 2026

    @eleanorjboyd
    Member

    🤖 Thanks for the detailed report. I confirmed the root cause against v1.36.0: getPrefixes() reads envs_dirs from conda info --envs --json and accepts/caches an empty prefix list. This was already addressed in #1643, merged July 22: the code on main reads full conda info --json, treats an empty cached list as stale, and has regression tests for both cases. The named-environment creation flow was updated there as well.

    The timing explains the report: v1.36.0 was published June 18, before #1643, and is still the latest published stable release. So this is a valid bug in 1.36.0, but it does not need another PR for the described envs_dirs issue. Please try a build containing #1643 when available; if it still fails, share the new output-channel log and the conda info --json envs_dirs field so we can investigate a distinct remaining failure. Closing as fixed in main, not claiming it is fixed in 1.36.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIssue identified by VS Code Team member as probable buginfo-neededIssue requires more information from poster

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions