From 7194ad7d9ab209104934203f6c2ccd2462c8d13f Mon Sep 17 00:00:00 2001 From: Archmonger Date: Sun, 19 Jul 2026 18:01:27 -0700 Subject: [PATCH 1/2] [fix #2282] Disable packages cache when local wheels are present When local .whl files are specified in the packages list, their dependencies fail to resolve on subsequent page loads because micropip.freeze() stores stale references in IndexedDB. This change automatically sets packages_cache to "never" when local wheels are detected (paths starting with ./, ../, /, emfs://, file://, or URLs ending in .whl). Users can still opt into caching with packages_cache = "all". --- esm/interpreter/pyodide.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/esm/interpreter/pyodide.js b/esm/interpreter/pyodide.js index 1445aee..2a70f1b 100644 --- a/esm/interpreter/pyodide.js +++ b/esm/interpreter/pyodide.js @@ -95,6 +95,15 @@ export default { progress('Loading remote packages'); config.packages = (packages = await _remote_package([config, baseURL], packages)); progress('Loaded remote packages'); + // Detect local wheels: packages that are paths (./ ../ / emfs:// file://) + // or URLs ending in .whl. When local wheels are present, disable IndexedDB + // caching unless the user explicitly sets packages_cache = "all". + // See https://github.com/pyscript/pyscript/issues/2282 + if (packages && packages.some(pkg => /^(?:\.{1,2}\/|\/|emfs:\/\/|file:\/\/)/.test(pkg) || /\.whl(?:\?|$)/.test(pkg))) { + if (config.packages_cache !== 'all') { + config.packages_cache = 'never'; + } + } } progress('Loading Storage'); const indexURL = url.slice(0, url.lastIndexOf('/')); From bae3af10a96c1946d1a35810bfbb3efb7503faea Mon Sep 17 00:00:00 2001 From: Archmonger Date: Wed, 22 Jul 2026 17:26:27 -0700 Subject: [PATCH 2/2] simplify regex per review feedback: (?:emfs|file)::\/\/ to avoid repetition --- esm/interpreter/pyodide.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esm/interpreter/pyodide.js b/esm/interpreter/pyodide.js index 2a70f1b..b973490 100644 --- a/esm/interpreter/pyodide.js +++ b/esm/interpreter/pyodide.js @@ -99,7 +99,7 @@ export default { // or URLs ending in .whl. When local wheels are present, disable IndexedDB // caching unless the user explicitly sets packages_cache = "all". // See https://github.com/pyscript/pyscript/issues/2282 - if (packages && packages.some(pkg => /^(?:\.{1,2}\/|\/|emfs:\/\/|file:\/\/)/.test(pkg) || /\.whl(?:\?|$)/.test(pkg))) { + if (packages && packages.some(pkg => /^(?:\.{1,2}\/|\/|(?:emfs|file):\/\/)/.test(pkg) || /\.whl(?:\?|$)/.test(pkg))) { if (config.packages_cache !== 'all') { config.packages_cache = 'never'; }