| #!/bin/bash | |
| # Copyright 2021 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| # Run a Python (Colab/Jupyter) notebook in an isolated virtual environment. | |
| # Fails if the notebook has errors. | |
| # | |
| # Usage: run_python_notebook.sh /path/to/notebook.ipynb | |
| # | |
| # This is intended for use on continuous integration servers within a Docker | |
| # container and as a reference for users, but it can also be run locally. | |
| set -e | |
| set -x | |
| # Run under a virtual environment to isolate Python packages. | |
| # | |
| # This is informed by Docker workarounds and we're walking a thin line here. | |
| # --system-site-packages: leverage system packages for common notebook | |
| # requirements (tensorflow, numpy, and other large packages) | |
| # --clear: delete existing venv contents (package installs within notebooks) | |
| # | |
| # See also: | |
| # * https://stackoverflow.com/a/63805343 | |
| # * https://askubuntu.com/a/897004 | |
| python3 -m venv .notebook.venv --system-site-packages --clear | |
| source .notebook.venv/bin/activate 2> /dev/null | |
| trap "deactivate 2> /dev/null" EXIT | |
| # Update pip within the venv (you'd think this wouldn't be needed, but it is). | |
| python3 -m pip install --quiet --upgrade pip | |
| # Install general Jupyter notebook requirements, ignoring any system versions | |
| # This ensures that the `jupyter` command runs within the venv. | |
| # | |
| # See also: | |
| # * https://stackoverflow.com/q/42449814 | |
| # * https://stackoverflow.com/a/19459977 | |
| python3 -m pip install --ignore-installed --quiet \ | |
| jupyter_core nbconvert ipykernel | |
| # Install common notebook requirements, reusing system versions if possible. | |
| python3 -m pip install --quiet \ | |
| numpy \ | |
| matplotlib \ | |
| tensorflow \ | |
| tensorflow_hub \ | |
| bottleneck | |
| # Tone down TensorFlow's logging by default. | |
| export TF_CPP_MIN_LOG_LEVEL=${TF_CPP_MIN_LOG_LEVEL:-2} | |
| # Run the notebook, discarding output (still fails if an exception is thrown). | |
| jupyter nbconvert --to notebook --execute $1 --stdout > /dev/null |