diff --git a/packages/kernel/src/kernel.ts b/packages/kernel/src/kernel.ts index 6df50d738..ffac307c2 100644 --- a/packages/kernel/src/kernel.ts +++ b/packages/kernel/src/kernel.ts @@ -297,11 +297,15 @@ export class StliteKernel { }); } - public install(requirements: string[]): Promise { + public install( + requirements: string[], + options?: { indexUrls?: string[] }, + ): Promise { return this._asyncPostMessage({ type: "install", data: { requirements, + indexUrls: options?.indexUrls, }, }); } diff --git a/packages/kernel/src/types.ts b/packages/kernel/src/types.ts index fb3cbb455..e394e722a 100644 --- a/packages/kernel/src/types.ts +++ b/packages/kernel/src/types.ts @@ -119,6 +119,7 @@ export interface InMessageInstall extends InMessageBase { type: "install"; data: { requirements: string[]; + indexUrls?: string[]; }; } export type InMessage = diff --git a/packages/kernel/src/worker-runtime.ts b/packages/kernel/src/worker-runtime.ts index 6593ee56c..dd53283b6 100644 --- a/packages/kernel/src/worker-runtime.ts +++ b/packages/kernel/src/worker-runtime.ts @@ -584,14 +584,20 @@ prepare(main_script_path, args) break; } case "install": { - const { requirements: unvalidatedRequirements } = msg.data; + const { requirements: unvalidatedRequirements, indexUrls = null } = + msg.data; const micropip = pyodide.pyimport("micropip"); const requirements = validateRequirements(unvalidatedRequirements); // Blocks the not allowed wheel URL schemes. - console.debug("Install the requirements:", requirements); + console.debug("Install the requirements:", requirements, { + indexUrls, + }); await micropip.install - .callKwargs(requirements, { keep_going: true }) + .callKwargs(requirements, { + keep_going: true, + index_urls: indexUrls, + }) .then(() => { console.debug("Successfully installed"); reply({ diff --git a/packages/mountable/src/index.tsx b/packages/mountable/src/index.tsx index 16ae0ed6f..5b6daf1be 100644 --- a/packages/mountable/src/index.tsx +++ b/packages/mountable/src/index.tsx @@ -57,8 +57,8 @@ export function mount( kernel.dispose(); ReactDOM.unmountComponentAtNode(container); }, - install: (requirements: string[]) => { - return kernelWithToast.install(requirements); + install: (requirements: string[], options?: { indexUrls?: string[] }) => { + return kernelWithToast.install(requirements, options); }, writeFile: ( path: string,