Skip to content

[FEA] rapidsai/notebooks: remove testing-only libraries #835

@jameslamb

Description

@jameslamb

Description

The rapidsai/notebooks image is an extension of rapidsai/base that that has Jupyterlab. It comes pre-loaded with some RAPIDS notebooks and all the dependencies to run them.

It also includes some libraries that aren't needed for those purposes, like pytest and some pytest plugins.

Those should be removed.

Benefits of this work

  • smaller images = faster pull times, less disk footprint, and data transfer
  • faster image builds here
  • reduced maintenance burden (reduced risk of environment-solving issues)
  • reduced risk of scanning tools detecting CVEs or other issues

Acceptance Criteria

rapidsai/notebooks only includes libraries that users need to run RAPIDS workloads, including all of the notebooks they come pre-loaded with.

Approach

rapidsai/notebooks should only contain the libraries needed to run RAPIDS workloads, including the provided notebooks.

It'll take a little design work to find a resilient way to achieve that, but I can at least point out how the testing dependencies are getting in today. During builds, the dependencies.yaml files in cuDF, cuML, and cuGraph are inspected and the contents of their test_python dependency groups are merged into a conda environment:

if [ -f "$REPO/dependencies.yaml" ] && yq -e '.files.test_notebooks' "$REPO/dependencies.yaml" >/dev/null; then
echo "Running dfg on $REPO"
rapids-dependency-file-generator \
--config "$REPO/dependencies.yaml" \
--file-key test_notebooks \
--matrix "cuda=${CUDA_VER%.*};arch=$(arch);py=${PYTHON_VER}" \
--output conda >"/dependencies/${REPO}_notebooks_tests_dependencies.yaml"
fi

That should be sufficient to get "dependencies needed to run these notebooks", but it also ends up pulling things only used in CI testing of those notebooks, like pytest.

$ docker run --rm rapidsai/notebooks:25.12-cuda13-py3.13 conda env export
name: base
channels:
  - conda-forge
  - rapidsai
dependencies:
...
  - coverage=7.13.0=py313h3dea7bd_0
...
  - pytest=8.4.2=pyhcf101f3_1
  - pytest-benchmark=5.2.3=pyhd8ed1ab_0
  - pytest-cov=7.0.0=pyhcf101f3_1
  - pytest-xdist=3.8.0=pyhd8ed1ab_0
