diff --git a/extensions/notebook/src/jupyter/jupyterServerInstallation.ts b/extensions/notebook/src/jupyter/jupyterServerInstallation.ts index 1924e26415..ba0e5ce8c1 100644 --- a/extensions/notebook/src/jupyter/jupyterServerInstallation.ts +++ b/extensions/notebook/src/jupyter/jupyterServerInstallation.ts @@ -83,6 +83,12 @@ export const requiredJupyterPkg: PythonPkgDetails = { version: '1.0.0' }; +export const requiredNotebookPkg: PythonPkgDetails = { + name: 'notebook', + version: '6.5.5', + installExactVersion: true +}; + export const requiredPowershellPkg: PythonPkgDetails = { name: 'powershell-kernel', version: '0.1.4' @@ -143,11 +149,11 @@ export class JupyterServerInstallation implements IJupyterServerInstallation { this._kernelSetupCache = new Map(); this._requiredKernelPackages = new Map(); - this._requiredKernelPackages.set(constants.ipykernelDisplayName, [requiredJupyterPkg]); - this._requiredKernelPackages.set(constants.python3DisplayName, [requiredJupyterPkg]); - this._requiredKernelPackages.set(constants.powershellDisplayName, [requiredJupyterPkg, requiredPowershellPkg]); + this._requiredKernelPackages.set(constants.ipykernelDisplayName, [requiredJupyterPkg, requiredNotebookPkg]); + this._requiredKernelPackages.set(constants.python3DisplayName, [requiredJupyterPkg, requiredNotebookPkg]); + this._requiredKernelPackages.set(constants.powershellDisplayName, [requiredJupyterPkg, requiredPowershellPkg, requiredNotebookPkg]); - let allPackages = [requiredJupyterPkg, requiredPowershellPkg]; + let allPackages = [requiredJupyterPkg, requiredNotebookPkg, requiredPowershellPkg]; this._requiredKernelPackages.set(constants.allKernelsName, allPackages); this._requiredPackagesSet = new Set(); @@ -542,7 +548,7 @@ export class JupyterServerInstallation implements IJupyterServerInstallation { let requiredPackages = this.getRequiredPackagesForKernel(kernelDisplayName); for (let pkg of requiredPackages) { let installedVersion = installedPackageMap.get(pkg.name); - if (!installedVersion || utils.compareVersions(installedVersion, pkg.version) < 0) { + if (!installedVersion || utils.compareVersions(installedVersion, pkg.version) < 0 || (pkg.installExactVersion && installedVersion !== pkg.version)) { return false; } } @@ -563,7 +569,7 @@ export class JupyterServerInstallation implements IJupyterServerInstallation { packages.forEach(pkg => { let installedPkgVersion = pipVersionMap.get(pkg.name); - if (!installedPkgVersion || utils.compareVersions(installedPkgVersion, pkg.version) < 0) { + if (!installedPkgVersion || utils.compareVersions(installedPkgVersion, pkg.version) < 0 || (pkg.installExactVersion && installedPkgVersion !== pkg.version)) { packagesToInstall.push(pkg); } }); diff --git a/extensions/notebook/src/test/python/jupyterInstallation.test.ts b/extensions/notebook/src/test/python/jupyterInstallation.test.ts index a08bd31c25..04f34f60de 100644 --- a/extensions/notebook/src/test/python/jupyterInstallation.test.ts +++ b/extensions/notebook/src/test/python/jupyterInstallation.test.ts @@ -11,7 +11,7 @@ import * as uuid from 'uuid'; import * as fs from 'fs-extra'; import * as request from 'request'; import * as utils from '../../common/utils'; -import { requiredJupyterPkg, JupyterServerInstallation, requiredPowershellPkg, PythonInstallSettings, PythonPkgDetails } from '../../jupyter/jupyterServerInstallation'; +import { requiredJupyterPkg, JupyterServerInstallation, requiredPowershellPkg, PythonInstallSettings, PythonPkgDetails, requiredNotebookPkg } from '../../jupyter/jupyterServerInstallation'; import { powershellDisplayName, python3DisplayName, winPlatform } from '../../common/constants'; describe('Jupyter Server Installation', function () { @@ -226,12 +226,12 @@ describe('Jupyter Server Installation', function () { it('Get required packages test - Python 3 kernel', async function () { let packages = installation.getRequiredPackagesForKernel(python3DisplayName); - should(packages).be.deepEqual([requiredJupyterPkg]); + should(packages).be.deepEqual([requiredJupyterPkg, requiredNotebookPkg]); }); it('Get required packages test - Powershell kernel', async function () { let packages = installation.getRequiredPackagesForKernel(powershellDisplayName); - should(packages).be.deepEqual([requiredJupyterPkg, requiredPowershellPkg]); + should(packages).be.deepEqual([requiredJupyterPkg, requiredPowershellPkg, requiredNotebookPkg]); }); it('Install python test - Run install while Python is already running', async function () {