microsoft / microsoft/vscode-python-environments

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

Open
#1,766 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

triage-needed
Dominant language
TypeScript
Stars
138
Forks
62
Avg merge
1d 4h
Merged PRs (30d)
35

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:

```js
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`:

```console
$ 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:

```js
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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating the env-dirs helper and the CONDA_PREFIXES_KEY cache-hit and cache-write paths described in the issue. Compare the conda info --envs --json response with the unfiltered response, then verify that creating an environment resolves its prefix successfully, avoids caching an empty envs_dirs value, and no longer reports a false failure.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript, vscode
Domain
developer-experience, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.