Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
window,
} from 'vscode';
import { PythonEnvironment, PythonEnvironmentApi, PythonProjectCreator } from './api';
import { ENVS_EXTENSION_ID } from './common/constants';
import { ENVS_EXTENSION_ID, SYSTEM_MANAGER_ID, VENV_MANAGER_ID } from './common/constants';
import { ensureCorrectVersion } from './common/extVersion';
import { registerLogger, traceError, traceInfo, traceWarn } from './common/logging';
import { clearPersistentState, setPersistentState } from './common/persistentState';
Expand Down Expand Up @@ -547,6 +547,20 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
safeRegister('shellStartupVars', shellStartupVarsMgr.initialize()),
]);

// Pre-warm system and venv manager caches before initial environment selection.
await Promise.all([
(
envManagers.getEnvironmentManager(SYSTEM_MANAGER_ID)?.getEnvironments('all') ?? Promise.resolve()
).catch((err) => {
traceWarn('[pre-warm] System manager cache warm-up failed:', err);
}),
(envManagers.getEnvironmentManager(VENV_MANAGER_ID)?.getEnvironments('all') ?? Promise.resolve()).catch(
(err) => {
traceWarn('[pre-warm] Venv manager cache warm-up failed:', err);
},
),
]);

await applyInitialEnvironmentSelection(envManagers, projectManager, nativeFinder, api);

// Register manager-agnostic terminal watcher for package-modifying commands
Expand Down
5 changes: 5 additions & 0 deletions src/managers/common/nativePythonFinder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,11 @@ class NativePythonFinderImpl implements NativePythonFinder {
1,
'NativeRefresh-task',
);

// Start discovery immediately so the cache is warm before managers call initialize().
void this.refresh(false).catch((err) => {
traceWarn('[pet] Background pre-warm refresh failed:', err);
});
}

public async resolve(executable: string): Promise<NativeEnvInfo> {
Expand Down
Loading