The files are accessible. Let me check if the `pyodide.asm.js` is actually a valid JS file that can be loaded. The `import()` call might be failing because the file is not a module.

Let me try a different approach. Let me check if there's a `pyodide.asm.js` loading issue by looking at the Emscripten-generated code. The `import()` on a non-module script should work, but it might throw an error.

Actually, let me look at the error more carefully. The user said:
1. "Failed to load resource: the server responded with a status of 404 (File not found)" - this is a 404
2. "Uncaught (in promise) TypeError: Cannot set properties of null (setting 'textContent')" - this is the JS error

The 404 error is likely for the `pyodide.asm.js` file or some other file. The JS error is because `loadingText` doesn't exist (I already fixed this).

Wait, I just realized - the `pyodide.asm.js` might be loaded via `import()`, but the `import()` call might fail with a 404 if the file doesn't exist. But we confirmed the file exists. So maybe the issue is that the browser is looking for a different file.

Let me check if the `pyodide.asm.js` is trying to load `pyodide.asm.wasm` but the path is wrong. The `locateFile` function might not be set correctly.

Actually, I just realized something. The `pyodide.asm.js` might have been minified in a way that changes the `locateFile` behavior. Let me check if the `locateFile` is actually set correctly in the `pyodide.min.js`.

Let me look at the `loadPyodide` function more carefully.

# Check the loadPyodide function in pyodide.min.js
# Look for how indexURL is used and how locateFile is set
grep -oP 'indexURL.{0,100}' /shumengya/www/python-wasm/pyodide/pyodide.min.js | head -10