...
full env.yaml, 509 conda packages - (click me)
name: base
channels:
  - conda-forge
  - rapidsai
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=2_gnu
  - _python_abi3_support=1.0=hd8ed1ab_2
  - aiohappyeyeballs=2.6.1=pyhd8ed1ab_0
  - aiohttp=3.13.2=py313h321d83c_0
  - aiosignal=1.4.0=pyhd8ed1ab_0
  - anyio=4.12.0=pyhcf101f3_0
  - aom=3.9.1=hac33072_0
  - archspec=0.2.5=pyhd8ed1ab_0
  - argon2-cffi=25.1.0=pyhd8ed1ab_0
  - argon2-cffi-bindings=25.1.0=py313h07c4f96_2
  - arrow=1.4.0=pyhcf101f3_0
  - asttokens=3.0.1=pyhd8ed1ab_0
  - async-lru=2.0.5=pyh29332c3_0
  - attr=2.5.2=h39aace5_0
  - attrs=25.4.0=pyhcf101f3_1
  - aws-c-auth=0.9.1=h48c9088_3
  - aws-c-cal=0.9.2=he7b75e1_1
  - aws-c-common=0.12.4=hb03c661_0
  - aws-c-compression=0.3.1=h92c474e_6
  - aws-c-event-stream=0.5.6=h82d11aa_3
  - aws-c-http=0.10.4=h94feff3_3
  - aws-c-io=0.22.0=h57f3b0d_1
  - aws-c-mqtt=0.13.3=h2b1cf8c_6
  - aws-c-s3=0.8.6=h4e5ac4b_5
  - aws-c-sdkutils=0.2.4=h92c474e_1
  - aws-checksums=0.2.7=h92c474e_2
  - aws-crt-cpp=0.34.4=h60c762c_0
  - aws-sdk-cpp=1.11.606=h32384e2_4
  - azure-core-cpp=1.16.0=h3a458e0_1
  - azure-identity-cpp=1.12.0=ha729027_0
  - azure-storage-blobs-cpp=12.14.0=hb1c9500_1
  - azure-storage-common-cpp=12.10.0=hebae86a_2
  - azure-storage-files-datalake-cpp=12.12.0=h8b27e44_3
  - babel=2.17.0=pyhd8ed1ab_0
  - beautifulsoup4=4.14.3=pyha770c72_0
  - bleach=6.3.0=pyhcf101f3_0
  - bleach-with-css=6.3.0=h5f6438b_0
  - blosc=1.21.6=he440d0b_1
  - bokeh=3.8.1=pyhd8ed1ab_0
  - boltons=25.0.0=pyhd8ed1ab_0
  - branca=0.8.2=pyhd8ed1ab_0
  - brotli=1.1.0=hb03c661_4
  - brotli-bin=1.1.0=hb03c661_4
  - brotli-python=1.1.0=py313h7033f15_4
  - brunsli=0.1=he3183e4_1
  - bzip2=1.0.8=hda65f42_8
  - c-ares=1.34.5=hb9d3cd8_0
  - c-blosc2=2.22.0=h4cfbee9_0
  - ca-certificates=2025.11.12=hbd8a1cb_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - cachetools=6.2.4=pyhd8ed1ab_0
  - certifi=2025.11.12=pyhd8ed1ab_0
  - cffi=2.0.0=py313hf46b229_1
  - charls=2.4.2=h59595ed_0
  - charset-normalizer=3.4.4=pyhd8ed1ab_0
  - click=8.3.1=pyh8f84b5b_1
  - cloudpickle=3.1.2=pyhcf101f3_1
  - colorama=0.4.6=pyhd8ed1ab_1
  - colorcet=3.1.0=pyhd8ed1ab_1
  - comm=0.2.3=pyhe01879c_0
  - conda=25.9.1=py313h78bf25f_0
  - conda-libmamba-solver=25.4.0=pyhd8ed1ab_0
  - conda-package-handling=2.4.0=pyh7900ff3_2
  - conda-package-streaming=0.12.0=pyhd8ed1ab_0
  - contourpy=1.3.3=py313h7037e92_3
  - coverage=7.13.0=py313h3dea7bd_0
  - cpp-expected=1.3.1=h171cf75_0
  - cpython=3.13.11=py313hd8ed1ab_100
  - cucim=25.12.00=cuda13_py313_251210_ghg0ea8217_gn0_phc494990
  - cuda-bindings=13.1.1=py313h08cd8bf_1
  - cuda-cccl_linux-64=13.0.85=ha770c72_0
  - cuda-core=0.3.2=py313hb1ccf29_0
  - cuda-crt-dev_linux-64=13.0.88=ha770c72_0
  - cuda-crt-tools=13.0.88=ha770c72_0
  - cuda-cudart=13.0.96=hecca717_0
  - cuda-cudart-dev=13.0.96=hecca717_0
  - cuda-cudart-dev_linux-64=13.0.96=h376f20c_0
  - cuda-cudart-static=13.0.96=hecca717_0
  - cuda-cudart-static_linux-64=13.0.96=h376f20c_0
  - cuda-cudart_linux-64=13.0.96=h376f20c_0
  - cuda-nvcc-dev_linux-64=13.0.88=he91c749_0
  - cuda-nvcc-impl=13.0.88=h85509e4_0
  - cuda-nvcc-tools=13.0.88=he02047a_0
  - cuda-nvrtc=13.0.88=hecca717_0
  - cuda-nvvm-dev_linux-64=13.0.88=ha770c72_0
  - cuda-nvvm-impl=13.0.88=h4bc722e_0
  - cuda-nvvm-tools=13.0.88=h4bc722e_0
  - cuda-pathfinder=1.3.3=pyhcf101f3_0
  - cuda-profiler-api=13.0.85=h7938cbb_0
  - cuda-python=13.1.1=pyhc455866_1
  - cuda-version=13.0=hc7b4dd1_3
  - cudf=25.12.00=cuda13_py313_251210_580975be
  - cudf-polars=25.12.00=cuda13_py313_251210_580975be
  - cudf_kafka=25.12.00=cuda13_py313_251210_580975be
  - cugraph=25.12.02=cuda13_py313_251211_9765e20f
  - cuml=25.12.00=cuda13_py313_251211_5c22c200
  - cupy=13.6.0=py313h727d180_2
  - cupy-core=13.6.0=py313h0630d88_2
  - custreamz=25.12.00=cuda13_py313_251210_580975be
  - cuvs=25.12.00=cuda13_py313_251211_fc27938b
  - cuxfilter=25.12.00=cuda13_py313_251211_0e91a395
  - cycler=0.12.1=pyhcf101f3_2
  - cyrus-sasl=2.1.28=hd9c7081_0
  - cytoolz=1.1.0=py313h07c4f96_1
  - dask=2025.9.1=pyhcf101f3_0
  - dask-core=2025.9.1=pyhcf101f3_0
  - dask-cuda=25.12.00=py313_251210_7edf2c69
  - dask-cudf=25.12.00=cuda13_py313_251210_580975be
  - dask-glm=0.3.2=pyhd8ed1ab_0
  - dask-labextension=7.0.0=pyhd8ed1ab_1
  - dask-ml=2023.3.24=pyhd8ed1ab_1
  - datashader=0.18.2=pyhd8ed1ab_0
  - dav1d=1.2.1=hd590300_0
  - debugpy=1.8.19=py313hb7f33ac_0
  - decorator=5.2.1=pyhd8ed1ab_0
  - defusedxml=0.7.1=pyhd8ed1ab_0
  - distributed=2025.9.1=pyhcf101f3_0
  - distributed-ucxx=0.47.00=py_251210_5d6f0af3_hf4a1fa9
  - distro=1.9.0=pyhd8ed1ab_1
  - dlpack=0.8=h59595ed_3
  - exceptiongroup=1.3.1=pyhd8ed1ab_0
  - execnet=2.1.2=pyhd8ed1ab_0
  - executing=2.2.1=pyhd8ed1ab_0
  - fastrlock=0.8.3=py313h5d5ffb9_2
  - fmt=11.2.0=h07f6e7f_0
  - folium=0.20.0=pyhd8ed1ab_0
  - fonttools=4.61.1=py313h3dea7bd_0
  - fqdn=1.5.1=pyhd8ed1ab_1
  - freetype=2.14.1=ha770c72_0
  - freexl=2.0.0=h9dce30a_2
  - frozendict=2.4.6=py313h07c4f96_1
  - frozenlist=1.7.0=py313h6b9daa2_0
  - fsspec=2025.12.0=pyhd8ed1ab_0
  - geopandas=1.1.1=pyhd8ed1ab_1
  - geopandas-base=1.1.1=pyha770c72_1
  - geos=3.14.0=h480dda7_0
  - gflags=2.2.2=h5888daf_1005
  - giflib=5.2.2=hd590300_0
  - glog=0.7.1=hbabe93e_0
  - h11=0.16.0=pyhd8ed1ab_0
  - h2=4.3.0=pyhcf101f3_0
  - holoviews=1.22.1=pyhd8ed1ab_0
  - hpack=4.1.0=pyhd8ed1ab_0
  - httpcore=1.0.9=pyh29332c3_0
  - httpx=0.28.1=pyhd8ed1ab_0
  - hyperframe=6.1.0=pyhd8ed1ab_0
  - icu=75.1=he02047a_0
  - idna=3.11=pyhd8ed1ab_0
  - imagecodecs=2025.8.2=py313h24102ce_5
  - imageio=2.37.0=pyhfb79c49_0
  - importlib-metadata=8.7.0=pyhe01879c_1
  - importlib_resources=6.5.2=pyhd8ed1ab_0
  - iniconfig=2.3.0=pyhd8ed1ab_0
  - ipykernel=7.1.0=pyha191276_0
  - ipython=9.8.0=pyh53cf698_0
  - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0
  - ipywidgets=8.1.8=pyhd8ed1ab_0
  - isoduration=20.11.0=pyhd8ed1ab_1
  - jedi=0.19.2=pyhd8ed1ab_1
  - jinja2=3.1.6=pyhcf101f3_1
  - joblib=1.5.3=pyhd8ed1ab_0
  - json-c=0.18=h6688a6e_0
  - json5=0.12.1=pyhd8ed1ab_0
  - jsonpatch=1.33=pyhd8ed1ab_1
  - jsonpointer=3.0.0=py313h78bf25f_2
  - jsonschema=4.25.1=pyhe01879c_0
  - jsonschema-specifications=2025.9.1=pyhcf101f3_0
  - jsonschema-with-format-nongpl=4.25.1=he01879c_0
  - jupyter=1.1.1=pyhd8ed1ab_1
  - jupyter-lsp=2.3.0=pyhcf101f3_0
  - jupyter-server-proxy=4.4.0=pyhd8ed1ab_1
  - jupyter_client=8.7.0=pyhcf101f3_0
  - jupyter_console=6.6.3=pyhd8ed1ab_1
  - jupyter_core=5.9.1=pyhc90fa1f_0
  - jupyter_events=0.12.0=pyh29332c3_0
  - jupyter_server=2.17.0=pyhcf101f3_0
  - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1
  - jupyterlab=4.5.1=pyhd8ed1ab_0
  - jupyterlab-nvdashboard=0.13.0=py_250303_g0c72239_0
  - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2
  - jupyterlab_server=2.28.0=pyhcf101f3_0
  - jupyterlab_widgets=3.0.16=pyhcf101f3_1
  - jxrlib=1.1=hd590300_3
  - keyutils=1.6.3=hb9d3cd8_0
  - kiwisolver=1.4.9=py313hc8edb43_2
  - krb5=1.21.3=h659f571_0
  - lark=1.3.1=pyhd8ed1ab_0
  - lazy-loader=0.4=pyhd8ed1ab_2
  - lazy_loader=0.4=pyhd8ed1ab_2
  - lcms2=2.17=h717163a_0
  - ld_impl_linux-64=2.44=h1aa0949_5
  - lerc=4.0.0=h0aef613_1
  - libabseil=20250512.1=cxx17_hba17884_0
  - libaec=1.1.4=h3f801dc_0
  - libarchive=3.8.1=gpl_h98cc613_100
  - libarrow=21.0.0=h56a6dad_8_cpu
  - libarrow-acero=21.0.0=h635bf11_8_cpu
  - libarrow-compute=21.0.0=h8c2c5c3_8_cpu
  - libarrow-dataset=21.0.0=h635bf11_8_cpu
  - libarrow-substrait=21.0.0=h3f74fd7_8_cpu
  - libavif16=1.3.0=h6395336_2
  - libblas=3.11.0=5_h4a7cf45_openblas
  - libbrotlicommon=1.1.0=hb03c661_4
  - libbrotlidec=1.1.0=hb03c661_4
  - libbrotlienc=1.1.0=hb03c661_4
  - libcap=2.77=h3ff7636_0
  - libcblas=3.11.0=5_h0358290_openblas
  - libcrc32c=1.1.2=h9c3ff4c_0
  - libcublas=13.1.0.3=h676940d_0
  - libcublas-dev=13.1.0.3=h676940d_0
  - libcucim=25.12.00=cuda13_251210_ghg0ea8217_gn0_phe835b31
  - libcudf=25.12.00=cuda13_251210_580975be
  - libcudf_kafka=25.12.00=cuda13_251210_580975be
  - libcufft=12.0.0.61=hecca717_0
  - libcufile=1.15.1.6=hbc026e6_0
  - libcufile-dev=1.15.1.6=hecca717_0
  - libcugraph=25.12.02=cuda13_251211_9765e20f
  - libcugraph_etl=25.12.02=cuda13_251211_9765e20f
  - libcuml=25.12.00=cuda13_251211_5c22c200
  - libcumlprims=25.12.00=cuda13_py310_251211_7e1ef293
  - libcurand=10.4.0.35=h676940d_1
  - libcurand-dev=10.4.0.35=h676940d_1
  - libcurl=8.17.0=h4e3cde8_0
  - libcusolver=12.0.4.66=h676940d_1
  - libcusolver-dev=12.0.4.66=h676940d_1
  - libcusparse=12.6.3.3=hecca717_0
  - libcusparse-dev=12.6.3.3=hecca717_0
  - libcuvs=25.12.00=cuda13_251211_fc27938b
  - libcuvs-headers=25.12.00=cuda13_251211_fc27938b
  - libdeflate=1.24=h86f0d12_0
  - libedit=3.1.20250104=pl5321h7949ede_0
  - libev=4.33=hd590300_2
  - libevent=2.1.12=hf998b51_1
  - libexpat=2.7.1=hecca717_0
  - libffi=3.5.2=h9ec8514_0
  - libfreetype=2.14.1=ha770c72_0
  - libfreetype6=2.14.1=h73754d4_0
  - libgcc=15.2.0=h767d61c_7
  - libgcc-ng=15.2.0=h69a702a_7
  - libgdal-core=3.11.4=h14edee0_0
  - libgfortran=15.2.0=h69a702a_16
  - libgfortran5=15.2.0=h68bc16d_16
  - libgomp=15.2.0=h767d61c_7
  - libgoogle-cloud=2.39.0=hdb79228_0
  - libgoogle-cloud-storage=2.39.0=hdbdcf42_0
  - libgrpc=1.73.1=h3288cfb_1
  - libhwy=1.3.0=h4c17acf_1
  - libiconv=1.18=h3b78370_2
  - libjpeg-turbo=3.1.2=hb03c661_0
  - libjxl=0.11.1=h6cb5226_4
  - libkml=1.3.0=haa4a5bd_1022
  - libkvikio=25.12.00=cuda13_251210_61297197
  - liblapack=3.11.0=5_h47877c9_openblas
  - liblzma=5.8.1=hb9d3cd8_2
  - libmamba=2.3.2=hae34dd5_2
  - libmambapy=2.3.2=py313h2dcffc8_2
  - libmpdec=4.0.0=hb9d3cd8_0
  - libnghttp2=1.67.0=had1ee68_0
  - libnl=3.11.0=hb9d3cd8_0
  - libnsl=2.0.1=hb9d3cd8_1
  - libntlm=1.8=hb9d3cd8_0
  - libnuma=2.0.18=hb9d3cd8_3
  - libnvcomp=5.0.0.6=h7bcfba5_3
  - libnvcomp-dev=5.0.0.6=h7bcfba5_3
  - libnvimgcodec=0.6.0=hd8ed1ab_0
  - libnvimgcodec0=0.6.0=h7bcfba5_0
  - libnvjitlink=13.1.80=hecca717_0
  - libnvjpeg=13.0.1.86=hecca717_0
  - libnvjpeg2k0=0.9.0.43=h276d11f_1
  - libnvptxcompiler-dev=13.0.88=ha770c72_0
  - libnvptxcompiler-dev_linux-64=13.0.88=ha770c72_0
  - libnvtiff=0.5.1.75=ha770c72_0
  - libnvtiff0=0.5.1.75=h276d11f_0
  - libopenblas=0.3.30=pthreads_h94d23a6_4
  - libopentelemetry-cpp=1.21.0=hb9b0907_1
  - libopentelemetry-cpp-headers=1.21.0=ha770c72_1
  - libparquet=21.0.0=h790f06f_8_cpu
  - libpng=1.6.53=h421ea60_0
  - libprotobuf=6.31.1=h49aed37_2
  - libraft=25.12.00=cuda13_251211_d226bc96
  - libraft-headers=25.12.00=cuda13_251211_d226bc96
  - libraft-headers-only=25.12.00=cuda13_251211_d226bc96
  - librdkafka=2.8.0=h2e2c4f7_0
  - libre2-11=2025.11.05=h7b12aa8_0
  - librmm=25.12.00=cuda13_251210_86731e05
  - librttopo=1.1.0=h96cd706_19
  - libsodium=1.0.20=h4ab18f5_0
  - libsolv=0.7.35=h9463b59_0
  - libspatialite=5.1.0=h7250436_15
  - libsqlite=3.51.0=hee844dc_0
  - libssh2=1.11.1=hcf80075_0
  - libstdcxx=15.2.0=h8f9b012_7
  - libstdcxx-ng=15.2.0=h4852527_7
  - libsystemd0=258.3=h6569c3e_0
  - libthrift=0.22.0=h454ac66_1
  - libtiff=4.7.1=h8261f1e_0
  - libucxx=0.47.00=cuda13_251210_5d6f0af3
  - libudev1=258.3=h6569c3e_0
  - libutf8proc=2.11.2=hfe17d71_0
  - libuuid=2.41.2=he9a06e4_0
  - libuv=1.51.0=hb03c661_1
  - libwebp-base=1.6.0=hd42ef1d_0
  - libxcb=1.17.0=h8a09558_0
  - libxcrypt=4.4.36=hd590300_1
  - libxgboost=3.1.2=rapidsai_h1e42af5_1
  - libxml2=2.13.9=h04c0eec_0
  - libzlib=1.3.1=hb9d3cd8_2
  - libzopfli=1.0.3=h9c3ff4c_0
  - linkify-it-py=2.0.3=pyhd8ed1ab_1
  - llvmlite=0.44.0=py313hfdae721_2
  - locket=1.0.0=pyhd8ed1ab_0
  - lz4=4.4.5=py313h28739b2_1
  - lz4-c=1.10.0=h5888daf_1
  - lzo=2.10=h280c20c_1002
  - mamba=2.3.2=h4a52834_2
  - mapclassify=2.10.0=pyhd8ed1ab_1
  - markdown=3.10=pyhcf101f3_1
  - markdown-it-py=4.0.0=pyhd8ed1ab_0
  - markupsafe=3.0.3=py313h3dea7bd_0
  - matplotlib-base=3.10.8=py313h683a580_0
  - matplotlib-inline=0.2.1=pyhd8ed1ab_0
  - mdit-py-plugins=0.5.0=pyhd8ed1ab_0
  - mdurl=0.1.2=pyhd8ed1ab_1
  - menuinst=2.4.1=py313h78bf25f_0
  - minizip=4.0.10=h05a5f5f_0
  - mistune=3.1.4=pyhcf101f3_0
  - msgpack-python=1.1.2=py313h7037e92_1
  - multidict=6.7.0=py313h3dea7bd_0
  - multipledispatch=0.6.0=pyhd8ed1ab_1
  - munkres=1.1.4=pyhd8ed1ab_1
  - muparser=2.3.5=h5888daf_0
  - narwhals=2.14.0=pyhcf101f3_0
  - nbclient=0.10.2=pyhd8ed1ab_0
  - nbconvert-core=7.16.6=pyhcf101f3_1
  - nbformat=5.10.4=pyhd8ed1ab_1
  - nccl=2.28.9.1=hd557bf5_1
  - ncurses=6.5=h2d0b736_3
  - nest-asyncio=1.6.0=pyhd8ed1ab_1
  - networkx=3.6.1=pyhcf101f3_0
  - nlohmann_json=3.12.0=h54a6638_1
  - nlohmann_json-abi=3.12.0=h0f90c79_1
  - nodejs=24.9.0=heeeca48_0
  - notebook=7.5.1=pyhcf101f3_0
  - notebook-shim=0.2.4=pyhd8ed1ab_1
  - numba=0.61.2=py313hd8e3f9f_2
  - numba-cuda=0.19.1=pyhcf101f3_2
  - numpy=2.2.6=py313h17eae1a_0
  - nvidia-ml-py=12.575.51=pyhd8ed1ab_0
  - nvtx=0.2.14=py313h07c4f96_0
  - nx-cugraph=25.12.00=py_251211_d629d07a
  - openjpeg=2.5.4=h55fea9a_0
  - openssl=3.6.0=h26f9b46_0
  - orc=2.2.1=hd747db4_0
  - overrides=7.7.0=pyhd8ed1ab_1
  - packaging=25.0=pyh29332c3_1
  - pandas=2.3.3=py313h08cd8bf_2
  - pandocfilters=1.5.0=pyhd8ed1ab_0
  - panel=1.8.4=pyhd8ed1ab_0
  - param=2.3.1=pyhc455866_0
  - parso=0.8.5=pyhcf101f3_0
  - partd=1.4.2=pyhd8ed1ab_0
  - patsy=1.0.2=pyhcf101f3_0
  - pcre2=10.46=h1321c63_0
  - pexpect=4.9.0=pyhd8ed1ab_1
  - pillow=12.0.0=py313hfc0919a_1
  - pip=25.3=pyh145f28c_0
  - platformdirs=4.5.0=pyhcf101f3_0
  - pluggy=1.6.0=pyhd8ed1ab_0
  - polars=1.34.0=pyh6a1acc5_0
  - polars-runtime-32=1.34.0=py310hffdcd12_0
  - proj=9.6.2=h18fbb6c_2
  - prometheus-cpp=1.3.0=ha5d0236_0
  - prometheus_client=0.23.1=pyhd8ed1ab_0
  - prompt-toolkit=3.0.52=pyha770c72_0
  - prompt_toolkit=3.0.52=hd8ed1ab_0
  - propcache=0.3.1=py313h8060acc_0
  - psutil=7.1.3=py313h54dd161_0
  - pthread-stubs=0.4=hb9d3cd8_1002
  - ptyprocess=0.7.0=pyhd8ed1ab_1
  - pure_eval=0.2.3=pyhd8ed1ab_1
  - py-cpuinfo=9.0.0=pyhd8ed1ab_1
  - py-xgboost=3.1.2=rapidsai_pyh395bae7_1
  - pyarrow=21.0.0=py313h78bf25f_1
  - pyarrow-core=21.0.0=py313he109ebe_1_cpu
  - pybind11-abi=4=hd8ed1ab_3
  - pycosat=0.6.6=py313h07c4f96_3
  - pycparser=2.22=pyh29332c3_1
  - pyct=0.6.0=pyhd8ed1ab_0
  - pygments=2.19.2=pyhd8ed1ab_0
  - pylibcudf=25.12.00=cuda13_py313_251210_580975be
  - pylibcugraph=25.12.02=cuda13_py313_251211_9765e20f
  - pylibraft=25.12.00=cuda13_py313_251211_d226bc96
  - pynvml=12.0.0=pyhd8ed1ab_0
  - pyogrio=0.11.1=py313h8b61037_1
  - pyparsing=3.2.5=pyhcf101f3_0
  - pyproj=3.7.2=py313hcfca4fd_1
  - pysocks=1.7.1=pyha55dd90_7
  - pytest=8.4.2=pyhcf101f3_1
  - pytest-benchmark=5.2.3=pyhd8ed1ab_0
  - pytest-cov=7.0.0=pyhcf101f3_1
  - pytest-xdist=3.8.0=pyhd8ed1ab_0
  - python=3.13.9=hc97d973_101_cp313
  - python-confluent-kafka=2.8.0=py313h536fd9c_0
  - python-dateutil=2.9.0.post0=pyhe01879c_2
  - python-fastjsonschema=2.21.2=pyhe01879c_0
  - python-gil=3.13.11=h4df99d1_100
  - python-json-logger=2.0.7=pyhd8ed1ab_0
  - python-louvain=0.16=pyhd8ed1ab_1
  - python-tzdata=2025.3=pyhd8ed1ab_0
  - python_abi=3.13=8_cp313
  - pytz=2025.2=pyhd8ed1ab_0
  - pyviz_comms=3.0.6=pyhd8ed1ab_0
  - pywavelets=1.9.0=py313h29aa505_2
  - pyyaml=6.0.3=py313h3dea7bd_0
  - pyzmq=27.1.0=py312hfb55c3c_0
  - qhull=2020.2=h434a139_5
  - raft-dask=25.12.00=cuda13_py313_251211_d226bc96
  - rapids=25.12.00=cuda13_251211_be953127
  - rapids-cli=0.1.2=py313_250529_189e5c5d
  - rapids-dask-dependency=25.12.00=251210_fc4bbcd3
  - rapids-logger=0.2.3=h98325ef_0
  - rapids-xgboost=25.12.00=cuda13_251211_be953127
  - rav1e=0.7.1=h8fae777_3
  - rdma-core=60.0=hecca717_0
  - re2=2025.11.05=h5301d42_0
  - readline=8.2=h8c095d6_2
  - referencing=0.37.0=pyhcf101f3_0
  - reproc=14.2.5.post0=hb9d3cd8_0
  - reproc-cpp=14.2.5.post0=h5888daf_0
  - requests=2.32.5=pyhd8ed1ab_0
  - rfc3339-validator=0.1.4=pyhd8ed1ab_1
  - rfc3986-validator=0.1.1=pyh9f0ad1d_0
  - rfc3987-syntax=1.1.0=pyhe01879c_1
  - rich=14.2.0=pyhcf101f3_0
  - rich-click=1.9.4=pyhd8ed1ab_0
  - rmm=25.12.00=cuda13_py313_251210_86731e05
  - rpds-py=0.30.0=py313h843e2db_0
  - ruamel.yaml=0.18.16=py313h07c4f96_0
  - ruamel.yaml.clib=0.2.14=py313h07c4f96_0
  - s2n=1.5.26=h5ac9029_0
  - scikit-image=0.24.0=py313ha87cce1_3
  - scikit-learn=1.8.0=np2py313h16d504d_1
  - scipy=1.16.3=py313h11c21cd_1
  - seaborn=0.13.2=hd8ed1ab_3
  - seaborn-base=0.13.2=pyhd8ed1ab_3
  - send2trash=1.8.3=pyh0d859eb_1
  - setuptools=80.9.0=pyhff2d567_0
  - shapely=2.1.2=py313hfc84eb1_0
  - simdjson=4.0.7=hb700be7_0
  - simpervisor=1.0.0=pyhd8ed1ab_1
  - six=1.17.0=pyhe01879c_1
  - snappy=1.2.2=h03e3b7b_1
  - sniffio=1.3.1=pyhd8ed1ab_2
  - sortedcontainers=2.4.0=pyhd8ed1ab_1
  - soupsieve=2.8=pyhd8ed1ab_0
  - sparse=0.17.0=pyhcf101f3_0
  - sqlite=3.51.0=heff268d_0
  - stack_data=0.6.3=pyhd8ed1ab_1
  - statsmodels=0.14.6=py313h29aa505_0
  - streamz=0.6.4=pyhd8ed1ab_1
  - svt-av1=3.1.2=hecca717_0
  - tblib=3.2.2=pyhcf101f3_0
  - terminado=0.18.1=pyh0d859eb_0
  - threadpoolctl=3.6.0=pyhecae5ae_0
  - tifffile=2025.12.12=pyhd8ed1ab_0
  - tinycss2=1.5.1=pyhcf101f3_0
  - tk=8.6.13=noxft_ha0e22de_103
  - tomli=2.3.0=pyhcf101f3_0
  - toolz=1.1.0=pyhd8ed1ab_1
  - tornado=6.5.4=py313hd02dea0_0
  - tqdm=4.67.1=pyhd8ed1ab_1
  - traitlets=5.14.3=pyhd8ed1ab_1
  - treelite=4.6.1=py313h93401c0_0
  - truststore=0.10.3=pyhe01879c_0
  - typing-extensions=4.15.0=h396c80c_0
  - typing_extensions=4.15.0=pyhcf101f3_0
  - typing_utils=0.1.0=pyhd8ed1ab_1
  - tzdata=2025b=h78e105d_0
  - uc-micro-py=1.0.3=pyhd8ed1ab_1
  - ucx=1.19.1=h567e125_0
  - ucxx=0.47.00=cuda13_py313_251210_5d6f0af3
  - uri-template=1.3.0=pyhd8ed1ab_1
  - uriparser=0.9.8=hac33072_0
  - urllib3=2.5.0=pyhd8ed1ab_0
  - wcwidth=0.2.14=pyhd8ed1ab_0
  - webcolors=25.10.0=pyhd8ed1ab_0
  - webencodings=0.5.1=pyhd8ed1ab_3
  - websocket-client=1.9.0=pyhd8ed1ab_0
  - wheel=0.45.1=pyhd8ed1ab_1
  - widgetsnbextension=4.0.15=pyhd8ed1ab_0
  - xarray=2025.12.0=pyhcf101f3_0
  - xerces-c=3.2.5=h988505b_2
  - xgboost=3.1.2=rapidsai_pyh3432f66_1
  - xorg-libxau=1.0.12=hb03c661_1
  - xorg-libxdmcp=1.1.5=hb03c661_1
  - xyzservices=2025.11.0=pyhd8ed1ab_0
  - yaml=0.2.5=h280c20c_3
  - yaml-cpp=0.8.0=h3f2d84a_0
  - yarl=1.22.0=py313h3dea7bd_0
  - zeromq=4.3.5=h387f397_9
  - zfp=1.0.1=h909a3a2_3
  - zict=3.0.0=pyhd8ed1ab_1
  - zipp=3.23.0=pyhcf101f3_1
  - zlib=1.3.1=hb9d3cd8_2
  - zlib-ng=2.2.5=hde8ca8f_1
  - zstandard=0.25.0=py313h54dd161_1
  - zstd=1.5.7=hb8e6e7a_2
prefix: /opt/conda

Options include some mix of:

  • changing those dependencies.yaml files in the relevant repos
  • changing the way the notebook-running environment is created here
  • factoring third-party dependencies out of RAPIDS notebooks wherever they aren't adding much value
  • something else

Notes

Doing nothing could be fine. The extra libraries are probably not contributing to image size or pull times THAT much.

But it'd be good to cut unnecessary things out of these images if we find the time, for the reasons mentioned above.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions