@@ -46,7 +46,6 @@ export function findIndexOfConnectionFile(kernelSpec: Readonly<IJupyterKernelSpe
46
46
// Before returning the IJupyterKernelSpec it makes sure that ipykernel is installed into the kernel spec interpreter
47
47
@injectable ( )
48
48
export class KernelFinder implements IKernelFinder {
49
- private activeInterpreter : PythonInterpreter | undefined ;
50
49
private cache : string [ ] = [ ] ;
51
50
52
51
constructor (
@@ -69,6 +68,7 @@ export class KernelFinder implements IKernelFinder {
69
68
) : Promise < IJupyterKernelSpec > {
70
69
this . cache = await this . readCache ( ) ;
71
70
let foundKernel : IJupyterKernelSpec | undefined ;
71
+ const activeInterpreter = await this . interpreterService . getActiveInterpreter ( resource ) ;
72
72
73
73
if ( kernelName && ! kernelName . includes ( defaultSpecName ) ) {
74
74
let kernelSpec = await this . searchCache ( kernelName ) ;
@@ -77,7 +77,10 @@ export class KernelFinder implements IKernelFinder {
77
77
return kernelSpec ;
78
78
}
79
79
80
- kernelSpec = await this . getKernelSpecFromActiveInterpreter ( resource , kernelName ) ;
80
+ // Check in active interpreter first
81
+ if ( activeInterpreter ) {
82
+ kernelSpec = await this . getKernelSpecFromActiveInterpreter ( kernelName , activeInterpreter ) ;
83
+ }
81
84
82
85
if ( kernelSpec ) {
83
86
this . writeCache ( this . cache ) . ignoreErrors ( ) ;
@@ -98,9 +101,9 @@ export class KernelFinder implements IKernelFinder {
98
101
result = both [ 0 ] ? both [ 0 ] : both [ 1 ] ;
99
102
}
100
103
101
- foundKernel = result ? result : await this . getDefaultKernelSpec ( resource ) ;
104
+ foundKernel = result ? result : await this . getDefaultKernelSpec ( activeInterpreter ) ;
102
105
} else {
103
- foundKernel = await this . getDefaultKernelSpec ( resource ) ;
106
+ foundKernel = await this . getDefaultKernelSpec ( activeInterpreter ) ;
104
107
}
105
108
106
109
this . writeCache ( this . cache ) . ignoreErrors ( ) ;
@@ -139,17 +142,13 @@ export class KernelFinder implements IKernelFinder {
139
142
}
140
143
141
144
private async getKernelSpecFromActiveInterpreter (
142
- resource : Resource ,
143
- kernelName : string
145
+ kernelName : string ,
146
+ activeInterpreter : PythonInterpreter
144
147
) : Promise < IJupyterKernelSpec | undefined > {
145
- this . activeInterpreter = await this . interpreterService . getActiveInterpreter ( resource ) ;
146
-
147
- if ( this . activeInterpreter ) {
148
- return this . getKernelSpecFromDisk (
149
- [ path . join ( this . activeInterpreter . sysPrefix , 'share' , 'jupyter' , 'kernels' ) ] ,
150
- kernelName
151
- ) ;
152
- }
148
+ return this . getKernelSpecFromDisk (
149
+ [ path . join ( activeInterpreter . sysPrefix , 'share' , 'jupyter' , 'kernels' ) ] ,
150
+ kernelName
151
+ ) ;
153
152
}
154
153
155
154
private async findInterpreterPath (
@@ -206,17 +205,13 @@ export class KernelFinder implements IKernelFinder {
206
205
return this . searchCache ( kernelName ) ;
207
206
}
208
207
209
- private async getDefaultKernelSpec ( resource : Resource ) : Promise < IJupyterKernelSpec > {
210
- if ( ! this . activeInterpreter ) {
211
- this . activeInterpreter = await this . interpreterService . getActiveInterpreter ( resource ) ;
212
- }
213
-
208
+ private async getDefaultKernelSpec ( activeInterpreter ?: PythonInterpreter ) : Promise < IJupyterKernelSpec > {
214
209
// This creates a default kernel spec. When launched, 'python' argument will map to using the interpreter
215
210
// associated with the current resource for launching.
216
211
const defaultSpec : Kernel . ISpecModel = {
217
212
name : defaultSpecName + Date . now ( ) . toString ( ) ,
218
213
language : 'python' ,
219
- display_name : this . activeInterpreter ?. displayName ? this . activeInterpreter . displayName : 'Python 3' ,
214
+ display_name : activeInterpreter ?. displayName ? activeInterpreter . displayName : 'Python 3' ,
220
215
metadata : { } ,
221
216
argv : [ 'python' , '-m' , 'ipykernel_launcher' , '-f' , connectionFilePlaceholder ] ,
222
217
env : { } ,
0 commit comments