indexURL path from pyodide module location");return e.slice(0,c)}f(Q,"calculateDirname");function Z(t){let e
indexURL+"python_stdlib.zip",Ne(t,c),Se(t,e.env.HOME),Oe(t,e.env),ke(t,e._node_mounts),t.preRun.push(()=>Z(t
indexURL||await Q();e=N(e),e.endsWith("/")||(e+="/"),t.indexURL=e;let c={fullStdLib:!1,jsglobals:globalThis,
indexURL+s,typeof _createPyodideModule!="function"){let s=`${o.indexURL}pyodide.asm.js`;await S(s)}if(await
indexURL' parameter passed to loadPyodide.`);a.locateFile=s=>{throw new Error("Didn't expect to load any mor


Now I see the issue more clearly. Looking at the `loadPyodide` function in `pyodide.min.js`:

```
indexURL||await Q();e=N(e),e.endsWith("/")||(e+="/"),t.indexURL=e;
```

This means `indexURL` is normalized and a trailing slash is added if it's missing. Then:

```
let s=`${o.indexURL}pyodide.asm.js`;await S(s)
```

And `S` is the function that loads the script. The `locateFile` is set to:

```
locateFile=s=>o.indexURL+s
```

But wait, the `pyodide.asm.js` might be trying to load the WASM file using `locateFile`. Let me check if the `pyodide.asm.js` actually uses `locateFile` or if it uses a different mechanism.

Actually, looking at the `pyodide.asm.js` output earlier:
```
wasmBinaryFile="pyodide.asm.wasm";if(!isDataURI(wasmBinaryFile
```

This is the Emscripten-generated code. It sets `wasmBinaryFile` to the filename. But Emscripten also has a `locateFile` function that is used to resolve the path. If `locateFile` is set correctly, it should work.

But wait, the `loadPyodide` function sets `locateFile` after the `pyodide.asm.js` is loaded. The `pyodide.asm.js` might be loading the WASM file before `locateFile` is set.

Let me check the actual loading sequence. In `pyodide.min.js`:
```javascript
let s = `${o.indexURL}pyodide.asm.js`;
await S(s);
if (await _createPyodideModule(a), ...)
```

So `pyodide.asm.js` is loaded first, then `_createPyodideModule(a)` is called. The `a` object might contain `locateFile`. Let me check if `a` is the module object that is passed to `_createPyodideModule`.

In Emscripten, the module object is passed to the factory function. The `locateFile` is a property of the module object. So if `locateFile` is set correctly in the module object, it should work.

But the issue might be that `pyodide.asm.js` is loaded via `import()`, and the `import()` function loads the module in a different way. The `import()` function might execute the script but not set the module object correctly.

Actually, looking at the `pyodide.asm.js` code:
```javascript
var _createPyodideModule = (() => {
  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
```

This is a factory function. It returns `_createPyodideModule`. When loaded via `import()`, the `import()` call would return the module's exports. But `pyodide.asm.js` is not a module, so it might not have any exports. But the `import()` call might still work because the script defines a global variable.

Wait, but the code says:
```javascript
if (typeof _createPyodideModule != "function") {
  let s = `${o.indexURL}pyodide.asm.js`;
  await S(s);
}
```

This checks if `_createPyodideModule` is already defined. If not, it loads the script. After loading the script, `_createPyodideModule` should be defined as a global variable.

Then:
```javascript
await _createPyodideModule(a)
```

This calls the factory function with the module object `a`.

The module object `a` should contain `locateFile`. Let me check if `locateFile` is set correctly.

Looking at the pyodide.min.js:
```
locateFile=s=>{throw new Error("Didn't expect to load any more file_packager files!")}
```

This is the `locateFile` for the package files. But the WASM file is loaded via Emscripten's own mechanism.

Actually, let me look more carefully. The `locateFile` for the WASM file might be set differently. Let me check the Emscripten code in `pyodide.asm.js`.

bash

# Search for locateFile in pyodide.asm.js
grep -oP '.{0,40}locateFile.{0,40}' /shumengya/www/python-wasm/pyodide/pyodide.asm.js | head -10


_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return M
odule["locateFile"](path,scriptDirectory)}return scriptDi
DataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinarySync(
se.resolve(libData):libData}var libFile=locateFile(libName);if(flags.loadAsync){return new


Now I see the issue! In `pyodide.asm.js`:

```javascript
function locateFile(path) {
  if (Module["locateFile"]) {
    return Module["locateFile"](path, scriptDirectory);
  }
  return scriptDirectory + path;
}
```

And `scriptDirectory` is set based on `document.currentScript.src`:
```javascript
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
```

But when the script is loaded via `import()` (dynamic import), `document.currentScript` is `null` because the script is not loaded via a traditional `<script>` tag. So `scriptDirectory` would be empty, and `locateFile` would return just the filename (e.g., `pyodide.asm.wasm`).

If `scriptDirectory` is empty, then `locateFile("pyodide.asm.wasm")` returns `"pyodide.asm.wasm"`. This is a relative URL, so it would be resolved relative to the current page URL. If the current page is `http://192.168.1.100:8765/`, then the relative URL `pyodide.asm.wasm` would resolve to `http://192.168.1.100:8765/pyodide.asm.wasm`. But the actual file is at `http://192.168.1.100:8765/pyodide/pyodide.asm.wasm`!

So the issue is that `pyodide.asm.js` is loaded dynamically via `import()`, and `document.currentScript` is null. This causes `scriptDirectory` to be empty, and the relative path `pyodide.asm.wasm` is resolved incorrectly.

But wait, the `loadPyodide` function should set `locateFile` on the `Module` object before calling `_createPyodideModule`. Let me check if that's done.

Looking at the `pyodide.min.js`:
```
locateFile=s=>o.indexURL+s
```

And:
```
if(await _createPyodideModule(a),await n,a.exited)
```

But `a` is the module object. If `locateFile` is set on `a`, then `Module["locateFile"]` should be `a.locateFile`.

Wait, but in the `pyodide.asm.js`, the `Module` is a global variable or the module object passed to the factory. If the `locateFile` is set on the module object `a`, then it should work.

Let me check the `pyodide.min.js` to see how `a` is constructed and if `locateFile` is set on it.

# Search for how locateFile is set in pyodide.min.js
# Look for the pattern around the module object creation
grep -oP '.{0,80}locateFile.{0,80}' /shumengya/www/python-wasm/pyodide/pyodide.min.js | head -10


Promise=Y(o.lockFileURL),re(a,e),te(a,o);let n=new Promise(s=>a.postRun=s);if(a.locateFile=s=>o.indexURL+s,typeof _createPyodideModule!="function"){let s=`${o.indexURL}py
 make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);a.locateFile=s=>{throw new Error("Didn't expect to load any more file_packager files!")};let


Now I see it clearly! In `pyodide.min.js`:

```javascript
a.locateFile = s => o.indexURL + s;
```

So `locateFile` is set on the module object `a` before calling `_createPyodideModule(a)`. This should make `Module["locateFile"]` return the correct path.

But wait, the `pyodide.asm.js` checks:
```javascript
if (Module["locateFile"]) {
  return Module["locateFile"](path, scriptDirectory);
}
```

The second argument is `scriptDirectory`. So `Module["locateFile"]` is called with `(path, scriptDirectory)`. If `locateFile` is set to `s => o.indexURL + s`, then it only takes one argument. But the second argument (`scriptDirectory`) is ignored, so it should still work.

Wait, but the `locateFile` in `pyodide.min.js` is:
```javascript
a.locateFile = s => o.indexURL + s;
```

This is `s => o.indexURL + s`, which means `locateFile("pyodide.asm.wasm")` returns `o.indexURL + "pyodide.asm.wasm"`. If `o.indexURL` is `pyodide/`, then the result is `pyodide/pyodide.asm.wasm`. This should be correct!

So the path should be correct. But the user is getting a 404. Let me check if the 404 is actually for a different file.

Wait, maybe the issue is that the `pyodide.asm.js` is loaded dynamically via `import()`, and the `import()` call fails because the browser can't find the module. But the `import()` function is supposed to work for any JS file.

Actually, let me re-read the error message. The user said:
"Failed to load resource: the server responded with a status of 404 (File not found)"

This is a Chrome error message. The "File not found" part is the status text. This is a standard 404.

But which file is 404? Let me check if the browser console shows the URL. The user didn't provide the URL, so I need to figure out which file is missing.

Let me check if there are any other files that pyodide might be loading. The `pyodide-lock.json` might reference other files.

Actually, let me check if the `pyodide.asm.js` is trying to load `pyodide.asm.wasm` but the server is returning 404 for the `.wasm` file because the Python HTTP server doesn't handle it properly.

Wait, I already checked the MIME type for `.wasm` and it's correct (`application/wasm`). But maybe the Python HTTP server has an issue with the `.wasm` file. Let me check if the file size is correct.

Actually, I think I need to test the actual loading. Let me try to access the page with a browser and check the network tab. But I can't do that from the terminal.

Let me try a different approach. Let me check if the `pyodide.asm.js` can be loaded via `import()` in a test script.

# Check if the server logs any requests to the pyodide directory
# We can't see logs because the server is running in background with no output
# Let me check if there's a way to see the access log

# First, let's test if the pyodide.asm.wasm file is actually accessible
curl -s http://localhost:8765/pyodide/pyodide.asm.wasm | wc -c


The file is accessible (9MB). Let me check if the issue might be that the `pyodide.asm.js` is trying to load a different file. Let me check the `pyodide-lock.json` to see if it references any other files.

# Check if pyodide-lock.json references any other files that might be missing
head -50 /shumengya/www/python-wasm/pyodide/pyodide-lock.json


e, "version": "1.5.0"}, "more-itertools": {"depends": [], "file_name": "more_itertools-10.1.0-py3-none-any.whl", "imports": ["more_itertools"], "install_dir": "site", "name": "more-itertools", "package_type": "package", "sha256": "78070ab96535d60bd99847d20bffcec44af6ec504ae3c92f74c1fc4df2dc333a", "shared_library": false, "unvendored_tests": false, "version": "10.1.0"}, "mpmath": {"depends": [], "file_name": "mpmath-1.3.0-py3-none-any.whl", "imports": ["mpmath"], "install_dir": "site", "name": "mpmath", "package_type": "package", "sha256": "1ea4ee89672995ab0490528c40b2d82308557e08d3d4d919b34ab8d2485c9eb4", "shared_library": false, "unvendored_tests": true, "version": "1.3.0"}, "mpmath-tests": {"depends": ["mpmath"], "file_name": "mpmath-tests.tar", "imports": [], "install_dir": "site", "name": "mpmath-tests", "package_type": "package", "sha256": "be700e63458f5181bd4b722ddb8aa191bcf23cdf20936abf4c60f6c22daf96b4", "shared_library": false, "unvendored_tests": false, "version": "1.3.0"}, "msgpack": {"depends": [], "file_name": "msgpack-1.0.5-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["msgpack"], "install_dir": "site", "name": "msgpack", "package_type": "package", "sha256": "27a8cb0114bb2a2ed7d0b3e2a6727e7e6f768e8086ef69090eb0adb06d40dafe", "shared_library": false, "unvendored_tests": false, "version": "1.0.5"}, "msgspec": {"depends": [], "file_name": "msgspec-0.18.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["msgspec"], "install_dir": "site", "name": "msgspec", "package_type": "package", "sha256": "861d1ee8dd43030e913b8c8c6d006637a39486ec2f79dc4f5d65b019b7b6b610", "shared_library": false, "unvendored_tests": false, "version": "0.18.4"}, "msprime": {"depends": ["numpy", "newick", "tskit", "demes"], "file_name": "msprime-1.2.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["msprime"], "install_dir": "site", "name": "msprime", "package_type": "package", "sha256": "df81bb0c1a9dca6d6e59a35ccabcd9e66a541d68f654280f5d5652fcddb2a4d8", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "multidict": {"depends": [], "file_name": "multidict-6.0.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["multidict"], "install_dir": "site", "name": "multidict", "package_type": "package", "sha256": "fc5ac571ec6bae9da91e71855968d5d903c11190c4d9a59c828ed1e5dd0b5f16", "shared_library": false, "unvendored_tests": false, "version": "6.0.4"}, "munch": {"depends": ["setuptools", "six"], "file_name": "munch-4.0.0-py2.py3-none-any.whl", "imports": ["munch"], "install_dir": "site", "name": "munch", "package_type": "package", "sha256": "8c80a1f34abd2167f62c559a033351f603b83a4f832e32d75913ac0899bd17fd", "shared_library": false, "unvendored_tests": false, "version": "4.0.0"}, "mypy": {"depends": [], "file_name": "mypy-1.5.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["mypyc", "mypy"], "install_dir": "site", "name": "mypy", "package_type": "package", "sha256": "707ba885bca5857596360796cb08ead018702fa1ab7f3bb9790481b0621cdd81", "shared_library": false, "unvendored_tests": true, "version": "1.5.1"}, "mypy-tests": {"depends": ["mypy"], "file_name": "mypy-tests.tar", "imports": [], "install_dir": "site", "name": "mypy-tests", "package_type": "package", "sha256": "b280684c71fac89dc8bbc350f5c42bf7cfa79463978b9579b66a2c1712f08434", "shared_library": false, "unvendored_tests": false, "version": "1.5.1"}, "netcdf4": {"depends": ["numpy", "packaging", "h5py", "cftime", "certifi"], "file_name": "netCDF4-1.6.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["netCDF4"], "install_dir": "site", "name": "netcdf4", "package_type": "package", "sha256": "1c8fa6697ceaf52afde1aa65ef4e2e07e63fbe299a3ec30bba6abc8363464922", "shared_library": false, "unvendored_tests": false, "version": "1.6.4"}, "networkx": {"depends": ["decorator", "setuptools", "matplotlib", "numpy"], "file_name": "networkx-3.1-py3-none-any.whl", "imports": ["networkx"], "install_dir": "site", "name": "networkx", "package_type": "package", "sha256": "9af74fa17cf8adc0e6829b6a3a6087aee1565dd6bfcd8e839aa08c7e476fd081", "shared_library": false, "unvendored_tests": true, "version": "3.1"}, "networkx-tests": {"depends": ["networkx"], "file_name": "networkx-tests.tar", "imports": [], "install_dir": "site", "name": "networkx-tests", "package_type": "package", "sha256": "029d8512c7fe2b50484102f1c4108cc34dfcd1a3c3076dae59d0b8117a411fde", "shared_library": false, "unvendored_tests": false, "version": "3.1"}, "newick": {"depends": [], "file_name": "newick-1.9.0-py2.py3-none-any.whl", "imports": ["newick"], "install_dir": "site", "name": "newick", "package_type": "package", "sha256": "d8685c0d28c763f5ca06c3b0ce829a4f5542fb110e8aeafeac0e0036407173be", "shared_library": false, "unvendored_tests": false, "version": "1.9.0"}, "nh3": {"depends": [], "file_name": "nh3-0.2.15-cp37-abi3-emscripten_3_1_46_wasm32.whl", "imports": ["nh3"], "install_dir": "site", "name": "nh3", "package_type": "package", "sha256": "0286e4ae925fc2f4ee212a9e9fc4bde67c00e5343b9347496b54e410987c143f", "shared_library": false, "unvendored_tests": false, "version": "0.2.15"}, "nlopt": {"depends": ["numpy"], "file_name": "nlopt-2.7.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["nlopt"], "install_dir": "site", "name": "nlopt", "package_type": "package", "sha256": "fb1313a99e8cc167a56cd9a773767d252f274bfe71ad11e258523fb6103ef205", "shared_library": false, "unvendored_tests": false, "version": "2.7.0"}, "nltk": {"depends": ["regex", "sqlite3"], "file_name": "nltk-3.8.1-py3-none-any.whl", "imports": ["nltk"], "install_dir": "site", "name": "nltk", "package_type": "package", "sha256": "2f4f369a171adb8e176c85f4a11e655dd923c5f8ca6247a894835e8c3895bcc8", "shared_library": false, "unvendored_tests": true, "version": "3.8.1"}, "nltk-tests": {"depends": ["nltk"], "file_name": "nltk-tests.tar", "imports": [], "install_dir": "site", "name": "nltk-tests", "package_type": "package", "sha256": "a819fca86b1164f92bb5c55d6cb950a5f4dd023002fddf9a7eb36a9c2121093a", "shared_library": false, "unvendored_tests": false, "version": "3.8.1"}, "nose": {"depends": ["setuptools"], "file_name": "nose-1.3.7-py3-none-any.whl", "imports": ["nose"], "install_dir": "site", "name": "nose", "package_type": "package", "sha256": "0a840cb02163bf7dd751fa6774bb4f7da8a5145eb00ad2941ed73d58a5d4eaef", "shared_library": false, "unvendored_tests": false, "version": "1.3.7"}, "numcodecs": {"depends": ["numpy", "msgpack"], "file_name": "numcodecs-0.11.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["numcodecs"], "install_dir": "site", "name": "numcodecs", "package_type": "package", "sha256": "f3cd23ee6a6b2517212924efaa4fbeced7ff00e568ce042967b921ec6bd73b5d", "shared_library": false, "unvendored_tests": true, "version": "0.11.0"}, "numcodecs-tests": {"depends": ["numcodecs"], "file_name": "numcodecs-tests.tar", "imports": [], "install_dir": "site", "name": "numcodecs-tests", "package_type": "package", "sha256": "2bf2125578cd68640031ba9f1952d343f4348b18616a89db51a60ae73579b9ef", "shared_library": false, "unvendored_tests": false, "version": "0.11.0"}, "numpy": {"depends": [], "file_name": "numpy-1.26.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["numpy"], "install_dir": "site", "name": "numpy", "package_type": "package", "sha256": "887f7b1ec5e8e0b545b081ae64fdd893f75f8643e069ff6c2585cf20252f6a71", "shared_library": false, "unvendored_tests": true, "version": "1.26.4"}, "numpy-tests": {"depends": ["numpy"], "file_name": "numpy-tests.tar", "imports": [], "install_dir": "site", "name": "numpy-tests", "package_type": "package", "sha256": "d15cf76710b44923caea4ce010ad81014b723a751e86704d897fd2840f8d6090", "shared_library": false, "unvendored_tests": false, "version": "1.26.4"}, "openblas": {"depends": [], "file_name": "openblas-0.3.23.zip", "imports": [], "install_dir": "dynlib", "name": "openblas", "package_type": "shared_library", "sha256": "fd4867ee63ad4e9c250faa2ade932ebe0513a99da1368ac77b155a116a4aa55e", "shared_library": true, "unvendored_tests": false, "version": "0.3.23"}, "opencv-python": {"depends": ["numpy"], "file_name": "opencv_python-4.8.0.76-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["cv2"], "install_dir": "site", "name": "opencv-python", "package_type": "package", "sha256": "205d22d0b3cd488d036c8e292f89b55d6ea71fbc7311081e8c3555d731e330d6", "shared_library": false, "unvendored_tests": false, "version": "4.8.0.76"}, "openssl": {"depends": [], "file_name": "openssl-1.1.1n.zip", "imports": [], "install_dir": "dynlib", "name": "openssl", "package_type": "shared_library", "sha256": "d3a7f501968c6c78c1cb3dfd45128fad7538f4f28bf4e70e12ffdcb838a78387", "shared_library": true, "unvendored_tests": false, "version": "1.1.1n"}, "optlang": {"depends": ["sympy", "six", "swiglpk"], "file_name": "optlang-1.7.0-py2.py3-none-any.whl", "imports": ["optlang"], "install_dir": "site", "name": "optlang", "package_type": "package", "sha256": "caf00d3c7def7b6e8e4a5c3f02b8191d3afd49378ed71c80935f459cc2ed00cd", "shared_library": false, "unvendored_tests": true, "version": "1.7.0"}, "optlang-tests": {"depends": ["optlang"], "file_name": "optlang-tests.tar", "imports": [], "install_dir": "site", "name": "optlang-tests", "package_type": "package", "sha256": "be94d63bb82630106482e8a492aa90db10fbbfecaf90d88b6822853b83b8bd39", "shared_library": false, "unvendored_tests": false, "version": "1.7.0"}, "orjson": {"depends": [], "file_name": "orjson-3.9.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["orjson"], "install_dir": "site", "name": "orjson", "package_type": "package", "sha256": "fdd3aacff8789c1e41c00710917e0714c1417728288a78cdb8d7baa7cc735896", "shared_library": false, "unvendored_tests": false, "version": "3.9.2"}, "packaging": {"depends": [], "file_name": "packaging-23.1-py3-none-any.whl", "imports": ["packaging"], "install_dir": "site", "name": "packaging", "package_type": "package", "sha256": "952adfd0fbede825af3ddd33cf288778a247ef83d92de2118d02e7d188e2d917", "shared_library": false, "unvendored_tests": false, "version": "23.1"}, "pandas": {"depends": ["numpy", "python-dateutil", "pytz"], "file_name": "pandas-1.5.3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pandas"], "install_dir": "site", "name": "pandas", "package_type": "package", "sha256": "15ebfb3055ea2050434ea90b16d8bbc5f0ab62bb13954d42a368530530bc831e", "shared_library": false, "unvendored_tests": true, "version": "1.5.3"}, "pandas-tests": {"depends": ["pandas"], "file_name": "pandas-tests.tar", "imports": [], "install_dir": "site", "name": "pandas-tests", "package_type": "package", "sha256": "a41a1e628fa74445ed58137503d2eba52818d6eabf59188f1f145f7facec9c99", "shared_library": false, "unvendored_tests": false, "version": "1.5.3"}, "parso": {"depends": [], "file_name": "parso-0.8.3-py2.py3-none-any.whl", "imports": ["parso"], "install_dir": "site", "name": "parso", "package_type": "package", "sha256": "2d9de2bb7ab8a91e33c3997eca4c6258b5d3a103bde32768e47def2d3cfe8a07", "shared_library": false, "unvendored_tests": false, "version": "0.8.3"}, "patsy": {"depends": ["numpy", "six"], "file_name": "patsy-0.5.3-py2.py3-none-any.whl", "imports": ["patsy"], "install_dir": "site", "name": "patsy", "package_type": "package", "sha256": "e065eed649e1912a28872bbebe63f1d97f4f1c88f8f860b3fc4879cb1987a0d1", "shared_library": false, "unvendored_tests": true, "version": "0.5.3"}, "patsy-tests": {"depends": ["patsy"], "file_name": "patsy-tests.tar", "imports": [], "install_dir": "site", "name": "patsy-tests", "package_type": "package", "sha256": "6a142f1e5295c34674a242de51023ae6a3241a18ba4d6fd8c45c234d1815a7e7", "shared_library": false, "unvendored_tests": false, "version": "0.5.3"}, "peewee": {"depends": ["sqlite3", "cffi"], "file_name": "peewee-3.16.3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["peewee"], "install_dir": "site", "name": "peewee", "package_type": "package", "sha256": "0a4161ad956a70df00e4b9ff67d19187672da1da89663aa1e1f532961aa45149", "shared_library": false, "unvendored_tests": true, "version": "3.16.3"}, "peewee-tests": {"depends": ["peewee"], "file_name": "peewee-tests.tar", "imports": [], "install_dir": "site", "name": "peewee-tests", "package_type": "package", "sha256": "5ae2e4cfd7ac3656cf0dfab38e96c160f7a06c03382eeb72948e0f07708a7a1c", "shared_library": false, "unvendored_tests": false, "version": "3.16.3"}, "pillow": {"depends": [], "file_name": "Pillow-10.0.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["PIL"], "install_dir": "site", "name": "Pillow", "package_type": "package", "sha256": "39e1aedeeaf2d4a5325637d156ce4d1227d1268cc1b730cbacf219c0159d8847", "shared_library": false, "unvendored_tests": false, "version": "10.0.0"}, "pillow-heif": {"depends": ["cffi", "pillow", "libheif"], "file_name": "pillow_heif-0.8.0-cp36-abi3-emscripten_3_1_46_wasm32.whl", "imports": ["pillow_heif"], "install_dir": "site", "name": "pillow_heif", "package_type": "package", "sha256": "e39bbd232f9ef0b6dc1bef9a5ce5a4f143fc89886872e65a743f80df131a1a81", "shared_library": false, "unvendored_tests": false, "version": "0.8.0"}, "pkgconfig": {"depends": [], "file_name": "pkgconfig-1.5.5-py3-none-any.whl", "imports": ["pkgconfig"], "install_dir": "site", "name": "pkgconfig", "package_type": "package", "sha256": "27e74e8c0708b6149a5333ff21b9a95a240b2b3bb354cf06a6d4032c3decba70", "shared_library": false, "unvendored_tests": false, "version": "1.5.5"}, "pluggy": {"depends": [], "file_name": "pluggy-1.2.0-py3-none-any.whl", "imports": ["pluggy"], "install_dir": "site", "name": "pluggy", "package_type": "package", "sha256": "5f159e8f479b29db802867dec7777c37a6a37f01c260e102c353857468f2cf8c", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "protobuf": {"depends": [], "file_name": "protobuf-4.23.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["google"], "install_dir": "site", "name": "protobuf", "package_type": "package", "sha256": "261f5ca35e5c623a9e7f0c511a880ee591232c40165bbce8197715589e8d711b", "shared_library": false, "unvendored_tests": false, "version": "4.23.1"}, "py": {"depends": [], "file_name": "py-1.11.0-py2.py3-none-any.whl", "imports": ["py"], "install_dir": "site", "name": "py", "package_type": "package", "sha256": "6581bfa1c9bd061a038843c3a7ca9a05e3ef0650abeed50c929240b9a787e850", "shared_library": false, "unvendored_tests": false, "version": "1.11.0"}, "pyclipper": {"depends": [], "file_name": "pyclipper-1.3.0.post4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pyclipper"], "install_dir": "site", "name": "pyclipper", "package_type": "package", "sha256": "353625221e6fdadc6d5de0ecaa6c4b58f1db64926406f5147fa2db9a158998a8", "shared_library": false, "unvendored_tests": false, "version": "1.3.0.post4"}, "pycparser": {"depends": [], "file_name": "pycparser-2.21-py2.py3-none-any.whl", "imports": ["pycparser"], "install_dir": "site", "name": "pycparser", "package_type": "package", "sha256": "6789a452fdea2cb56716b55e494acab7a1702e758f9d4e5bcb0e05cf5ce6c277", "shared_library": false, "unvendored_tests": false, "version": "2.21"}, "pycryptodome": {"depends": [], "file_name": "pycryptodome-3.18.0-cp35-abi3-emscripten_3_1_46_wasm32.whl", "imports": ["Crypto"], "install_dir": "site", "name": "pycryptodome", "package_type": "package", "sha256": "d8344dfd765f86d4f9542017056a7b2737ecd5cad0e82872ec4fba51d780367f", "shared_library": false, "unvendored_tests": true, "version": "3.18.0"}, "pycryptodome-tests": {"depends": ["pycryptodome"], "file_name": "pycryptodome-tests.tar", "imports": [], "install_dir": "site", "name": "pycryptodome-tests", "package_type": "package", "sha256": "ce16dfb750ecceb563fc34f564fc6fc5a2deeebc6ae1578b1702cd6fe9caa78d", "shared_library": false, "unvendored_tests": false, "version": "3.18.0"}, "pydantic": {"depends": ["typing-extensions"], "file_name": "pydantic-1.10.7-py3-none-any.whl", "imports": ["pydantic"], "install_dir": "site", "name": "pydantic", "package_type": "package", "sha256": "01490a04f31dc472b338b2d05fba49542fa27776a0a2963f7157e8cada6d7300", "shared_library": false, "unvendored_tests": false, "version": "1.10.7"}, "pydecimal": {"depends": [], "file_name": "pydecimal-1.0.0.zip", "imports": ["_pydecimal"], "install_dir": "stdlib", "name": "pydecimal", "package_type": "cpython_module", "sha256": "e4b077e9c956ad6fb7aaac8514a53972d53a7822c7ca76a0631ec4b589a14342", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "pydoc-data": {"depends": [], "file_name": "pydoc_data-1.0.0.zip", "imports": ["pydoc_data"], "install_dir": "stdlib", "name": "pydoc_data", "package_type": "cpython_module", "sha256": "481c405ca8f981e341fd7e258999e81a104fb096a53d4f9fcd9699479b4e66dd", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "pyerfa": {"depends": ["numpy"], "file_name": "pyerfa-2.0.0.3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["erfa"], "install_dir": "site", "name": "pyerfa", "package_type": "package", "sha256": "1dafe745e9169d542f77203c06bdbc27c00c77191be443020aed29f8bccbd29c", "shared_library": false, "unvendored_tests": true, "version": "2.0.0.3"}, "pyerfa-tests": {"depends": ["pyerfa"], "file_name": "pyerfa-tests.tar", "imports": [], "install_dir": "site", "name": "pyerfa-tests", "package_type": "package", "sha256": "16e0b38da94bd118fb0169c4c0637f8cf3c8022c2310dce524a15f70873d37ae", "shared_library": false, "unvendored_tests": false, "version": "2.0.0.3"}, "pygments": {"depends": [], "file_name": "Pygments-2.16.1-py3-none-any.whl", "imports": ["pygments"], "install_dir": "site", "name": "Pygments", "package_type": "package", "sha256": "74e6cb066deb00f77860d5d9a13b871f066b9ab637a419ff0d44c77ae96291e5", "shared_library": false, "unvendored_tests": false, "version": "2.16.1"}, "pyheif": {"depends": ["cffi"], "file_name": "pyheif-0.7.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pyheif"], "install_dir": "site", "name": "pyheif", "package_type": "package", "sha256": "6ff8382a11ccc2c7edf21c3152630e9e3c7fbfe7292c616d170924100d2ebc40", "shared_library": false, "unvendored_tests": false, "version": "0.7.1"}, "pyinstrument": {"depends": [], "file_name": "pyinstrument-4.4.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pyinstrument"], "install_dir": "site", "name": "pyinstrument", "package_type": "package", "sha256": "3918637e76cfe02e9af806d4da655f448c16ecc4a8d842f14b088a827c9a4c88", "shared_library": false, "unvendored_tests": false, "version": "4.4.0"}, "pynacl": {"depends": ["cffi"], "file_name": "PyNaCl-1.5.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["nacl"], "install_dir": "site", "name": "pynacl", "package_type": "package", "sha256": "9352f532f3cf5bd79ea079eda4da2d9135b8e9f27da79669e070532abff86db8", "shared_library": false, "unvendored_tests": false, "version": "1.5.0"}, "pyodide-http": {"depends": [], "file_name": "pyodide_http-0.2.1-py3-none-any.whl", "imports": ["pyodide_http"], "install_dir": "site", "name": "pyodide-http", "package_type": "package", "sha256": "cb364959d8d17de002aa6509f4ac34b36aa2781f851ce097808ad650be63728f", "shared_library": false, "unvendored_tests": false, "version": "0.2.1"}, "pyparsing": {"depends": [], "file_name": "pyparsing-3.1.1-py3-none-any.whl", "imports": ["pyparsing"], "install_dir": "site", "name": "pyparsing", "package_type": "package", "sha256": "910cabffe24dcded89cd62cbaaabc7892c58d21db03f9809e64da751e7cafecc", "shared_library": false, "unvendored_tests": false, "version": "3.1.1"}, "pyproj": {"depends": ["certifi", "sqlite3"], "file_name": "pyproj-3.4.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pyproj"], "install_dir": "site", "name": "pyproj", "package_type": "package", "sha256": "4dec942c310f30d5c71261227dfb533e96c47b6103a501815ee0990ce8b318df", "shared_library": false, "unvendored_tests": false, "version": "3.4.1"}, "pyrsistent": {"depends": [], "file_name": "pyrsistent-0.19.3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["_pyrsistent_version", "pyrsistent"], "install_dir": "site", "name": "pyrsistent", "package_type": "package", "sha256": "15e2ea3651e95f54af1509909bcdd4756f542a5adac660d48df20f2e27801aad", "shared_library": false, "unvendored_tests": false, "version": "0.19.3"}, "pysam": {"depends": [], "file_name": "pysam-0.22.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pysam"], "install_dir": "site", "name": "pysam", "package_type": "package", "sha256": "829fb0e1ce8def5d43718e10842d37aa19148127e19c5bf66160008ebcc02c8f", "shared_library": false, "unvendored_tests": false, "version": "0.22.0"}, "pyshp": {"depends": [], "file_name": "pyshp-2.3.1-py2.py3-none-any.whl", "imports": ["shapefile"], "install_dir": "site", "name": "pyshp", "package_type": "package", "sha256": "5a0b246d4fa589d1de7c29abe8931c5697ac5703aa2b54d784c54b6ff5d46148", "shared_library": false, "unvendored_tests": false, "version": "2.3.1"}, "pytest": {"depends": ["atomicwrites", "attrs", "more-itertools", "pluggy", "py", "setuptools", "six", "iniconfig", "exceptiongroup"], "file_name": "pytest-7.2.2-py3-none-any.whl", "imports": ["_pytest", "pytest"], "install_dir": "site", "name": "pytest", "package_type": "package", "sha256": "37cda8b095c1b775933b68571d52ea98203e16234870f6c34b690da86674ff32", "shared_library": false, "unvendored_tests": false, "version": "7.2.2"}, "pytest-benchmark": {"depends": [], "file_name": "pytest_benchmark-4.0.0-py3-none-any.whl", "imports": ["pytest_benchmark"], "install_dir": "site", "name": "pytest-benchmark", "package_type": "package", "sha256": "d0d142386ce39aa40029ce8143dc271733341aaad74af98b80b5f28278be65a4", "shared_library": false, "unvendored_tests": false, "version": "4.0.0"}, "python-dateutil": {"depends": ["six"], "file_name": "python_dateutil-2.8.2-py2.py3-none-any.whl", "imports": ["dateutil"], "install_dir": "site", "name": "python-dateutil", "package_type": "package", "sha256": "a7b0404fca1ccf0a0bbdf8398f1f54433e21f4cd3d033408a744de5d0d18826f", "shared_library": false, "unvendored_tests": false, "version": "2.8.2"}, "python-magic": {"depends": ["libmagic"], "file_name": "python_magic-0.4.27-py2.py3-none-any.whl", "imports": ["magic"], "install_dir": "site", "name": "python-magic", "package_type": "package", "sha256": "81a716761a01d93a128e26d070c53a29244ed2eadb4ec0db1a6e9f42381efcff", "shared_library": false, "unvendored_tests": false, "version": "0.4.27"}, "python-sat": {"depends": ["six"], "file_name": "python_sat-0.1.7.dev26-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pysat"], "install_dir": "site", "name": "python-sat", "package_type": "package", "sha256": "4d9d765ceca41194a53b802c059f1b52eda6f9845e04761a5f8d436955c6219f", "shared_library": false, "unvendored_tests": false, "version": "0.1.7.dev26"}, "python-solvespace": {"depends": [], "file_name": "python_solvespace-3.0.8-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["python_solvespace"], "install_dir": "site", "name": "python_solvespace", "package_type": "package", "sha256": "3c3611abebb8988917674c143e21734861faa635ada202ec7426793262dd3339", "shared_library": false, "unvendored_tests": false, "version": "3.0.8"}, "pytz": {"depends": [], "file_name": "pytz-2023.3-py2.py3-none-any.whl", "imports": ["pytz"], "install_dir": "site", "name": "pytz", "package_type": "package", "sha256": "9642fe77a66578d7f22585f9299eb41ef8aee3791114bcd02ca1f5108ecb5d8f", "shared_library": false, "unvendored_tests": false, "version": "2023.3"}, "pywavelets": {"depends": ["distutils", "numpy", "matplotlib", "scipy"], "file_name": "PyWavelets-1.4.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pywt"], "install_dir": "site", "name": "pywavelets", "package_type": "package", "sha256": "6f0831bdf94d12da7b1cf60e1f8cc2fecb1edf65865253da5758ff2192c08335", "shared_library": false, "unvendored_tests": true, "version": "1.4.1"}, "pywavelets-tests": {"depends": ["pywavelets"], "file_name": "pywavelets-tests.tar", "imports": [], "install_dir": "site", "name": "pywavelets-tests", "package_type": "package", "sha256": "8370c9ea1e4039f2f24447aeeeb6b4aadf6aeee5bbf409997cbf188922354bba", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "pyxel": {"depends": [], "file_name": "pyxel-1.9.10-cp37-abi3-emscripten_3_1_46_wasm32.whl", "imports": ["pyxel"], "install_dir": "site", "name": "pyxel", "package_type": "package", "sha256": "5728101895e2c9dd5b70b5e1ee893ff4a2db9fdd306273c86808ed85b4bae7ef", "shared_library": false, "unvendored_tests": false, "version": "1.9.10"}, "pyyaml": {"depends": [], "file_name": "PyYAML-6.0.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["_yaml", "yaml"], "install_dir": "site", "name": "pyyaml", "package_type": "package", "sha256": "70da5e4d3c7b6cf4befce24f971d94c21fc8a41e28daf34b2da0f0d99ef0b565", "shared_library": false, "unvendored_tests": false, "version": "6.0.1"}, "rebound": {"depends": ["numpy"], "file_name": "rebound-3.24.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["rebound"], "install_dir": "site", "name": "rebound", "package_type": "package", "sha256": "f8dc7d482a31ca87355d8ae849783f4aaf61daa984474a0abeb15a2cad498e04", "shared_library": false, "unvendored_tests": false, "version": "3.24.2"}, "reboundx": {"depends": ["rebound", "numpy"], "file_name": "reboundx-3.10.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["reboundx"], "install_dir": "site", "name": "reboundx", "package_type": "package", "sha256": "9baf0fc2873918f4555300a1003b811f9dfc8704e8bccd4457707c5d87f6f288", "shared_library": false, "unvendored_tests": false, "version": "3.10.1"}, "regex": {"depends": [], "file_name": "regex-2023.8.8-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["regex"], "install_dir": "site", "name": "regex", "package_type": "package", "sha256": "a62b3caad35d144ce4fa499ad39657e031d8803df25cd790d762032cb7656ff8", "shared_library": false, "unvendored_tests": true, "version": "2023.8.8"}, "regex-tests": {"depends": ["regex"], "file_name": "regex-tests.tar", "imports": [], "install_dir": "site", "name": "regex-tests", "package_type": "package", "sha256": "44431a424879b1ca4ea89b9de02dd1dccbfe77ff507598ddc638b8a8860737eb", "shared_library": false, "unvendored_tests": false, "version": "2023.8.8"}, "requests": {"depends": ["charset-normalizer", "idna", "urllib3", "certifi"], "file_name": "requests-2.31.0-py3-none-any.whl", "imports": ["requests"], "install_dir": "site", "name": "requests", "package_type": "package", "sha256": "98a4d2e9c220884a6e17b1b543b7178c957f3ebb2840ffb0fb214b8bac3f32dc", "shared_library": false, "unvendored_tests": false, "version": "2.31.0"}, "retrying": {"depends": ["six"], "file_name": "retrying-1.3.4-py3-none-any.whl", "imports": ["retrying"], "install_dir": "site", "name": "retrying", "package_type": "package", "sha256": "19e2898888825a8c3a59dba5624b1c74d6b1f0bf28533ed05a0993a973c544cf", "shared_library": false, "unvendored_tests": false, "version": "1.3.4"}, "river": {"depends": ["numpy", "pandas", "pytest", "scipy"], "file_name": "river-0.19.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["river"], "install_dir": "site", "name": "river", "package_type": "package", "sha256": "2caf2bf8b027f4a42fd0a9d8b15066c85c0caf23d363f0768cc4cb583c50afd2", "shared_library": false, "unvendored_tests": true, "version": "0.19.0"}, "river-tests": {"depends": ["river"], "file_name": "river-tests.tar", "imports": [], "install_dir": "site", "name": "river-tests", "package_type": "package", "sha256": "2859ccd4355aa0a9779ce74407f3717daecc512fd95c374ca8869c8e595a230c", "shared_library": false, "unvendored_tests": false, "version": "0.19.0"}, "robotraconteur": {"depends": ["numpy"], "file_name": "RobotRaconteur-0.15.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["RobotRaconteur"], "install_dir": "site", "name": "RobotRaconteur", "package_type": "package", "sha256": "842f69e897a47cb2837b0e099bae837117dd9a771c71dc239e99130d801b2678", "shared_library": false, "unvendored_tests": false, "version": "0.15.1"}, "ruamel-yaml": {"depends": [], "file_name": "ruamel.yaml-0.17.32-py3-none-any.whl", "imports": ["ruamel"], "install_dir": "site", "name": "ruamel.yaml", "package_type": "package", "sha256": "e81940c2003cb6bb53b396f6d553fcccae55a813ad399aa50cf08aa6a874c8fe", "shared_library": false, "unvendored_tests": false, "version": "0.17.32"}, "rust-panic-test": {"depends": [], "file_name": "rust_panic_test-1.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["rust-panic-test"], "install_dir": "site", "name": "rust-panic-test", "package_type": "package", "sha256": "f37e7a9f92a3f82c02178679a014cd9f305465d9fc935a9e2115980d46f5a987", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "scikit-image": {"depends": ["packaging", "numpy", "scipy", "networkx", "pillow", "imageio", "pywavelets", "lazy_loader"], "file_name": "scikit_image-0.21.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["skimage"], "install_dir": "site", "name": "scikit-image", "package_type": "package", "sha256": "915d57c321b7dbb49adfa70b500725b6a17ebf4ef47c60a4229dcfdcb9c51bc0", "shared_library": false, "unvendored_tests": true, "version": "0.21.0"}, "scikit-image-tests": {"depends": ["scikit-image"], "file_name": "scikit-image-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-image-tests", "package_type": "package", "sha256": "673dc4ad087499925acfaea2b9ad833b31ced37e512a5dfb90a293ee78e14c95", "shared_library": false, "unvendored_tests": false, "version": "0.21.0"}, "scikit-learn": {"depends": ["scipy", "joblib", "threadpoolctl"], "file_name": "scikit_learn-1.3.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["sklearn"], "install_dir": "site", "name": "scikit-learn", "package_type": "package", "sha256": "7799c5b0cd493b05ad14fb23b432b77163dc09b19e151b07b9006a05d6ed1d75", "shared_library": false, "unvendored_tests": true, "version": "1.3.1"}, "scikit-learn-tests": {"depends": ["scikit-learn"], "file_name": "scikit-learn-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-learn-tests", "package_type": "package", "sha256": "de9494dd22b7c8b5fa412239a53a16c1076a578c274f19b2d8e7ca9d299f815a", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "scipy": {"depends": ["numpy", "openblas"], "file_name": "scipy-1.11.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["scipy"], "install_dir": "site", "name": "scipy", "package_type": "package", "sha256": "20fb3193b0444614045692c6f3bddfe33dea155d7b2797c779f4079fe0f4fb86", "shared_library": false, "unvendored_tests": true, "version": "1.11.2"}, "scipy-tests": {"depends": ["scipy"], "file_name": "scipy-tests.tar", "imports": [], "install_dir": "site", "name": "scipy-tests", "package_type": "package", "sha256": "9a1276ae38f604e6f80c6ed4153fb56f1f9b0955da940c20b23715b0c259f60a", "shared_library": false, "unvendored_tests": false, "version": "1.11.2"}, "screed": {"depends": [], "file_name": "screed-1.1.2-py2.py3-none-any.whl", "imports": ["bigtests", "screed"], "install_dir": "site", "name": "screed", "package_type": "package", "sha256": "0c0e76342354c4dccbb458fec75ff682793f866802b06f019ecf0a09e0d6b336", "shared_library": false, "unvendored_tests": true, "version": "1.1.2"}, "screed-tests": {"depends": ["screed"], "file_name": "screed-tests.tar", "imports": [], "install_dir": "site", "name": "screed-tests", "package_type": "package", "sha256": "0625705f10451327ea5b33c20a1725383a4fa1190d84794df0be5b4f781eddcc", "shared_library": false, "unvendored_tests": false, "version": "1.1.2"}, "setuptools": {"depends": ["distutils", "pyparsing"], "file_name": "setuptools-68.1.2-py3-none-any.whl", "imports": ["_distutils_hack", "pkg_resources", "setuptools"], "install_dir": "site", "name": "setuptools", "package_type": "package", "sha256": "7d0c185c16974f0f57f848fcc16c2647dce1a78b7c5f124400716ec2a2053ce1", "shared_library": false, "unvendored_tests": false, "version": "68.1.2"}, "shapely": {"depends": ["numpy"], "file_name": "Shapely-1.8.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["shapely"], "install_dir": "site", "name": "shapely", "package_type": "package", "sha256": "f0d41e050143716feaa5b63003422969f9b2e37bb23dd4db0995f47e8ce45465", "shared_library": false, "unvendored_tests": true, "version": "1.8.2"}, "shapely-tests": {"depends": ["shapely"], "file_name": "shapely-tests.tar", "imports": [], "install_dir": "site", "name": "shapely-tests", "package_type": "package", "sha256": "c5edffecf747de727e8b12cf1c034fbc74e9081c7c577f34087dcd7bc6058973", "shared_library": false, "unvendored_tests": false, "version": "1.8.2"}, "sharedlib-test": {"depends": [], "file_name": "sharedlib-test-1.0.zip", "imports": [], "install_dir": "dynlib", "name": "sharedlib-test", "package_type": "shared_library", "sha256": "553ac8833e45246c88960b71659915fc2b1263404228d01692193abd2d4ab78f", "shared_library": true, "unvendored_tests": false, "version": "1.0"}, "sharedlib-test-py": {"depends": ["sharedlib-test"], "file_name": "sharedlib_test_py-1.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["sharedlib_test"], "install_dir": "site", "name": "sharedlib-test-py", "package_type": "package", "sha256": "9038ae4d3727e8c57ba233888ad0f0d45a55285a9d7f0ba20bf88fc40579902e", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "simplejson": {"depends": [], "file_name": "simplejson-3.19.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["simplejson"], "install_dir": "site", "name": "simplejson", "package_type": "package", "sha256": "a449dd8dc4143369d0cc1803c301b101f785980bc1868821edf4f74730112bb9", "shared_library": false, "unvendored_tests": true, "version": "3.19.1"}, "simplejson-tests": {"depends": ["simplejson"], "file_name": "simplejson-tests.tar", "imports": [], "install_dir": "site", "name": "simplejson-tests", "package_type": "package", "sha256": "f952a666496903cda9258ab6dbc4f7b6eca1c37bb27d1fca75db1af3afd0a7d8", "shared_library": false, "unvendored_tests": false, "version": "3.19.1"}, "sisl": {"depends": ["pyparsing", "numpy", "scipy", "tqdm", "xarray", "pandas", "matplotlib"], "file_name": "sisl-0.14.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["sisl_toolbox", "sisl"], "install_dir": "site", "name": "sisl", "package_type": "package", "sha256": "add61e40a5308fd97a2ee4e09be502ec03bef138927bc87119551d62dae66f76", "shared_library": false, "unvendored_tests": true, "version": "0.14.2"}, "sisl-tests": {"depends": ["sisl"], "file_name": "sisl-tests.tar", "imports": [], "install_dir": "site", "name": "sisl-tests", "package_type": "package", "sha256": "41c47ca42bec2114e222b4ead743f1557ade03ae1fff3be0f2cfd467ced5f9c7", "shared_library": false, "unvendored_tests": false, "version": "0.14.2"}, "six": {"depends": [], "file_name": "six-1.16.0-py2.py3-none-any.whl", "imports": ["six"], "install_dir": "site", "name": "six", "package_type": "package", "sha256": "fad96a9848b9ddc039f72d0e07fee1d4a7caf15c3e4beda9a114fd4875c52583", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "smart-open": {"depends": [], "file_name": "smart_open-6.3.0-py3-none-any.whl", "imports": ["smart_open"], "install_dir": "site", "name": "smart_open", "package_type": "package", "sha256": "b4059b9b7c6185620e71d0562fabb83ed66bbc3c37ec94676c90185a4cbb80c1", "shared_library": false, "unvendored_tests": false, "version": "6.3.0"}, "soupsieve": {"depends": [], "file_name": "soupsieve-2.4.1-py3-none-any.whl", "imports": ["soupsieve"], "install_dir": "site", "name": "soupsieve", "package_type": "package", "sha256": "31d65e0030897b0d7251ad328e200881f9fe5416891addb1b9a33a77d127f112", "shared_library": false, "unvendored_tests": false, "version": "2.4.1"}, "sourmash": {"depends": ["screed", "cffi", "deprecation", "cachetools", "numpy", "matplotlib", "scipy", "sqlite3", "bitstring"], "file_name": "sourmash-4.8.4-py3-none-emscripten_3_1_46_wasm32.whl", "imports": ["sourmash"], "install_dir": "site", "name": "sourmash", "package_type": "package", "sha256": "8d8fbdb14218be1b592214799d8a437ccf7a3f6598c474e2946f2a5d9041ae44", "shared_library": false, "unvendored_tests": false, "version": "4.8.4"}, "sparseqr": {"depends": ["pycparser", "cffi", "numpy", "scipy", "suitesparse", "distutils"], "file_name": "sparseqr-1.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["sparseqr"], "install_dir": "site", "name": "sparseqr", "package_type": "package", "sha256": "c8eccd6783c393126e4239408dd315084a4e254d69627fbec98b455f3b0bc7e6", "shared_library": false, "unvendored_tests": false, "version": "1.2"}, "sqlalchemy": {"depends": ["sqlite3", "typing-extensions"], "file_name": "SQLAlchemy-2.0.20-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["sqlalchemy"], "install_dir": "site", "name": "sqlalchemy", "package_type": "package", "sha256": "58c78a8d513bc37d5e974759ba07f5369581d240c02178d380965c8a96a682f2", "shared_library": false, "unvendored_tests": true, "version": "2.0.20"}, "sqlalchemy-tests": {"depends": ["sqlalchemy"], "file_name": "sqlalchemy-tests.tar", "imports": [], "install_dir": "site", "name": "sqlalchemy-tests", "package_type": "package", "sha256": "4263699b03d8f34ec402b0cd2126b6082c9eb58ca81a05a705319356be5b2e8f", "shared_library": false, "unvendored_tests": false, "version": "2.0.20"}, "sqlite3": {"depends": [], "file_name": "sqlite3-1.0.0.zip", "imports": ["sqlite3", "_sqlite3"], "install_dir": "stdlib", "name": "sqlite3", "package_type": "cpython_module", "sha256": "49dad33820f94c406be5b8fd06f618b16824818476d96e35e5faef6a319f8835", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "ssl": {"depends": ["openssl"], "file_name": "ssl-1.0.0.zip", "imports": ["ssl", "_ssl"], "install_dir": "stdlib", "name": "ssl", "package_type": "cpython_module", "sha256": "89b210fdbd9f25173d0477b10613d0c7ebd662e2c26fcabbe6959c4a83197573", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "statsmodels": {"depends": ["distutils", "numpy", "scipy", "pandas", "patsy", "packaging"], "file_name": "statsmodels-0.14.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["statsmodels"], "install_dir": "site", "name": "statsmodels", "package_type": "package", "sha256": "18e28f46dc960d4dc04e12bc67fca32f9778ca0b756ba7b25486bae7c6df4861", "shared_library": false, "unvendored_tests": true, "version": "0.14.0"}, "statsmodels-tests": {"depends": ["statsmodels"], "file_name": "statsmodels-tests.tar", "imports": [], "install_dir": "site", "name": "statsmodels-tests", "package_type": "package", "sha256": "24c2204b8f5b15f5677cf04edb2cc9a6938d76cbe6adfc53bdf0b74a2aaf3ec7", "shared_library": false, "unvendored_tests": false, "version": "0.14.0"}, "suitesparse": {"depends": ["openblas"], "file_name": "suitesparse-5.11.0.zip", "imports": [], "install_dir": "dynlib", "name": "suitesparse", "package_type": "shared_library", "sha256": "2f146944f72146cdf700e2c79a94321957c235ec1c63bd040413d322baf64ffb", "shared_library": true, "unvendored_tests": false, "version": "5.11.0"}, "svgwrite": {"depends": [], "file_name": "svgwrite-1.4.3-py3-none-any.whl", "imports": ["svgwrite"], "install_dir": "site", "name": "svgwrite", "package_type": "package", "sha256": "2e01c175913b8d1abdadf81671321f5b8c00c5574f6884e031677aaebf3b0011", "shared_library": false, "unvendored_tests": false, "version": "1.4.3"}, "swiglpk": {"depends": [], "file_name": "swiglpk-5.0.8-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["swiglpk"], "install_dir": "site", "name": "swiglpk", "package_type": "package", "sha256": "9c0951b2ab9d3996bfb9eca346c49b71065f448c33ad970a28afbcab79fe9eef", "shared_library": false, "unvendored_tests": false, "version": "5.0.8"}, "sympy": {"depends": ["distutils", "mpmath"], "file_name": "sympy-1.12-py3-none-any.whl", "imports": ["isympy", "sympy"], "install_dir": "site", "name": "sympy", "package_type": "package", "sha256": "b7075c6d69bffda1afc6eacdbbebc7d82437508539e855f34f01c4c6dc9137b6", "shared_library": false, "unvendored_tests": true, "version": "1.12"}, "sympy-tests": {"depends": ["sympy"], "file_name": "sympy-tests.tar", "imports": [], "install_dir": "site", "name": "sympy-tests", "package_type": "package", "sha256": "b5811c381240f14d2d7edbd481325c1c3491866847032491606c3c36f1172f86", "shared_library": false, "unvendored_tests": false, "version": "1.12"}, "tblib": {"depends": [], "file_name": "tblib-3.0.0-py3-none-any.whl", "imports": ["tblib"], "install_dir": "site", "name": "tblib", "package_type": "package", "sha256": "091820a33875a03e3e12ce3050ed8a147940f9bd56840a42c2f6cba0c14e77fa", "shared_library": false, "unvendored_tests": false, "version": "3.0.0"}, "termcolor": {"depends": [], "file_name": "termcolor-2.3.0-py3-none-any.whl", "imports": ["termcolor"], "install_dir": "site", "name": "termcolor", "package_type": "package", "sha256": "8481f308073f0c8b2b551df71bab8f7df2d733c0f22934ea772b37fec0e49dfc", "shared_library": false, "unvendored_tests": false, "version": "2.3.0"}, "test": {"depends": [], "file_name": "test-1.0.0.zip", "imports": ["test"], "install_dir": "stdlib", "name": "test", "package_type": "cpython_module", "sha256": "00233e7098ca725070b62a0575ef0e4414f3b2f978c2601bcde2a325a5c672b6", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "texttable": {"depends": [], "file_name": "texttable-1.6.7-py2.py3-none-any.whl", "imports": ["texttable"], "install_dir": "site", "name": "texttable", "package_type": "package", "sha256": "bfd20ec95d90865c2c0819c38dde9535588e93da45ee0f866004d17d3ca10451", "shared_library": false, "unvendored_tests": false, "version": "1.6.7"}, "threadpoolctl": {"depends": [], "file_name": "threadpoolctl-3.2.0-py3-none-any.whl", "imports": ["threadpoolctl"], "install_dir": "site", "name": "threadpoolctl", "package_type": "package", "sha256": "73fa129cbab9daa4a0f381af17824a932b8957777a9e73a02bf733db9040ed7a", "shared_library": false, "unvendored_tests": false, "version": "3.2.0"}, "tomli": {"depends": [], "file_name": "tomli-2.0.1-py3-none-any.whl", "imports": ["tomli"], "install_dir": "site", "name": "tomli", "package_type": "package", "sha256": "86c6b2919638edcca8ce1762e4e70a95553492dae67fbce61205d154aa7ec7d7", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "tomli-w": {"depends": [], "file_name": "tomli_w-1.0.0-py3-none-any.whl", "imports": ["tomli_w"], "install_dir": "site", "name": "tomli-w", "package_type": "package", "sha256": "a7c41f6e333c3554e96d895ec1b1500d4cf05039786106ae54330cbf0b2cffed", "shared_library": false, "unvendored_tests": false, "version": "1.0.0"}, "toolz": {"depends": [], "file_name": "toolz-0.12.0-py3-none-any.whl", "imports": ["tlz", "toolz"], "install_dir": "site", "name": "toolz", "package_type": "package", "sha256": "5f2ed674746b0564f59ca4d89cec69253a03f55b6233e10a7fe3918cc712450b", "shared_library": false, "unvendored_tests": true, "version": "0.12.0"}, "toolz-tests": {"depends": ["toolz"], "file_name": "toolz-tests.tar", "imports": [], "install_dir": "site", "name": "toolz-tests", "package_type": "package", "sha256": "4499b52adfde700758f72039149c3032f51f3eef0093d56870de16281b96054f", "shared_library": false, "unvendored_tests": false, "version": "0.12.0"}, "tqdm": {"depends": [], "file_name": "tqdm-4.66.1-py3-none-any.whl", "imports": ["tqdm"], "install_dir": "site", "name": "tqdm", "package_type": "package", "sha256": "81502627ac31f06a64d73833d1303cd530e299125c6ce81b40e7a4115dd57314", "shared_library": false, "unvendored_tests": false, "version": "4.66.1"}, "traits": {"depends": [], "file_name": "traits-6.4.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["traits"], "install_dir": "site", "name": "traits", "package_type": "package", "sha256": "731ae94a327f4ec6216fd2cc69e074468dd08360fcf73c93be2e1186ed107e1c", "shared_library": false, "unvendored_tests": true, "version": "6.4.2"}, "traits-tests": {"depends": ["traits"], "file_name": "traits-tests.tar", "imports": [], "install_dir": "site", "name": "traits-tests", "package_type": "package", "sha256": "2da74f37e577489e6d4c0565fe2353e6e3601937820218d4785c8a14180fccd0", "shared_library": false, "unvendored_tests": false, "version": "6.4.2"}, "tskit": {"depends": ["numpy", "svgwrite", "jsonschema"], "file_name": "tskit-0.5.5-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["tskit"], "install_dir": "site", "name": "tskit", "package_type": "package", "sha256": "df70c2756ac1810c14715fca06be0a59576627b2a33b9ec5d730e06450c6298a", "shared_library": false, "unvendored_tests": false, "version": "0.5.5"}, "typing-extensions": {"depends": [], "file_name": "typing_extensions-4.7.1-py3-none-any.whl", "imports": ["typing_extensions"], "install_dir": "site", "name": "typing-extensions", "package_type": "package", "sha256": "eb21dbb2a3bcaba4e0f6d2345906fb7635ac6f8287a0133ebef35cb81489e668", "shared_library": false, "unvendored_tests": false, "version": "4.7.1"}, "uncertainties": {"depends": ["future"], "file_name": "uncertainties-3.1.7-py2.py3-none-any.whl", "imports": ["uncertainties"], "install_dir": "site", "name": "uncertainties", "package_type": "package", "sha256": "23cb91fc29fc75c1a34ffc8273a38fa1e8033da451461eae889628217f14f2c8", "shared_library": false, "unvendored_tests": true, "version": "3.1.7"}, "uncertainties-tests": {"depends": ["uncertainties"], "file_name": "uncertainties-tests.tar", "imports": [], "install_dir": "site", "name": "uncertainties-tests", "package_type": "package", "sha256": "b85cf522aa76b86cbcafb243fb1a29b27c865ad85107420bca6afc8914ca4b1b", "shared_library": false, "unvendored_tests": false, "version": "3.1.7"}, "unyt": {"depends": ["numpy", "sympy"], "file_name": "unyt-2.9.5-py2.py3-none-any.whl", "imports": ["unyt"], "install_dir": "site", "name": "unyt", "package_type": "package", "sha256": "cb49e4927dae619a9e43659e4a18a7868aa3f82656d34ce1c18b0cc0b8e03181", "shared_library": false, "unvendored_tests": true, "version": "2.9.5"}, "unyt-tests": {"depends": ["unyt"], "file_name": "unyt-tests.tar", "imports": [], "install_dir": "site", "name": "unyt-tests", "package_type": "package", "sha256": "bbf8a9b09e2762167dd80428fb1dc95830cadc57196cd09d134bc1055e0a4b3d", "shared_library": false, "unvendored_tests": false, "version": "2.9.5"}, "urllib3": {"depends": [], "file_name": "urllib3-2.1.0-py3-none-any.whl", "imports": ["urllib3"], "install_dir": "site", "name": "urllib3", "package_type": "package", "sha256": "0dc9140041c8ba0786e7690df6e466ebee96e726469d07bb9552abd8ff653a6d", "shared_library": false, "unvendored_tests": false, "version": "2.1.0"}, "webencodings": {"depends": [], "file_name": "webencodings-0.5.1-py2.py3-none-any.whl", "imports": ["webencodings"], "install_dir": "site", "name": "webencodings", "package_type": "package", "sha256": "973e83c0220cdedf3ab39288da0a60f97d047abe8f481a30c936856413d6de60", "shared_library": false, "unvendored_tests": false, "version": "0.5.1"}, "wordcloud": {"depends": ["matplotlib"], "file_name": "wordcloud-1.9.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["wordcloud"], "install_dir": "site", "name": "wordcloud", "package_type": "package", "sha256": "8d4cc4fc724f2d4f809c9c31050a591e0e5ef51c86eda4b3c6f6a3e0103e1506", "shared_library": false, "unvendored_tests": false, "version": "1.9.2"}, "wrapt": {"depends": [], "file_name": "wrapt-1.15.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["wrapt"], "install_dir": "site", "name": "wrapt", "package_type": "package", "sha256": "cfe5c594af872251a992c13cd7c9a1d9438c0a11da5c470eef7d7713773794e3", "shared_library": false, "unvendored_tests": false, "version": "1.15.0"}, "xarray": {"depends": ["numpy", "packaging", "pandas"], "file_name": "xarray-2023.12.0-py3-none-any.whl", "imports": ["xarray"], "install_dir": "site", "name": "xarray", "package_type": "package", "sha256": "6d201070f094dfbbcfad9a4b2b6cd390d786c6cc21b7be926ba925a0a1fb3113", "shared_library": false, "unvendored_tests": true, "version": "2023.12.0"}, "xarray-tests": {"depends": ["xarray"], "file_name": "xarray-tests.tar", "imports": [], "install_dir": "site", "name": "xarray-tests", "package_type": "package", "sha256": "f6add9e859a0951f37cb2972d51f4f59ca7b2ae5baa58609dbc6dfa2f53e7e9f", "shared_library": false, "unvendored_tests": false, "version": "2023.12.0"}, "xgboost": {"depends": ["numpy", "scipy", "setuptools"], "file_name": "xgboost-1.6.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["xgboost"], "install_dir": "site", "name": "xgboost", "package_type": "package", "sha256": "6a1838cb28ffafb570a582f8d1f5f7905c8419f504f0b323a54a81ebcaf56089", "shared_library": false, "unvendored_tests": false, "version": "1.6.1"}, "xlrd": {"depends": [], "file_name": "xlrd-2.0.1-py2.py3-none-any.whl", "imports": ["xlrd"], "install_dir": "site", "name": "xlrd", "package_type": "package", "sha256": "5f4ee0aadb7f0364a27454e47bf8ba0a8848a6fbc976209476cf50d9bbdbb823", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "xyzservices": {"depends": [], "file_name": "xyzservices-2023.7.0-py3-none-any.whl", "imports": ["xyzservices"], "install_dir": "site", "name": "xyzservices", "package_type": "package", "sha256": "b20b3b2c33dc4670664d2b00f5b925eedb72b6dddb6f74098f5e1bf29653fb8e", "shared_library": false, "unvendored_tests": true, "version": "2023.7.0"}, "xyzservices-tests": {"depends": ["xyzservices"], "file_name": "xyzservices-tests.tar", "imports": [], "install_dir": "site", "name": "xyzservices-tests", "package_type": "package", "sha256": "4314b2d64d1185b8087e9bad1b9a3f2a54a7c12be957ce56baea336dbf27b19a", "shared_library": false, "unvendored_tests": false, "version": "2023.7.0"}, "yarl": {"depends": ["multidict", "idna"], "file_name": "yarl-1.9.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["yarl"], "install_dir": "site", "name": "yarl", "package_type": "package", "sha256": "f009548bcd61530020e293e44bc71f2094b964076738d747383b81127aad313b", "shared_library": false, "unvendored_tests": false, "version": "1.9.2"}, "yt": {"depends": ["numpy", "matplotlib", "sympy", "setuptools", "packaging", "unyt", "cmyt", "colorspacious", "tqdm", "tomli", "tomli-w"], "file_name": "yt-4.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["yt"], "install_dir": "site", "name": "yt", "package_type": "package", "sha256": "6ab5ca825fe792a92667d373cfa8c7e3ebf801b91d61942d97e79b2ec130632c", "shared_library": false, "unvendored_tests": false, "version": "4.1.4"}, "zarr": {"depends": ["numpy", "asciitree", "numcodecs"], "file_name": "zarr-2.13.3-py3-none-any.whl", "imports": ["zarr"], "install_dir": "site", "name": "zarr", "package_type": "package", "sha256": "2637c668cca2ec8a295256b2540e913414f6119c61a2190c6e4d53f20a74c3ea", "shared_library": false, "unvendored_tests": true, "version": "2.13.3"}, "zarr-tests": {"depends": ["zarr"], "file_name": "zarr-tests.tar", "imports": [], "install_dir": "site", "name": "zarr-tests", "package_type": "package", "sha256": "d411b4e0b526ca7cfc953fc2081836b0dbd32a7728be266f4fe0d35285cb6c06", "shared_library": false, "unvendored_tests": false, "version": "2.13.3"}, "zengl": {"depends": [], "file_name": "zengl-2.2.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["zengl", "_zengl", "_zengl_js"], "install_dir": "site", "name": "zengl", "package_type": "package", "sha256": "da5d34f3591f9d745f907b95298cb758761f1e109e061d7adaf21d970f591c9a", "shared_library": false, "unvendored_tests": false, "version": "2.2.0"}}}

[Showing last 50.0KB of line 1 (line is 86.8KB). Full output: /tmp/pi-bash-f1cb07e003029e45.log]


The `pyodide-lock.json` contains many package references, but those are only loaded when you `import` those packages. The basic pyodide should work without them.

Let me think about what else could be causing the 404. The user said the loading overlay is stuck. The error says "Failed to load resource: the server responded with a status of 404 (File not found)".

Let me check if there's a missing file that pyodide needs. Maybe the `pyodide.asm.js` is trying to load `pyodide.asm.wasm` but the path is wrong. Or maybe the `python_stdlib.zip` is loaded at startup and is missing.

Let me check the `pyodide.min.js` to see if it loads `python_stdlib.zip` at startup.

# Check if python_stdlib.zip is loaded at startup
grep -oP 'python_stdlib\.zip.{0,30}' /shumengya/www/python-wasm/pyodide/pyodide.min.js | head -5


python_stdlib.zip",Ne(t,c),Se(t,e.env.HOME),Oe(


So `python_stdlib.zip` is loaded at startup. The `pyodide.min.js` references it. Let me check if the file is accessible.

Actually, let me try a completely different approach. Let me check if there's a way to test the page loading with curl or a headless browser. But more importantly, let me check if the `pyodide.asm.js` is actually the right file.

Wait, I think I found the issue. The `pyodide.asm.js` file might be trying to load `pyodide.asm.wasm` with a relative path. Since `pyodide.asm.js` is loaded via `import()`, the base URL for relative paths might be different from what we expect.

Let me check if the `pyodide.asm.js` uses `import.meta.url` or `document.currentScript` to determine the base URL. I already saw that it uses `document.currentScript`, but when loaded via `import()`, `document.currentScript` is null. So it might fall back to something else.

Actually, looking at the `pyodide.asm.js` code:
```javascript
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
```

If `document.currentScript` is null (because loaded via `import()`), then `_scriptDir` is `undefined`. But the `locateFile` function is supposed to be set by `loadPyodide`. Let me check if `locateFile` is being set correctly.

Wait, I just realized something. The `loadPyodide` function sets `locateFile` on the module object `a`:
```javascript
a.locateFile = s => o.indexURL + s;
```

But `a` is the module object passed to `_createPyodideModule(a)`. Inside `_createPyodideModule`, the module object is called `Module`. So `Module["locateFile"]` should be `a.locateFile`.

But in `pyodide.asm.js`:
```javascript
function locateFile(path) {
  if (Module["locateFile"]) {
    return Module["locateFile"](path, scriptDirectory);
  }
  return scriptDirectory + path;
}
```

So `locateFile("pyodide.asm.wasm")` should return `Module["locateFile"]("pyodide.asm.wasm", scriptDirectory)`. Since `Module["locateFile"]` is `s => o.indexURL + s`, it takes `s` as the first argument and returns `o.indexURL + s`. The second argument `scriptDirectory` is ignored.

This should work correctly. But wait, maybe the issue is that `scriptDirectory` is empty or undefined, and `locateFile` is not being called at all. Let me check if `wasmBinaryFile` is set directly to `pyodide.asm.wasm` without using `locateFile`.

Actually, looking at the `pyodide.asm.js` code:
```javascript
wasmBinaryFile="pyodide.asm.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}
```

So `wasmBinaryFile` is set to `"pyodide.asm.wasm"`, and then `locateFile` is called. This should work.

But wait, the `loadPyodide` function sets `locateFile` AFTER the `pyodide.asm.js` is loaded but BEFORE `_createPyodideModule(a)` is called. Let me check the order of operations.

Looking at `pyodide.min.js`:
```javascript
if (typeof _createPyodideModule != "function") {
  let s = `${o.indexURL}pyodide.asm.js`;
  await S(s);
}
// ...
a.locateFile = s => o.indexURL + s;
// ...
await _createPyodideModule(a);
```

Wait, is `a.locateFile` set BEFORE `_createPyodideModule(a)` is called? Let me check the actual code more carefully.

# Find the exact sequence around the module creation
grep -oP '.{0,100}_createPyodideModule.{0,100}' /shumengya/www/python-wasm/pyodide/pyodide.min.js | head -5


ckFileURL),re(a,e),te(a,o);let n=new Promise(s=>a.postRun=s);if(a.locateFile=s=>o.indexURL+s,typeof _createPyodideModule!="function"){let s=`${o.indexURL}pyodide.asm.js`;await S(s)}if(await _createPyodideModule(a),await


Now I see the exact sequence:
```javascript
a.locateFile = s => o.indexURL + s;
if (typeof _createPyodideModule != "function") {
  let s = `${o.indexURL}pyodide.asm.js`;
  await S(s);
}
if (await _createPyodideModule(a), await ...)
```

So `a.locateFile` is set BEFORE `_createPyodideModule(a)` is called. This is correct.

But wait, the `pyodide.asm.js` might have a different `locateFile` function that uses `scriptDirectory` in a different way. Let me check the actual `locateFile` function in `pyodide.asm.js`.

Actually, let me look at the `pyodide.asm.js` more carefully. The `locateFile` function might be using `scriptDirectory` which is set based on `document.currentScript.src`. But `document.currentScript` is null when loaded via `import()`.

Wait, but the `locateFile` function is overridden by `Module["locateFile"]`. So it should use the overridden function.

Let me think about this differently. Maybe the 404 is for a different file. The user said the loading overlay is stuck. The error says "Failed to load resource: the server responded with a status of 404 (File not found)".

Could it be that the `pyodide.asm.js` is loading `pyodide.asm.wasm` but the browser is requesting it from a different URL? Let me try to trace the exact URL.

Actually, I think the issue might be that the `pyodide.asm.js` is loaded via `import()`, and `import()` might not work correctly with the Python HTTP server. The `import()` function requires the script to be served with a valid MIME type. But the Python HTTP server might not handle it correctly for dynamic imports.

Wait, I already checked the MIME type for `.js` and it's `text/javascript`. That should be correct.

But actually, `import()` requires the script to be treated as a module, not a regular script. The `pyodide.asm.js` is not a module, so `import()` might fail with a syntax error or a different error.

Actually, `import()` on a non-module script should still work in modern browsers. It just won't have any exports. But the script will be executed.

Let me check if the `import()` is actually failing. The error says "Failed to load resource" with 404, which is a network error, not a JavaScript error.

Could it be that the browser is trying to load the `.wasm` file with a relative path, and the path is wrong? Let me check the `scriptDirectory` in `pyodide.asm.js`.

Actually, I just realized - the `pyodide.asm.js` uses `document.currentScript.src` to determine `scriptDirectory`. But when loaded via `import()`, `document.currentScript` is null. In that case, `_scriptDir` is `undefined`.

But in the `locateFile` function:
```javascript
function locateFile(path) {
  if (Module["locateFile"]) {
    return Module["locateFile"](path, scriptDirectory);
  }
  return scriptDirectory + path;
}
```

If `scriptDirectory` is undefined, then `scriptDirectory + path` is `undefinedpyodide.asm.wasm` which is not a valid URL. But `Module["locateFile"]` is set, so it should use the overridden function.

Wait, but maybe the `locateFile` is not being used for the WASM file. Let me check if there's a different mechanism for loading the WASM file.

Actually, looking at the Emscripten-generated code, the WASM file is loaded using `WebAssembly.instantiateStreaming` or `fetch`. The URL is `wasmBinaryFile` which is set to `locateFile("pyodide.asm.wasm")`.

Let me check if the `loadPyodide` function is actually working correctly. The `a.locateFile` might not be set on the right module object.

Actually, I think the issue might be simpler. Let me check if the `pyodide.asm.js` is loaded via `import()` but the browser is blocking it because of CSP or other security policies.

Or maybe the issue is that the Python HTTP server doesn't handle the `.wasm` file correctly when requested via `fetch` with `WebAssembly.instantiateStreaming`.

Let me try a different approach. Let me check if the `pyodide.asm.js` file is actually accessible via `import()` by testing it in a script.

# Test if the pyodide.asm.js file is accessible
curl -s http://localhost:8765/pyodide/pyodide.asm.js | head -c 200

echo ""
echo "---"

# Test if the WASM file is accessible with correct headers
curl -sI http://localhost:8765/pyodide/pyodide.asm.wasm | grep -E "HTTP|Content-Type|Content-Length"


"use strict";

var _createPyodideModule = (() => {
  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
  if (typeof __filename !== 'u
---
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.14.5
Content-Length: 9002149


The files are accessible. Let me check if the Content-Type header is missing for the `.wasm` file.

# Check Content-Type for WASM file
curl -sI http://localhost:8765/pyodide/pyodide.asm.wasm | grep -i content-type


Content-type: application/wasm


The MIME type is correct. Let me check if the `pyodide.asm.wasm` is actually being requested. The user might have a different error. Let me check the browser console more carefully.

Actually, the user said "Failed to load resource: the server responded with a status of 404 (File not found)". This is a browser console error. The URL might be shown in the network tab.

Let me try to check if there's a different file being loaded. Maybe the `pyodide.asm.js` is loading `pyodide.asm.wasm` but the URL is wrong.

Wait, I just realized something. The `pyodide.asm.js` file is loaded via `import()`:
```javascript
let s = `${o.indexURL}pyodide.asm.js`;
await S(s);
```

But `S` is defined as:
```javascript
S = f(async t => await import(/* webpackIgnore */ t), "loadScript");
```

When `import()` is called with a URL like `http://192.168.1.100:8765/pyodide/pyodide.asm.js`, the browser treats it as a module import. But `pyodide.asm.js` is not a module (it doesn't have `export` statements). The `import()` might fail because the file is not a module.

But wait, the error says 404, not a module loading error. So maybe the `import()` is working but the file is not being found.

Actually, let me check if the `import()` call is actually making a request to the server. The server might be returning 404 for some reason.

Let me check if the `pyodide.asm.js` file is being served correctly. Maybe the Python HTTP server has an issue with large files or specific paths.

Actually, I think I should just check the server logs. But the server is running in the background with no output. Let me try to access the page with a browser and check the network tab.

Wait, I just had an idea. Let me check if the `pyodide.asm.js` is actually being loaded by checking the browser console. The user might have a different error.

Let me try to check the `pyodide.asm.js` more carefully. The file might be loaded via `import()`, but the `import()` might fail because of CORS or other issues.

Actually, looking at the error message again:
"Failed to load resource: the server responded with a status of 404 (File not found)"

The "File not found" is the status text. This is a standard HTTP 404 error. But which file is not found?

Let me check if the `pyodide.asm.js` is trying to load `pyodide.asm.wasm` with a different URL. Maybe the `locateFile` function is not working correctly.

Wait, I think I found the issue. The `pyodide.asm.js` uses `document.currentScript` to determine `scriptDirectory`. But when loaded via `import()`, `document.currentScript` is null. So `scriptDirectory` is undefined.

But the `locateFile` function is overridden by `Module["locateFile"]`. So it should work.

But wait, what if the `pyodide.asm.js` is not using `locateFile` for the WASM file? What if it's using a different mechanism?

Let me check the `pyodide.asm.js` to see how the WASM file is loaded.

# Search for how the WASM file is loaded in pyodide.asm.js
grep -oP '.{0,50}wasmBinaryFile.{0,50}' /shumengya/www/python-wasm/pyodide/pyodide.asm.js | head -10


怎么卡死了


The user is asking what's happening - the process seems stuck. Let me check if the bash command is still running or if there's an issue. Let me also check the current state of the server and files.

Actually, looking at the conversation, the user might be referring to the browser page being stuck on "正在加载 Python 运行时..." with the 404 error. Let me provide a clear answer about what I found and fix the issues.

The main issues I've identified:
1. The `pyodide.asm.js` file was missing (we downloaded it now)
2. The JS error in the catch block was trying to use `getElementById('loadingText')` but the element had `class` not `id` (we fixed this)
3. The 404 error might be because the `pyodide.asm.js` is loaded via `import()` and the Python HTTP server might have issues

Let me check if the `pyodide.asm.js` is now downloaded and test again.


总计 12288
drwxr-xr-x 2 root root    4096  6月10日 16:26 .
drwxr-xr-x 3 root root    4096  6月10日 16:21 ..
-rw-r--r-- 1 root root 1130465  6月10日 16:26 pyodide.asm.js
-rw-r--r-- 1 root root 9002149  6月10日 16:21 pyodide.asm.wasm
-rw-r--r-- 1 root root   88866  6月10日 16:21 pyodide-lock.json
-rw-r--r-- 1 root root   16965  6月10日 16:21 pyodide.min.js
-rw-r--r-- 1 root root    3214  6月10日 16:21 pyodide-package.json
-rw-r--r-- 1 root root 2323181  6月10日 16:21 python_stdlib.zip


Files are all there now. Let me check if the HTML was properly updated and test the server.

# Check if the server is still running and test the page
curl -s http://localhost:8765/ | head -20
echo "---"
curl -s http://localhost:8765/pyodide/pyodide.asm.js | head -c 50


<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <title>Python 解释器</title>
  <script src="pyodide/pyodide.min.js"></script>
  <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700&family=JetBrains+Mono:wght@300;400;500;600&display=swap" rel="stylesheet">
  <style>
    :root {
      --bg: #0d1117;
      --bg-elevated: #161b22;
      --bg-input: #1c2128;
      --border: #30363d;
      --border-hover: #484f58;
      --text-primary: #e6edf3;
      --text-secondary: #8b949e;
      --text-muted: #484f58;
      --accent: #f0883e;
      --accent-hover: #ff9f4a;
---
"use strict";

var _createPyodideModule = (() => {


The server is running and files are accessible. Now let me check if there's an issue with the `loadPyodide` function. The `pyodide.asm.js` file is loaded via `import()` which might cause issues with the Python HTTP server. Let me check if the browser is actually able to load it.

Wait, I think the issue might be that the `pyodide.asm.js` is loaded via `import()` but the Python HTTP server doesn't handle the `import()` correctly. Let me check if there's a CORS issue or something.

Actually, let me just check the current state of the HTML file to make sure everything is correct.


print(f"年龄: {student['age']}")
print(f"成绩: {student['grades']}")

average = sum(student['grades']) / len(student['grades'])
print(f"平均分: {average:.2f}")

# 遍历字典
for key, value in student.items():
    print(f"  {key}: {value}")`,
    };

    // ===== 初始化 Pyodide =====
    async function initPyodide() {
      try {
        pyodide = await loadPyodide({ indexURL: 'pyodide/' });
        pyodideReady = true;
        document.getElementById('loadingOverlay').classList.add('hidden');
        document.getElementById('runBtn').disabled = false;
        document.getElementById('statusDot').classList.remove('loading');
        document.getElementById('statusDot').classList.add('ready');
        document.getElementById('statusText').textContent = '就绪';
        const version = pyodide.runPython('import sys; sys.version.split()[0]');
        document.getElementById('versionInfo').textContent = 'Python ' + version;
      } catch (err) {
        document.querySelector('.loading-text').textContent = '加载失败';
        document.querySelector('.loading-subtext').textContent = err.message;
        console.error('Pyodide init error:', err);
      }
    }

    // ===== 运行代码 =====
    async function runCode() {
      if (!pyodideReady || !pyodide) {
        appendOutput('解释器尚未就绪，请稍候...', 'error');
        return;
      }

      const code = document.getElementById('codeEditor').value;
      const outputArea = document.getElementById('outputArea');

[126 more lines in file. Use offset=740 to continue.]


The HTML looks correct now. But the user is still experiencing issues. Let me check if there's a CORS issue or something else.

Actually, I think the issue might be that the Python HTTP server doesn't handle large files well, or there might be a caching issue. Let me try to restart the server and see if that helps.

But more importantly, I should check if the `pyodide.asm.js` is actually loading correctly. The `import()` call might fail because the browser is treating it as a module import but the file is not a module.

Wait, let me check if the `pyodide.asm.js` file is actually being served. The `curl` output shows it's accessible. But maybe the browser is loading it differently.

Let me check if there's a `.mjs` file that might be needed instead. The CDN has `pyodide.mjs` which is a module version. Maybe the `pyodide.min.js` is trying to load `pyodide.asm.js` via `import()` but the browser is having issues.

Actually, I think the real issue might be that the `pyodide.asm.js` is trying to load `pyodide.asm.wasm` with a relative path. Since the `pyodide.asm.js` is loaded via `import()`, the relative path might be resolved differently.

Let me check the browser's network tab. But I can't do that from the terminal. Let me try a different approach.

Actually, let me just check if the `pyodide.asm.js` is loading `pyodide.asm.wasm` with the correct path. The `locateFile` function should handle this, but maybe there's an issue with the `indexURL` parameter.

Let me try changing the `indexURL` to an absolute path instead of a relative path.

edit

pyodide = await loadPyodide({ indexURL: 'pyodide/' });

pyodide = await loadPyodide({ indexURL: './pyodide/' });


Successfully replaced 1 block(s) in /shumengya/www/python-wasm/index.html.

     ...
 710
 711     // ===== 初始化 Pyodide =====
 712     async function initPyodide() {
 713       try {
-714         pyodide = await loadPyodide({ indexURL: 'pyodide/' });
+714         pyodide = await loadPyodide({ indexURL: './pyodide/' });
 715         pyodideReady = true;
 716         document.getElementById('loadingOverlay').classList.add('hidden');
 717         document.getElementById('runBtn').disabled = false;
 718         document.getElementById('statusDot').classList.remove('loading');
     ...

--- /shumengya/www/python-wasm/index.html
+++ /shumengya/www/python-wasm/index.html
@@ -710,9 +710,9 @@

     // ===== 初始化 Pyodide =====
     async function initPyodide() {
       try {
-        pyodide = await loadPyodide({ indexURL: 'pyodide/' });
+        pyodide = await loadPyodide({ indexURL: './pyodide/' });
         pyodideReady = true;
         document.getElementById('loadingOverlay').classList.add('hidden');
         document.getElementById('runBtn').disabled = false;
         document.getElementById('statusDot').classList.remove('loading');