Micropip.freeze no work?
pip install pyodide-build
pyodide venv .venv-pyodide
.venv-pyodide/bin/pip install fastapi
.venv-pyodide/bin/python -c 'import micropip; print(micropip.freeze(), file=open("pyodide-lock.json","w"))'
.venv-pyodide/bin/pip freeze | grep fastapi # finds fastapi
cat pyodide-lock.json | grep fastapi # no fastapi??
Indeed we need some more robust test for micropip.freeze, especially its compatibility with pyodide-lock (https://github.com/pyodide/micropip/issues/88).
By the way, is it possible to install fastapi in Pyodide, without skipping some packages? When I try to install it in the browser, I get: Can't find a pure Python 3 wheel for 'ujson!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,>=4.0.1'.
Are you on latest? It works in pip.
@jaraco this might be a good first issue.
I'm getting started with this issue. Attempting to follow the repro instructions, I first don't want to run pip install pyodide-build, because that implies installing to a system Python or another virtualenv. So instead, I've found I can install using pipx but I need to supply the --include-deps in order to get the pyodide command (and not just the pyodide-build command).
Next, I tried to create the virtualenv, but it fails:
draft @ pyodide venv .venv
xbuild environment already exists, skipping download
Installing xbuild environment
Creating Pyodide virtualenv at .venv
Expected host Python version to be 3.11 but got version 3.12
draft @ _.rtn
1
It wasn't obvious to me at first the command had failed. The message
Expected host Python version to be 3.11 but got version 3.12
looks more like a warning or informational message than an error. This does remind me that I need to work on my shell prompt to show when the last command was a failure.
So it seems I need to install pyodide using Python 3.11. I used pipx to uninstall and then reinstalled with pipx install pyodide-build --include-deps --python 3.11 and now I'm able to create the virtualenv. \o/
After installing the virtualenv, I find that it doesn't honor pylauncher as I'd expect. Pylauncher does launch the Python in the virtualenv:
draft @ py -c 'import sys; print(sys.prefix)'
/Users/jaraco/draft/.venv
But when invoking pip, it seems to try to target the system environment:
draft @ py -m pip install fastapi
error: externally-managed-environment
× This environment is externally managed
╰─> ...
Read more about this behavior here: <https://peps.python.org/pep-0668/>
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
The way pylauncher works is it's supposed to use .venv if it exists, and it's doing that:
draft @ cat foo.py
import sys
print(sys.prefix)
draft @ py -m foo
/Users/jaraco/draft/.venv
but for some reason pip doesn't honor that expectation. That may be a separate issue deserving its own investigation. In the meantime, I'll invoke pip explicitly.
Edit: Invoking .venv/bin/python -m pip has the same behavior, so it seems that it's necessary to invoke .venv/bin/pip directly.
Invoking pip and python explicitly, I'm able to replicate the failed expectation:
draft @ .venv/bin/python -c "import micropip; print(micropip.freeze())" | jq .packages["fastapi"]
null
Attempting to editable-install micropip to the target environment, I encountered another issue. The metadata fails to uninstall due to pip not finding the required 'name' metadata.
draft @ .venv/bin/pip install -e ~/code/pyodide/micropip/
Looking in indexes: https://pypi.org/simple, file:///Users/jaraco/draft/.pyodide-xbuildenv/xbuildenv/pyodide-root/pypa_index
Obtaining file:///Users/jaraco/code/pyodide/micropip
Installing build dependencies ... done
Checking if build backend supports build_editable ... done
Getting requirements to build editable ... done
Preparing editable metadata (pyproject.toml) ... done
Requirement already satisfied: packaging>=23.0 in ./.venv/lib/python3.11/site-packages (from micropip==0.6.1.dev2+g43e55d4) (23.1)
Building wheels for collected packages: micropip
Building editable for micropip (pyproject.toml) ... done
Created wheel for micropip: filename=micropip-0.6.1.dev2+g43e55d4-0.editable-py3-none-any.whl size=14542 sha256=0b20ab4b0bc1b7f5dbe1e079ed1674d31f2933bb96d338fb898aad313eb5c1e6
Stored in directory: /private/var/folders/f2/2plv6q2n7l932m2x004jlw340000gn/T/pip-ephem-wheel-cache-m1kle4e6/wheels/29/18/3b/a9f9c53d7fd1f8885366f862b3f18b31b0a2908dda85340d5e
Successfully built micropip
Installing collected packages: micropip
Attempting uninstall: micropip
Found existing installation: micropip 0.5.0
Uninstalling micropip-0.5.0:
Successfully uninstalled micropip-0.5.0
WARNING: Skipping /Users/jaraco/draft/.venv/lib/python3.11/site-packages/micropip-0.5.0.dist-info due to invalid metadata entry 'name'
Successfully installed micropip-0.6.1.dev2+g43e55d4
WARNING: Skipping /Users/jaraco/draft/.venv/lib/python3.11/site-packages/micropip-0.5.0.dist-info due to invalid metadata entry 'name'
WARNING: Skipping /Users/jaraco/draft/.venv/lib/python3.11/site-packages/micropip-0.5.0.dist-info due to invalid metadata entry 'name'
WARNING: Skipping /Users/jaraco/draft/.venv/lib/python3.11/site-packages/micropip-0.5.0.dist-info due to invalid metadata entry 'name'
draft @ ls .venv/lib/python3.11/site-packages/micropip-0.5.0.dist-info/
INSTALLER PYODIDE_SOURCE
If I apply this diff:
micropip main @ git diff
diff --git a/micropip/_commands/freeze.py b/micropip/_commands/freeze.py
index 4a49dc5..6c2804a 100644
--- a/micropip/_commands/freeze.py
+++ b/micropip/_commands/freeze.py
@@ -26,11 +26,7 @@ def freeze() -> str:
name = dist.name
version = dist.version
url = dist.read_text("PYODIDE_URL")
- if url is None:
- continue
-
sha256 = dist.read_text("PYODIDE_SHA256")
- assert sha256
imports = (dist.read_text("top_level.txt") or "").split()
requires = dist.read_text("PYODIDE_REQUIRES")
if not requires:
FastAPI then appears in the output:
draft @ .venv/bin/python -c "import micropip; print(micropip.freeze())" | jq
{
"info": {
"arch": "wasm32",
"platform": "emscripten_3_1_46",
"python": "3.11.3",
"version": "0.25.1"
},
"packages": {
"aiohttp": {
"depends": [
"aiosignal",
"async-timeout",
"attrs",
"charset-normalizer",
"frozenlist",
"multidict",
"yarl"
],
"file_name": "aiohttp-3.8.6-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"aiohttp"
],
"install_dir": "site",
"name": "aiohttp",
"package_type": "package",
"sha256": "5dacfc27095a9e04e179d58dc0bf6462d60db233513553ab82f2b70d948b24a5",
"shared_library": false,
"unvendored_tests": true,
"version": "3.8.6"
},
"aiohttp-tests": {
"depends": [
"aiohttp"
],
"file_name": "aiohttp-tests.tar",
"imports": [],
"install_dir": "site",
"name": "aiohttp-tests",
"package_type": "package",
"sha256": "8f2adafe51fa8789f6c5ee5b725f20885835cc2abf4435da88a69c6d9dc93ff5",
"shared_library": false,
"unvendored_tests": false,
"version": "3.8.6"
},
"aiosignal": {
"depends": [
"frozenlist"
],
"file_name": "aiosignal-1.3.1-py3-none-any.whl",
"imports": [
"aiosignal"
],
"install_dir": "site",
"name": "aiosignal",
"package_type": "package",
"sha256": "452e85cb9cb368035b68f9941f648863c8da02e63b7da92bb8d717233d234b7f",
"shared_library": false,
"unvendored_tests": false,
"version": "1.3.1"
},
"annotated-types": {
"name": "annotated-types",
"version": "0.7.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"anyio": {
"name": "anyio",
"version": "4.3.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"anyio"
],
"depends": []
},
"asciitree": {
"depends": [],
"file_name": "asciitree-0.3.3-py3-none-any.whl",
"imports": [
"asciitree"
],
"install_dir": "site",
"name": "asciitree",
"package_type": "package",
"sha256": "43662d430f07ff43d8d567529c5b1e1f5f3e20629ff34fdcc395f0989ee83697",
"shared_library": false,
"unvendored_tests": false,
"version": "0.3.3"
},
"astropy": {
"depends": [
"distutils",
"packaging",
"numpy",
"pyerfa",
"pyyaml"
],
"file_name": "astropy-5.3.2-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"astropy"
],
"install_dir": "site",
"name": "astropy",
"package_type": "package",
"sha256": "81e43a497459149b8fbf03c459a566d0bbe1f502fe18f147a77c190ba47cb8f2",
"shared_library": false,
"unvendored_tests": false,
"version": "5.3.2"
},
"async-timeout": {
"depends": [],
"file_name": "async_timeout-4.0.3-py3-none-any.whl",
"imports": [
"async_timeout"
],
"install_dir": "site",
"name": "async-timeout",
"package_type": "package",
"sha256": "3d52b5c8125e267ad0443f1e6db230d19ba027946eb34f8e55de61d99cf46dd2",
"shared_library": false,
"unvendored_tests": false,
"version": "4.0.3"
},
"atomicwrites": {
"depends": [],
"file_name": "atomicwrites-1.4.1-py2.py3-none-any.whl",
"imports": [
"atomicwrites"
],
"install_dir": "site",
"name": "atomicwrites",
"package_type": "package",
"sha256": "b03bf1a5eeb95dfe0a2f6ed7cedde7d054031390d33a36238cd855d6048b7bab",
"shared_library": false,
"unvendored_tests": false,
"version": "1.4.1"
},
"attrs": {
"depends": [
"six"
],
"file_name": "attrs-23.1.0-py3-none-any.whl",
"imports": [
"attr",
"attrs"
],
"install_dir": "site",
"name": "attrs",
"package_type": "package",
"sha256": "bfeb888b962f07447a7941cafe06de8d396c8ac18995db045f37458834086dd0",
"shared_library": false,
"unvendored_tests": false,
"version": "23.1.0"
},
"autograd": {
"depends": [
"numpy",
"future"
],
"file_name": "autograd-1.6.2-py3-none-any.whl",
"imports": [
"autograd"
],
"install_dir": "site",
"name": "autograd",
"package_type": "package",
"sha256": "7b58ac091f658ce7d06ccaa7aa561c5e5e1da1fe74120551ed84b62fbc8cc78e",
"shared_library": false,
"unvendored_tests": true,
"version": "1.6.2"
},
"autograd-tests": {
"depends": [
"autograd"
],
"file_name": "autograd-tests.tar",
"imports": [],
"install_dir": "site",
"name": "autograd-tests",
"package_type": "package",
"sha256": "f4791dc86e9843516fe577f4db49eb186402c676f86c07acd0e409f2a019eb4f",
"shared_library": false,
"unvendored_tests": false,
"version": "1.6.2"
},
"awkward-cpp": {
"depends": [
"numpy"
],
"file_name": "awkward_cpp-26-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"awkward_cpp"
],
"install_dir": "site",
"name": "awkward-cpp",
"package_type": "package",
"sha256": "2394b0aa6b198242ff717ba7e92532fda878eb578cb24cdd455edf82503fdfd7",
"shared_library": false,
"unvendored_tests": false,
"version": "26"
},
"b2d": {
"depends": [
"numpy",
"pydantic",
"setuptools"
],
"file_name": "b2d-0.7.4-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"b2d"
],
"install_dir": "site",
"name": "b2d",
"package_type": "package",
"sha256": "149fc0248121cf1b8e5195d1b003bc03b6900ce563b9b64bccd13865593b2b8b",
"shared_library": false,
"unvendored_tests": false,
"version": "0.7.4"
},
"bcrypt": {
"depends": [],
"file_name": "bcrypt-4.0.1-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"bcrypt"
],
"install_dir": "site",
"name": "bcrypt",
"package_type": "package",
"sha256": "e9b2d778c6615b2ade88eac01e4b21ec7b4d6b51e05ac3c748aebb12e5f71910",
"shared_library": false,
"unvendored_tests": false,
"version": "4.0.1"
},
"beautifulsoup4": {
"depends": [
"soupsieve"
],
"file_name": "beautifulsoup4-4.12.2-py3-none-any.whl",
"imports": [
"bs4"
],
"install_dir": "site",
"name": "beautifulsoup4",
"package_type": "package",
"sha256": "dbe2f94facd8a454d2322368cb11d522d8d16987f4fc28f2dcce5b967fcb749b",
"shared_library": false,
"unvendored_tests": true,
"version": "4.12.2"
},
"beautifulsoup4-tests": {
"depends": [
"beautifulsoup4"
],
"file_name": "beautifulsoup4-tests.tar",
"imports": [],
"install_dir": "site",
"name": "beautifulsoup4-tests",
"package_type": "package",
"sha256": "7d6a84548cb6169d89d57e13635bdddda6083f9314032a2baea6aa2d12a9d201",
"shared_library": false,
"unvendored_tests": false,
"version": "4.12.2"
},
"biopython": {
"depends": [
"numpy"
],
"file_name": "biopython-1.81-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"Bio",
"BioSQL"
],
"install_dir": "site",
"name": "biopython",
"package_type": "package",
"sha256": "370551bd0e7430c2cb41c043780ccd0d1bd76f52ba0d521fc53f8ed55861bc38",
"shared_library": false,
"unvendored_tests": false,
"version": "1.81"
},
"bitarray": {
"depends": [],
"file_name": "bitarray-2.8.1-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"bitarray"
],
"install_dir": "site",
"name": "bitarray",
"package_type": "package",
"sha256": "f40653a95a2f1573daef91579d4661a2ec6a7ae59589060f9e87114655cd461c",
"shared_library": false,
"unvendored_tests": true,
"version": "2.8.1"
},
"bitarray-tests": {
"depends": [
"bitarray"
],
"file_name": "bitarray-tests.tar",
"imports": [],
"install_dir": "site",
"name": "bitarray-tests",
"package_type": "package",
"sha256": "818b276df6efc4d41f59cc80785a33ff46cceac2b6dd9fbd30eedb503547f9db",
"shared_library": false,
"unvendored_tests": false,
"version": "2.8.1"
},
"bitstring": {
"depends": [
"bitarray"
],
"file_name": "bitstring-4.1.1-py3-none-any.whl",
"imports": [
"bitstring"
],
"install_dir": "site",
"name": "bitstring",
"package_type": "package",
"sha256": "ae6cfeaefce7f828f157a41da419cdfc45f0f9cfc95112789789630bf0594746",
"shared_library": false,
"unvendored_tests": false,
"version": "4.1.1"
},
"bleach": {
"depends": [
"webencodings",
"packaging",
"six"
],
"file_name": "bleach-6.0.0-py3-none-any.whl",
"imports": [
"bleach"
],
"install_dir": "site",
"name": "bleach",
"package_type": "package",
"sha256": "05156da9303d247f6220038f6e5b8d4c7556dd8a8096034b4ab884c4717c894f",
"shared_library": false,
"unvendored_tests": false,
"version": "6.0.0"
},
"bokeh": {
"depends": [
"distutils",
"numpy",
"jinja2",
"pandas",
"pillow",
"python-dateutil",
"six",
"typing-extensions",
"pyyaml",
"xyzservices"
],
"file_name": "bokeh-3.2.2-py3-none-any.whl",
"imports": [
"bokeh"
],
"install_dir": "site",
"name": "bokeh",
"package_type": "package",
"sha256": "17003e3bdc4fa2bcd44a5d02ad059f58811043744a448e70d05a81d6ba6bda5e",
"shared_library": false,
"unvendored_tests": false,
"version": "3.2.2"
},
"boost-histogram": {
"depends": [
"numpy"
],
"file_name": "boost_histogram-1.3.2-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"boost_histogram"
],
"install_dir": "site",
"name": "boost-histogram",
"package_type": "package",
"sha256": "ce665ab7dcf0587ff27e6c597435e4aaf7b5d6f41f2fb8e1ed7ebbefe61ebac6",
"shared_library": false,
"unvendored_tests": false,
"version": "1.3.2"
},
"brotli": {
"depends": [],
"file_name": "Brotli-1.0.9-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"brotli"
],
"install_dir": "site",
"name": "brotli",
"package_type": "package",
"sha256": "365b3669eb68f4c02165bd264ccac110a5be339186b13bb4743085b051ece13c",
"shared_library": false,
"unvendored_tests": false,
"version": "1.0.9"
},
"cachetools": {
"depends": [],
"file_name": "cachetools-5.3.1-py3-none-any.whl",
"imports": [
"cachetools"
],
"install_dir": "site",
"name": "cachetools",
"package_type": "package",
"sha256": "7eea389b99a6b055c4e781f739524209b0118324511348361ed0df4913e1a524",
"shared_library": false,
"unvendored_tests": false,
"version": "5.3.1"
},
"cartopy": {
"depends": [
"shapely",
"pyshp",
"pyproj",
"geos",
"matplotlib",
"scipy"
],
"file_name": "Cartopy-0.21.1-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"cartopy"
],
"install_dir": "site",
"name": "Cartopy",
"package_type": "package",
"sha256": "2ef1cc607f5c03465c24e495de3a216c75b34b603f97a78012acaa3e433cbad8",
"shared_library": false,
"unvendored_tests": true,
"version": "0.21.1"
},
"cartopy-tests": {
"depends": [
"cartopy"
],
"file_name": "Cartopy-tests.tar",
"imports": [],
"install_dir": "site",
"name": "Cartopy-tests",
"package_type": "package",
"sha256": "7f2b4cc2070bf73e0e68e3d2166c40f25deac5b2135f4fd054ac5db34938c234",
"shared_library": false,
"unvendored_tests": false,
"version": "0.21.1"
},
"cbor-diag": {
"depends": [],
"file_name": "cbor_diag-1.0.1-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"cbor_diag"
],
"install_dir": "site",
"name": "cbor-diag",
"package_type": "package",
"sha256": "6186e3bd2ef7e96a408d76b33d8d698d5179b714b545b8cfa39d86a26c2ca2f4",
"shared_library": false,
"unvendored_tests": false,
"version": "1.0.1"
},
"certifi": {
"name": "certifi",
"version": "2024.2.2",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"certifi"
],
"depends": []
},
"cffi": {
"depends": [
"pycparser"
],
"file_name": "cffi-1.15.1-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"cffi"
],
"install_dir": "site",
"name": "cffi",
"package_type": "package",
"sha256": "7302fca160c66d0d2e3a08b2e4310c16f1f8b07368e4a5efe07bf5d903057c3a",
"shared_library": false,
"unvendored_tests": false,
"version": "1.15.1"
},
"cffi-example": {
"depends": [
"cffi"
],
"file_name": "cffi_example-0.1-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"cffi_example"
],
"install_dir": "site",
"name": "cffi_example",
"package_type": "package",
"sha256": "c4f8d9ebf5d886862124d5780795911dbe2eb01150588d25d620047bc12a6ac7",
"shared_library": false,
"unvendored_tests": false,
"version": "0.1"
},
"cftime": {
"depends": [
"numpy"
],
"file_name": "cftime-1.6.2-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"cftime"
],
"install_dir": "site",
"name": "cftime",
"package_type": "package",
"sha256": "6868baa7e1e1184ff97c3cc8c8c3bdbc99137109d7d07199741ea4500672fe10",
"shared_library": false,
"unvendored_tests": false,
"version": "1.6.2"
},
"charset-normalizer": {
"depends": [],
"file_name": "charset_normalizer-3.3.2-py3-none-any.whl",
"imports": [
"charset_normalizer"
],
"install_dir": "site",
"name": "charset-normalizer",
"package_type": "package",
"sha256": "4bd1d6d54704ffa7fb3235f22a11dcbbdf45ade28fc51c5329596b889886a772",
"shared_library": false,
"unvendored_tests": false,
"version": "3.3.2"
},
"click": {
"name": "click",
"version": "8.1.7",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"click"
],
"depends": []
},
"cligj": {
"depends": [
"click"
],
"file_name": "cligj-0.7.2-py3-none-any.whl",
"imports": [
"cligj"
],
"install_dir": "site",
"name": "cligj",
"package_type": "package",
"sha256": "153633543becaf42b7d668d2f6622df8ef81a60d9f7a6236bae9fcd958bc59f9",
"shared_library": false,
"unvendored_tests": false,
"version": "0.7.2"
},
"cloudpickle": {
"depends": [],
"file_name": "cloudpickle-2.2.1-py3-none-any.whl",
"imports": [
"cloudpickle"
],
"install_dir": "site",
"name": "cloudpickle",
"package_type": "package",
"sha256": "ed461402550e3fe74ca3ce86e6176a6fb82062bba4802860e558b965af5894fc",
"shared_library": false,
"unvendored_tests": false,
"version": "2.2.1"
},
"cmyt": {
"depends": [
"colorspacious",
"matplotlib",
"more-itertools",
"numpy"
],
"file_name": "cmyt-1.3.1-py3-none-any.whl",
"imports": [
"cmyt"
],
"install_dir": "site",
"name": "cmyt",
"package_type": "package",
"sha256": "2967c67e358291863d5ffb724b5d09800339ea3ba3921409d0f31d83406e228e",
"shared_library": false,
"unvendored_tests": true,
"version": "1.3.1"
},
"cmyt-tests": {
"depends": [
"cmyt"
],
"file_name": "cmyt-tests.tar",
"imports": [],
"install_dir": "site",
"name": "cmyt-tests",
"package_type": "package",
"sha256": "32e14b49bbb8957a1a5d5f313c0208addde3e1fa4f464b5ce7d84334f6b4d086",
"shared_library": false,
"unvendored_tests": false,
"version": "1.3.1"
},
"colorspacious": {
"depends": [
"numpy"
],
"file_name": "colorspacious-1.1.2-py2.py3-none-any.whl",
"imports": [
"colorspacious"
],
"install_dir": "site",
"name": "colorspacious",
"package_type": "package",
"sha256": "0032bbe174dc9cd644eb8fd6dc96b7887165b17c7bdaa1054f4afcaeed93dbc6",
"shared_library": false,
"unvendored_tests": false,
"version": "1.1.2"
},
"contourpy": {
"depends": [
"numpy"
],
"file_name": "contourpy-1.2.0-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"contourpy"
],
"install_dir": "site",
"name": "contourpy",
"package_type": "package",
"sha256": "212a04720a2d0114dd749ba5d573bcdf99d11319420f87dec4adfb3f5934bb0c",
"shared_library": false,
"unvendored_tests": false,
"version": "1.2.0"
},
"coolprop": {
"depends": [
"numpy",
"matplotlib"
],
"file_name": "CoolProp-6.6.0-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"CoolProp"
],
"install_dir": "site",
"name": "coolprop",
"package_type": "package",
"sha256": "5efcf0db5f31ef8624fa19078b2bfb0ed050de7d7dc60b750f65ed31745a9a5b",
"shared_library": false,
"unvendored_tests": true,
"version": "6.6.0"
},
"coolprop-tests": {
"depends": [
"coolprop"
],
"file_name": "coolprop-tests.tar",
"imports": [],
"install_dir": "site",
"name": "coolprop-tests",
"package_type": "package",
"sha256": "730b9e72e8d92b96ee5f3a891b9ae9a268d472385460f19ec50ab4de17c05354",
"shared_library": false,
"unvendored_tests": false,
"version": "6.6.0"
},
"coverage": {
"depends": [
"sqlite3"
],
"file_name": "coverage-7.3.0-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"coverage"
],
"install_dir": "site",
"name": "coverage",
"package_type": "package",
"sha256": "547eafbf0472418f89947c5b87d39bf75658f3409ec17dfad6664d94324690f6",
"shared_library": false,
"unvendored_tests": false,
"version": "7.3.0"
},
"cpp-exceptions-test": {
"depends": [],
"file_name": "cpp-exceptions-test-0.1.zip",
"imports": [],
"install_dir": "dynlib",
"name": "cpp-exceptions-test",
"package_type": "shared_library",
"sha256": "d64cb2fe52113b911fce4d276c507e2235e1c1987ac1fd7ab4afa83a28e309a7",
"shared_library": true,
"unvendored_tests": false,
"version": "0.1"
},
"cramjam": {
"depends": [],
"file_name": "cramjam-2.6.2-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"cramjam"
],
"install_dir": "site",
"name": "cramjam",
"package_type": "package",
"sha256": "72e0c6ab487caa0608f9a858c1bee9bffd91e7d2e540833b249021c3083acb5d",
"shared_library": false,
"unvendored_tests": false,
"version": "2.6.2"
},
"cryptography": {
"depends": [
"openssl",
"six",
"cffi"
],
"file_name": "cryptography-39.0.2-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"cryptography"
],
"install_dir": "site",
"name": "cryptography",
"package_type": "package",
"sha256": "1242bb2e27e84c59e84c5f9ad797c733778e17b43154da74b335aeb95ce82c02",
"shared_library": false,
"unvendored_tests": false,
"version": "39.0.2"
},
"cssselect": {
"depends": [],
"file_name": "cssselect-1.2.0-py2.py3-none-any.whl",
"imports": [
"cssselect"
],
"install_dir": "site",
"name": "cssselect",
"package_type": "package",
"sha256": "18b9017b19489fc8c5b2ac239b59aed51315feafc473150815f2ea8c3076e56c",
"shared_library": false,
"unvendored_tests": false,
"version": "1.2.0"
},
"cycler": {
"depends": [
"six"
],
"file_name": "cycler-0.11.0-py3-none-any.whl",
"imports": [
"cycler"
],
"install_dir": "site",
"name": "cycler",
"package_type": "package",
"sha256": "fb8c2099d30eccb6a28081968622a6b641eaccbc50c8e0fff3b89f9c315f74ca",
"shared_library": false,
"unvendored_tests": false,
"version": "0.11.0"
},
"cytoolz": {
"depends": [
"nose",
"toolz"
],
"file_name": "cytoolz-0.12.2-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"cytoolz"
],
"install_dir": "site",
"name": "cytoolz",
"package_type": "package",
"sha256": "a34ee8f0d0d016a6f5820faa3e56f863cf4ab5c77473077403071e6b14ef0605",
"shared_library": false,
"unvendored_tests": true,
"version": "0.12.2"
},
"cytoolz-tests": {
"depends": [
"cytoolz"
],
"file_name": "cytoolz-tests.tar",
"imports": [],
"install_dir": "site",
"name": "cytoolz-tests",
"package_type": "package",
"sha256": "cb3d851b192e2e1d01923ca503cda30a076df1e7b5322c612d052b5b336ad29d",
"shared_library": false,
"unvendored_tests": false,
"version": "0.12.2"
},
"decorator": {
"depends": [],
"file_name": "decorator-5.1.1-py3-none-any.whl",
"imports": [
"decorator"
],
"install_dir": "site",
"name": "decorator",
"package_type": "package",
"sha256": "8cb05ef07cfd69ce2524789dff0f71898e70f1df46cd26bff8c0a344058d447f",
"shared_library": false,
"unvendored_tests": false,
"version": "5.1.1"
},
"demes": {
"depends": [
"attrs",
"ruamel.yaml"
],
"file_name": "demes-0.2.3-py3-none-any.whl",
"imports": [
"demes"
],
"install_dir": "site",
"name": "demes",
"package_type": "package",
"sha256": "35800f72738148641d3aed2bf2b28aab4d7269facc4393a16faa145f6a1e5fec",
"shared_library": false,
"unvendored_tests": false,
"version": "0.2.3"
},
"deprecation": {
"depends": [
"packaging"
],
"file_name": "deprecation-2.1.0-py2.py3-none-any.whl",
"imports": [
"deprecation"
],
"install_dir": "site",
"name": "deprecation",
"package_type": "package",
"sha256": "a778673281a6c69b2b84c38add2d9e4229a2a4792d4bde448529ac19b0ca0c81",
"shared_library": false,
"unvendored_tests": false,
"version": "2.1.0"
},
"distlib": {
"depends": [],
"file_name": "distlib-0.3.7-py2.py3-none-any.whl",
"imports": [
"distlib"
],
"install_dir": "site",
"name": "distlib",
"package_type": "package",
"sha256": "6a9648d64686e42becb258a718635daf4ed23171722e1694e908180407f03d87",
"shared_library": false,
"unvendored_tests": false,
"version": "0.3.7"
},
"distutils": {
"depends": [],
"file_name": "distutils-1.0.0.zip",
"imports": [
"distutils"
],
"install_dir": "stdlib",
"name": "distutils",
"package_type": "cpython_module",
"sha256": "b75494eafa9f01d738f7d76846dd92cbf5ce2ebc5e360898a62720c0c1d0817c",
"shared_library": true,
"unvendored_tests": false,
"version": "1.0.0"
},
"dnspython": {
"name": "dnspython",
"version": "2.6.1",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"docutils": {
"depends": [],
"file_name": "docutils-0.20.1-py3-none-any.whl",
"imports": [
"docutils"
],
"install_dir": "site",
"name": "docutils",
"package_type": "package",
"sha256": "6c1288c649310f8fca88b68bb9626c057dde7adf0da3e9c83ec0a26fa3d56d8b",
"shared_library": false,
"unvendored_tests": false,
"version": "0.20.1"
},
"email-validator": {
"name": "email_validator",
"version": "2.1.1",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"email_validator"
],
"depends": []
},
"exceptiongroup": {
"depends": [],
"file_name": "exceptiongroup-1.1.3-py3-none-any.whl",
"imports": [
"exceptiongroup"
],
"install_dir": "site",
"name": "exceptiongroup",
"package_type": "package",
"sha256": "5c5cbd3b2ba528fb3903756ac1818107705dfb432257cc0b02dd1da3d981b1c2",
"shared_library": false,
"unvendored_tests": false,
"version": "1.1.3"
},
"fastapi": {
"name": "fastapi",
"version": "0.111.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"fastapi-cli": {
"name": "fastapi-cli",
"version": "0.0.4",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"fastparquet": {
"depends": [
"cramjam",
"numpy",
"pandas",
"fsspec",
"packaging"
],
"file_name": "fastparquet-2023.7.0-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"fastparquet"
],
"install_dir": "site",
"name": "fastparquet",
"package_type": "package",
"sha256": "aa64c2029db98a10d9b6c56c3b4e57fe5e720a298338d3048e5a564b28b1ee9f",
"shared_library": false,
"unvendored_tests": false,
"version": "2023.7.0"
},
"fiona": {
"depends": [
"attrs",
"certifi",
"setuptools",
"six",
"click",
"cligj"
],
"file_name": "Fiona-1.8.22-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"fiona"
],
"install_dir": "site",
"name": "fiona",
"package_type": "package",
"sha256": "d9d27c11c6406c5366e3ec1dce47e46cf4c545ac9c6ff2e847e9217e7db11870",
"shared_library": false,
"unvendored_tests": false,
"version": "1.8.22"
},
"fonttools": {
"depends": [],
"file_name": "fonttools-4.42.1-py3-none-any.whl",
"imports": [
"fontTools"
],
"install_dir": "site",
"name": "fonttools",
"package_type": "package",
"sha256": "44c48ebb8e54253bee8af587bf2685a16e00860377a2a1cf63cff5532e87a437",
"shared_library": false,
"unvendored_tests": false,
"version": "4.42.1"
},
"fpcast-test": {
"depends": [],
"file_name": "fpcast_test-0.1.1-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"fpcast_test"
],
"install_dir": "site",
"name": "fpcast-test",
"package_type": "package",
"sha256": "0a897910554decc8c2af7f9e5a3c05bbfd5e4a4ad759539f6e8bd7d7bf87d59a",
"shared_library": false,
"unvendored_tests": false,
"version": "0.1.1"
},
"freesasa": {
"depends": [],
"file_name": "freesasa-2.2.0.post3-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"freesasa"
],
"install_dir": "site",
"name": "freesasa",
"package_type": "package",
"sha256": "673fa633c43fa28ecd7661327f7f4cedd7c45a709735fc9b08d6dd46e9a0c6b5",
"shared_library": false,
"unvendored_tests": false,
"version": "2.2.0.post3"
},
"frozenlist": {
"depends": [],
"file_name": "frozenlist-1.4.0-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"frozenlist"
],
"install_dir": "site",
"name": "frozenlist",
"package_type": "package",
"sha256": "8510a99c51ccf7ba137a78184559571415902fb3b502d1976604e4722df77008",
"shared_library": false,
"unvendored_tests": false,
"version": "1.4.0"
},
"fsspec": {
"depends": [],
"file_name": "fsspec-2023.6.0-py3-none-any.whl",
"imports": [
"fsspec"
],
"install_dir": "site",
"name": "fsspec",
"package_type": "package",
"sha256": "8d032f447841f000f4e2db022bc68a6cfd0b895cdc6bd6c54e3a75cdafc4974e",
"shared_library": false,
"unvendored_tests": true,
"version": "2023.6.0"
},
"fsspec-tests": {
"depends": [
"fsspec"
],
"file_name": "fsspec-tests.tar",
"imports": [],
"install_dir": "site",
"name": "fsspec-tests",
"package_type": "package",
"sha256": "28c1ceda3eb9abba21131a5edad6729fbc402e15d8809d0e63529c9471db5d31",
"shared_library": false,
"unvendored_tests": false,
"version": "2023.6.0"
},
"future": {
"depends": [],
"file_name": "future-0.18.3-py3-none-any.whl",
"imports": [
"future"
],
"install_dir": "site",
"name": "future",
"package_type": "package",
"sha256": "f8304342e4be16ecf428aae0f58e6fbff1b88a94b420c6858f68e84c8adeeb6d",
"shared_library": false,
"unvendored_tests": true,
"version": "0.18.3"
},
"future-tests": {
"depends": [
"future"
],
"file_name": "future-tests.tar",
"imports": [],
"install_dir": "site",
"name": "future-tests",
"package_type": "package",
"sha256": "db020f5e65d1decafd3162f973c02db7411d45881dd42f54199d03146a6071c8",
"shared_library": false,
"unvendored_tests": false,
"version": "0.18.3"
},
"galpy": {
"depends": [
"numpy",
"scipy",
"matplotlib",
"astropy",
"future",
"setuptools"
],
"file_name": "galpy-1.9.0-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"galpy"
],
"install_dir": "site",
"name": "galpy",
"package_type": "package",
"sha256": "e5331bdcfdcdff50ede4b0b485b5e4fa0c8f5d1bcde9b41177f49ccbc7d1d883",
"shared_library": false,
"unvendored_tests": false,
"version": "1.9.0"
},
"gdal": {
"depends": [
"geos"
],
"file_name": "gdal-3.5.1.zip",
"imports": [],
"install_dir": "dynlib",
"name": "gdal",
"package_type": "shared_library",
"sha256": "928ca6712477d3a4e2e53d4ec7b37e50b72a77ec2e318ee31b506652b106ac84",
"shared_library": true,
"unvendored_tests": false,
"version": "3.5.1"
},
"gensim": {
"depends": [
"numpy",
"scipy",
"six",
"smart_open"
],
"file_name": "gensim-4.3.1-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"gensim"
],
"install_dir": "site",
"name": "gensim",
"package_type": "package",
"sha256": "693314a9010bc570a85790c33431ef403db5a597da4afb198d52efbd241d32e7",
"shared_library": false,
"unvendored_tests": true,
"version": "4.3.1"
},
"gensim-tests": {
"depends": [
"gensim"
],
"file_name": "gensim-tests.tar",
"imports": [],
"install_dir": "site",
"name": "gensim-tests",
"package_type": "package",
"sha256": "8d5086ac15d5d8709a809a9438be8cb9912ccb0073e9304f4dd67064f0d471ea",
"shared_library": false,
"unvendored_tests": false,
"version": "4.3.1"
},
"geopandas": {
"depends": [
"shapely",
"fiona",
"pyproj",
"packaging",
"pandas"
],
"file_name": "geopandas-0.13.2-py3-none-any.whl",
"imports": [
"geopandas"
],
"install_dir": "site",
"name": "geopandas",
"package_type": "package",
"sha256": "8770de3ec6e78915f4af15d27cb50d6c3dbeb158fcf0e580de9e72142cd4b938",
"shared_library": false,
"unvendored_tests": true,
"version": "0.13.2"
},
"geopandas-tests": {
"depends": [
"geopandas"
],
"file_name": "geopandas-tests.tar",
"imports": [],
"install_dir": "site",
"name": "geopandas-tests",
"package_type": "package",
"sha256": "482923f2be7952335340e5ed177f573532e8fbb14fbfdd446e64eefa0ba6b0bb",
"shared_library": false,
"unvendored_tests": false,
"version": "0.13.2"
},
"geos": {
"depends": [],
"file_name": "geos-3.10.3.zip",
"imports": [],
"install_dir": "dynlib",
"name": "geos",
"package_type": "shared_library",
"sha256": "cc272817d15a58e0528e04fe7438b28a6326efac75ef30d202afafe5e6a3d78d",
"shared_library": true,
"unvendored_tests": false,
"version": "3.10.3"
},
"gmpy2": {
"depends": [],
"file_name": "gmpy2-2.1.5-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"gmpy2"
],
"install_dir": "site",
"name": "gmpy2",
"package_type": "package",
"sha256": "c7fdc25deb1bfcf2134f0908efd3766791859f2cfb59471a5dc0f8dd7989924e",
"shared_library": false,
"unvendored_tests": false,
"version": "2.1.5"
},
"gsw": {
"depends": [
"numpy"
],
"file_name": "gsw-3.6.16-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"gsw"
],
"install_dir": "site",
"name": "gsw",
"package_type": "package",
"sha256": "322e02d2cc4b7ec6fe109c93994abcd501177231652f6d3f190a1b4f130bc07b",
"shared_library": false,
"unvendored_tests": true,
"version": "3.6.16"
},
"gsw-tests": {
"depends": [
"gsw"
],
"file_name": "gsw-tests.tar",
"imports": [],
"install_dir": "site",
"name": "gsw-tests",
"package_type": "package",
"sha256": "0225cb0576fd4f00da8dd8f05a74f5999f4901cd95d95c12da8c018f0d6a87ee",
"shared_library": false,
"unvendored_tests": false,
"version": "3.6.16"
},
"h11": {
"name": "h11",
"version": "0.14.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"h11"
],
"depends": []
},
"h5py": {
"depends": [
"numpy",
"pkgconfig"
],
"file_name": "h5py-3.7.0-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"h5py"
],
"install_dir": "site",
"name": "h5py",
"package_type": "package",
"sha256": "284f4f4db445a047bbd1f5ef4f85b03ab90710ae719f500724725253ed52a87c",
"shared_library": false,
"unvendored_tests": true,
"version": "3.7.0"
},
"h5py-tests": {
"depends": [
"h5py"
],
"file_name": "h5py-tests.tar",
"imports": [],
"install_dir": "site",
"name": "h5py-tests",
"package_type": "package",
"sha256": "439141ffaa93c6a569a6b1214d6953d3d4b8f4e9251ad6dfcddb3120fc5dc180",
"shared_library": false,
"unvendored_tests": false,
"version": "3.7.0"
},
"hashlib": {
"depends": [
"openssl"
],
"file_name": "hashlib-1.0.0.zip",
"imports": [
"_hashlib"
],
"install_dir": "stdlib",
"name": "hashlib",
"package_type": "cpython_module",
"sha256": "96545d5e075cdbfdd26689b56bd4cd6bd705636043e721db3f19f0994ff73a61",
"shared_library": true,
"unvendored_tests": false,
"version": "1.0.0"
},
"html5lib": {
"depends": [
"webencodings",
"six"
],
"file_name": "html5lib-1.1-py2.py3-none-any.whl",
"imports": [
"html5lib"
],
"install_dir": "site",
"name": "html5lib",
"package_type": "package",
"sha256": "de95ce171249cec12df3b4586e98637fb49d2c61c6796dd4e92e46d9e8dbe4dd",
"shared_library": false,
"unvendored_tests": false,
"version": "1.1"
},
"httpcore": {
"name": "httpcore",
"version": "1.0.5",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"httptools": {
"name": "httptools",
"version": "0.6.1",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"httptools"
],
"depends": []
},
"httpx": {
"name": "httpx",
"version": "0.27.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"idna": {
"name": "idna",
"version": "3.7",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"igraph": {
"depends": [
"texttable"
],
"file_name": "igraph-0.10.6-cp39-abi3-emscripten_3_1_46_wasm32.whl",
"imports": [
"igraph"
],
"install_dir": "site",
"name": "igraph",
"package_type": "package",
"sha256": "512af240864de8da3c2aac61c507ccefbfcbeac3c6bbb7b853f9eeaa561b4771",
"shared_library": false,
"unvendored_tests": false,
"version": "0.10.6"
},
"imageio": {
"depends": [
"numpy",
"pillow"
],
"file_name": "imageio-2.31.1-py3-none-any.whl",
"imports": [
"imageio"
],
"install_dir": "site",
"name": "imageio",
"package_type": "package",
"sha256": "dcbcfd1c1dfaf27dfa9d9398723fe7f3c6c6bf7d76306cc13dc4c99e55645d9b",
"shared_library": false,
"unvendored_tests": false,
"version": "2.31.1"
},
"iniconfig": {
"depends": [],
"file_name": "iniconfig-2.0.0-py3-none-any.whl",
"imports": [
"iniconfig"
],
"install_dir": "site",
"name": "iniconfig",
"package_type": "package",
"sha256": "55829da7bce5e900f4e1027b0160010a5f19415e3a1580fa9122499f93d08df5",
"shared_library": false,
"unvendored_tests": false,
"version": "2.0.0"
},
"jedi": {
"depends": [
"parso"
],
"file_name": "jedi-0.19.0-py2.py3-none-any.whl",
"imports": [
"jedi"
],
"install_dir": "site",
"name": "jedi",
"package_type": "package",
"sha256": "201728f959e5244ab625a6818051be174a826a87c6df566acf8db1dba0a4d8db",
"shared_library": false,
"unvendored_tests": true,
"version": "0.19.0"
},
"jedi-tests": {
"depends": [
"jedi"
],
"file_name": "jedi-tests.tar",
"imports": [],
"install_dir": "site",
"name": "jedi-tests",
"package_type": "package",
"sha256": "90203b4f196c1a6680fa3bdd0930d11d047df3d739c660ae28a4e47b007975db",
"shared_library": false,
"unvendored_tests": false,
"version": "0.19.0"
},
"jinja2": {
"name": "Jinja2",
"version": "3.1.4",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"joblib": {
"depends": [
"distutils"
],
"file_name": "joblib-1.3.2-py3-none-any.whl",
"imports": [
"joblib"
],
"install_dir": "site",
"name": "joblib",
"package_type": "package",
"sha256": "e5fa1a44f8dca5780346f00f1698861d846d4b6365c780a61826adcd299ae740",
"shared_library": false,
"unvendored_tests": true,
"version": "1.3.2"
},
"joblib-tests": {
"depends": [
"joblib"
],
"file_name": "joblib-tests.tar",
"imports": [],
"install_dir": "site",
"name": "joblib-tests",
"package_type": "package",
"sha256": "1eb0636fa5a6c4ba727e35135587885b7f83d934be2c010b2ea2fd8589e9ef8e",
"shared_library": false,
"unvendored_tests": false,
"version": "1.3.2"
},
"jsonschema": {
"depends": [
"attrs",
"pyrsistent"
],
"file_name": "jsonschema-4.17.3-py3-none-any.whl",
"imports": [
"jsonschema"
],
"install_dir": "site",
"name": "jsonschema",
"package_type": "package",
"sha256": "ce29a46d382227b0243574e9993712283e890c88f33eaf511a16837d25e9ad9a",
"shared_library": false,
"unvendored_tests": true,
"version": "4.17.3"
},
"jsonschema-tests": {
"depends": [
"jsonschema"
],
"file_name": "jsonschema-tests.tar",
"imports": [],
"install_dir": "site",
"name": "jsonschema-tests",
"package_type": "package",
"sha256": "f5f8356cfc0d28875fffe1e54180f8929d9856f52a4b6a92d88903c7dc648efb",
"shared_library": false,
"unvendored_tests": false,
"version": "4.17.3"
},
"kiwisolver": {
"depends": [],
"file_name": "kiwisolver-1.4.4-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"kiwisolver"
],
"install_dir": "site",
"name": "kiwisolver",
"package_type": "package",
"sha256": "8b6330276ee0c47dabbab6a84a4c7411cfc5d7aee3e1686cf561d6a3cb3bd042",
"shared_library": false,
"unvendored_tests": false,
"version": "1.4.4"
},
"lazy-loader": {
"depends": [],
"file_name": "lazy_loader-0.3-py3-none-any.whl",
"imports": [
"lazy_loader"
],
"install_dir": "site",
"name": "lazy_loader",
"package_type": "package",
"sha256": "d9c3b21a25ac46cbec8e4a26a7d9ac0f2fa59e3caa0ef83f0c16ea501ef74f04",
"shared_library": false,
"unvendored_tests": true,
"version": "0.3"
},
"lazy-loader-tests": {
"depends": [
"lazy_loader"
],
"file_name": "lazy_loader-tests.tar",
"imports": [],
"install_dir": "site",
"name": "lazy_loader-tests",
"package_type": "package",
"sha256": "946f97e09a2681dd7b72076cc31c623d9f557ed8f20ed254c3830f90dcc1bd81",
"shared_library": false,
"unvendored_tests": false,
"version": "0.3"
},
"lazy-object-proxy": {
"depends": [],
"file_name": "lazy_object_proxy-1.9.0-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"lazy_object_proxy"
],
"install_dir": "site",
"name": "lazy-object-proxy",
"package_type": "package",
"sha256": "b7ac7ec5737ceeb081d2939874fcbfdf8d0805ac29b56d3bc860bfda33e9c580",
"shared_library": false,
"unvendored_tests": false,
"version": "1.9.0"
},
"libhdf5": {
"depends": [],
"file_name": "libhdf5-1.12.1.zip",
"imports": [],
"install_dir": "dynlib",
"name": "libhdf5",
"package_type": "shared_library",
"sha256": "50a7e63e1d00ec776ef7908410231425cf3b8c96affc3a216657fb318e85d6d6",
"shared_library": true,
"unvendored_tests": false,
"version": "1.12.1"
},
"libheif": {
"depends": [],
"file_name": "libheif-1.12.0.zip",
"imports": [],
"install_dir": "dynlib",
"name": "libheif",
"package_type": "shared_library",
"sha256": "063b073832632ee58cf5931bad45721d00032bb3c6c98f5bdbca77de52b2961e",
"shared_library": true,
"unvendored_tests": false,
"version": "1.12.0"
},
"libmagic": {
"depends": [],
"file_name": "libmagic-5.42.zip",
"imports": [],
"install_dir": "dynlib",
"name": "libmagic",
"package_type": "shared_library",
"sha256": "dd6eb6b211961309cf05d2f56b0d37168fef6323c6ce7f7c7f990be540fc2c6a",
"shared_library": true,
"unvendored_tests": false,
"version": "5.42"
},
"libnetcdf": {
"depends": [],
"file_name": "libnetcdf-4.9.2.zip",
"imports": [],
"install_dir": "dynlib",
"name": "libnetcdf",
"package_type": "shared_library",
"sha256": "12c1848ac76e6812dc4cb6e9cf98dd4202d205b8c3f28b9124d23b777336464e",
"shared_library": true,
"unvendored_tests": false,
"version": "4.9.2"
},
"lightgbm": {
"depends": [
"numpy",
"scipy",
"scikit-learn"
],
"file_name": "lightgbm-4.3.0-py3-none-emscripten_3_1_46_wasm32.whl",
"imports": [
"lightgbm"
],
"install_dir": "site",
"name": "lightgbm",
"package_type": "package",
"sha256": "cfc17222a911f0ed4b290e8dae6c009735b4e34b4e5560ea8c5afa99f4db061c",
"shared_library": false,
"unvendored_tests": false,
"version": "4.3.0"
},
"logbook": {
"depends": [],
"file_name": "Logbook-1.6.0-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"logbook"
],
"install_dir": "site",
"name": "logbook",
"package_type": "package",
"sha256": "433801f3e66706f15d5939a662814e3786131fd934de33f6935803fd88a05d1c",
"shared_library": false,
"unvendored_tests": false,
"version": "1.6.0"
},
"lxml": {
"depends": [],
"file_name": "lxml-4.9.3-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"lxml"
],
"install_dir": "site",
"name": "lxml",
"package_type": "package",
"sha256": "b0591abd915683c44f04f128195aaea3f04f9406045e5b12101dea8c537bbd2e",
"shared_library": false,
"unvendored_tests": false,
"version": "4.9.3"
},
"lzma": {
"depends": [],
"file_name": "lzma-1.0.0.zip",
"imports": [
"lzma",
"_lzma"
],
"install_dir": "stdlib",
"name": "lzma",
"package_type": "cpython_module",
"sha256": "4bd809931c88480b9628dfd4d4c6488cc86e0b5ec06ebc56c800fe7f7bf7e8d4",
"shared_library": true,
"unvendored_tests": false,
"version": "1.0.0"
},
"markdown-it-py": {
"name": "markdown-it-py",
"version": "3.0.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"markupsafe": {
"name": "MarkupSafe",
"version": "2.1.5",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"markupsafe"
],
"depends": []
},
"matplotlib": {
"depends": [
"cycler",
"fonttools",
"kiwisolver",
"numpy",
"packaging",
"pillow",
"pyparsing",
"python-dateutil",
"pytz",
"matplotlib-pyodide"
],
"file_name": "matplotlib-3.5.2-cp311-cp311-emscripten_3_1_46_wasm32.whl",
"imports": [
"pylab",
"mpl_toolkits",
"matplotlib"
],
"install_dir": "site",
"name": "matplotlib",
"package_type": "package",
"sha256": "f7bfdbc3653a9f7bc7273d6ebd4f5f770cd08c88854ff3e66c5dd62395568f72",
"shared_library": false,
"unvendored_tests": true,
"version": "3.5.2"
},
"matplotlib-pyodide": {
"depends": [],
"file_name": "matplotlib_pyodide-0.2.0-py3-none-any.whl",
"imports": [
"matplotlib_pyodide"
],
"install_dir": "site",
"name": "matplotlib-pyodide",
"package_type": "package",
"sha256": "ef09d7009e902a3ba385d6be761f960c003e4ebf43140bd1458cedfd9b0c2a74",
"shared_library": false,
"unvendored_tests": false,
"version": "0.2.0"
},
"matplotlib-tests": {
"depends": [
"matplotlib"
],
"file_name": "matplotlib-tests.tar",
"imports": [],
"install_dir": "site",
"name": "matplotlib-tests",
"package_type": "package",
"sha256": "a703adecc0e9a9c8743e2fa1fda080dbfffdfef66fef2fd2002599b53f53ae5c",
"shared_library": false,
"unvendored_tests": false,
"version": "3.5.2"
},
"mdurl": {
"name": "mdurl",
"version": "0.1.2",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"micropip": {
"name": "micropip",
"version": "0.6.1.dev2+g43e55d4",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"micropip"
],
"depends": []
},
"mne": {
"depends": [
"distutils",
"numpy",
"scipy",
"setuptools",
"decorator"
],
"file_name": "mne-1.5.0-py3-none-any.whl",
"imports": [
"mne"
],
"install_dir": "site",
"name": "mne",
"package_type": "package",
"sha256": "bb498b873427f55be8f72a252177a465e4710ef2c6c4f7958039635fa699d55e",
"shared_library": false,
"unvendored_tests": true,
"version": "1.5.0"
},
"mne-tests": {
"depends": [
"mne"
],
"file_name": "mne-tests.tar",
"imports": [],
"install_dir": "site",
"name": "mne-tests",
"package_type": "package",
"sha256": "df384a92e3574942c92e5964f472cfa28d5591b519163de0927eb63444d17f55",
"shared_library": false,
"unvendored_tests": false,
"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": {
"name": "orjson",
"version": "3.10.3",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"packaging": {
"name": "packaging",
"version": "23.1",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"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"
},
"pip": {
"name": "pip",
"version": "24.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"pip"
],
"depends": []
},
"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": {
"name": "pydantic",
"version": "2.7.1",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"pydantic-core": {
"name": "pydantic_core",
"version": "2.18.2",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"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": {
"name": "Pygments",
"version": "2.18.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"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-dotenv": {
"name": "python-dotenv",
"version": "1.0.1",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"dotenv"
],
"depends": []
},
"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-multipart": {
"name": "python-multipart",
"version": "0.0.9",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"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": {
"name": "PyYAML",
"version": "6.0.1",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"_yaml",
"yaml"
],
"depends": []
},
"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"
},
"rich": {
"name": "rich",
"version": "13.7.1",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"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": {
"name": "setuptools",
"version": "69.5.1",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"_distutils_hack",
"pkg_resources",
"setuptools"
],
"depends": []
},
"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"
},
"shellingham": {
"name": "shellingham",
"version": "1.5.4",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"shellingham"
],
"depends": []
},
"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"
},
"sniffio": {
"name": "sniffio",
"version": "1.3.1",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"sniffio"
],
"depends": []
},
"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"
},
"starlette": {
"name": "starlette",
"version": "0.37.2",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"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"
},
"typer": {
"name": "typer",
"version": "0.12.3",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"typing-extensions": {
"name": "typing_extensions",
"version": "4.11.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"ujson": {
"name": "ujson",
"version": "5.10.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"ujson"
],
"depends": []
},
"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"
},
"uvicorn": {
"name": "uvicorn",
"version": "0.29.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"uvloop": {
"name": "uvloop",
"version": "0.19.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"uvloop"
],
"depends": []
},
"watchfiles": {
"name": "watchfiles",
"version": "0.21.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [],
"depends": []
},
"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"
},
"websockets": {
"name": "websockets",
"version": "12.0",
"file_name": null,
"install_dir": "site",
"sha256": null,
"imports": [
"websockets"
],
"depends": []
},
"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"
}
}
}
At first blush, things seem to be working as intended. The docs for micropip.freeze say:
load packages that were loaded with
micropipthis time.
But since the fastapi package wasn't loaded with micropip, it's probably no surprise that it doesn't have the pyodide-specific metadata.
Then again, I don't yet understand what micropip is or what interactions it has with pip. Clearly many of the packages are getting pyodide-specific metadata, so I need to learn how it is that micropip is affecting a pip install.
I read the readme and docs, but they don't explain how micropip works except from a user standpoint, so I'm starting to inspect the code and the environment to understand how pyodide/micropip works.
I can see that the file at .venv/bin/pip has been altered by pyodide to provide alternate behavior. That also partly explains why .venv/bin/python -m pip doesn't work as expected.
@hoodmane Can you direct me to where the behavior deviates from the default pip behavior (i.e. how does pyodide hook into pip to cause the pyodide metadata to be installed)?
Oh! I just noticed that none of the packages installed by pip are showing up in micropip.freeze(). And in fact, if I add the following breakpoint, it's never reached:
diff --git a/micropip/_commands/freeze.py b/micropip/_commands/freeze.py
index 4a49dc5..23b4bbb 100644
--- a/micropip/_commands/freeze.py
+++ b/micropip/_commands/freeze.py
@@ -28,6 +28,8 @@ def freeze() -> str:
url = dist.read_text("PYODIDE_URL")
if url is None:
continue
+ else:
+ breakpoint()
sha256 = dist.read_text("PYODIDE_SHA256")
assert sha256
That is, not a single distribution has the expected metadata. The sole output of micropip.freeze() is the contents of REPODATA_PACKAGES.
So that begs the question - what isn't working? What is it you expect from micropip.freeze() when packages were installed by pip?
We also have https://github.com/pyodide/pyodide-lock, so maybe this "create a lock file from the pip environment" could go there.
But I'd think we could adjust micropip.freeze() to include the pip installed packages. Maybe this is overly optimistic.
The problem is that micropip is not a good solve algorithm, and pip is unable to create the lockfile we want. So it makes sense to try and make the two get along so we can get the solve from pip and the lockfile from micropip.
Ah yes the logic does seem to be rather intentionally ignoring externally installed packages. Maybe we can try a bit harder here. In this situation we have two indexes.
- our jsdelivr index
- pypi
Our jsdelivr index is all in REPODATA_PACKAGES. So any other packages must be from pypi.
But unfortunately, it doesn't seem that we were meant to be able to lock a virtual environment to the urls so maybe this idea is a nonstarter.
But if it did come from pypi and we know which version it is then we have package==version and we could hit pypi again to find the url...
We need a way to run a good solver and then make a lockfile from it. This workflow may not be the best way.
Is there a spec or description of what the lockfile requirements are? I see in pyodide_lock.spec, the PackageSpec indicates that file_name must be a string. Could that string be empty? Does it need to exist? What would fail if it doesn't exist? What would happen if it points to a file that doesn't actually match the installed package?
There is uh no written spec. We should write one and probably add it somewhere to the Pyodide packaging docs.
The situation with file_name is that it is all based around this line here:
https://github.com/pyodide/pyodide/blob/main/src/js/load-package.ts?plain=1#L310
installBaseUrl is generally https://cdn.jsdelivr.net/pyodide/0.25.1/full/ and fileName is something like numpy-1.26.4-cp312-cp312-pyodide_2024_0_wasm32.whl.
Then people were installing wheels from other sources with micropip using its slow and incorrect resolver, I was upset by this and wanted a way to lock additional wheels. Because of the way resolvePath works, if fileName is a url, then installBaseUrl is ignored and it returns fileName. At least in the browser, there may be correctness bugs in node or other runtimes. Test coverage is incomplete here.
So after this the field contains either a file name if it's from the jsdelivr cdn or a fully qualified url. Working from an implementation detail of the installer. We should clean this up.
Could that string be empty? Does it need to exist? What would fail if it doesn't exist?
String cannot be empty in that case it will fetch the directory and jsdelivr will return a 404 or someone else's server may return some directory index. This is a special case of it not existing.
Depending on what exactly happens, either the fetch failing leads to the install failing, or we get an html response or some other thing that is not a zip archive and we try to unzip it and fail in unzip.
What would happen if it points to a file that doesn't actually match the installed package?
If it's a wheel that is something different, I am not sure. Sounds like an excellent test case! Most likely it just installs the wrong thing?
Working from an implementation detail of the installer.
Neat. Although it's probably unintended, I'm happy to see URL joins working the way they were intended to do so, allowing files to be resolved from a default location or from somewhere halfway around the world, on a whim.
Thanks for the explanation. I think I understand the problem pretty well now.
My first instinct is to compare these lock files against other lock files created in the Python ecosystem, such as with pip freeze or piptools compile, especially the former as its purpose seems congruent with what's going on here.
In the case of pip freeze, pip stores the name and version, but not the URL or hash. Piptools compile saves the name and version and hash, but not the URL (IIRC). Both approaches rely on the installer and defer resolving the URL to the installer at install time. Before we go to the trouble of implementing something that locks in the URL and hash, I'd like to ask ourselves if it might make sense to follow that model and require pyodide (or whatever installer consumes the lockfile) to use infrastructure (PyPI) to resolve the asset? Imagine, for example, that the lockfile has these fields:
source: PyPI
name: myproject
version: 1.0.0
# or maybe
spec: myproject==1.0.0
Then load-package.js could honor the source and know to ignore file_name and possibly ignore the hash. It would then at install time query PyPI to resolve the URL and hash (possibly verifying it).
This approach would allow freezing an environment with packages installed by pip or other standards-conforming installer.
It's a bit of a shame that PEP 610 specifies that direct_url.json is only for installs from a URL that weren't resolved through an index.
So as I see it, we have three main avenues to pursue:
- Enhance the installer to honor lockfiles with incomplete origin metadata (and resolve through the package index).
- Enhance the Python standards to ensure that origin metadata is present for standards-installed packages.
- When generating the lockfile, resolve the origin metadata from whatever sources are available (pip cache, package index, etc).
Are there other factors to consider when choosing from these options?