{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Install Scala in Colab.ipynb", "version": "0.3.2", "provenance": [], "private_outputs": true, "collapsed_sections": [], "toc_visible": true, "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "accelerator": "GPU" }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "zYzgRayyZ2z8", "colab_type": "text" }, "source": [ "# Scala Installer for Colaboratory\n", "This notebook installs [Almond](http://almond.sh), a Scala kernel for Jupyter, into Colaboratory and configures it to make the preinstalled Python libraries accessible to Scala code (through [ScalaPy](https://github.com/shadaj/scalapy)).\n", "\n", "Because this installer is built on Almond, you get complete Scala support inside your notebooks, including the ability to get code completions and access to the [Jupyter-specific APIs](https://almond.sh/docs/api-jupyter). In addition, this installer configures Almond to be able to load preinstalled modules in Colab such as `numpy` and `tensorflow` through ScalaPy.\n", "\n", "If coming to this notebook from GitHub, make sure to **not reset your runtime** when running this notebook. In order to install the Scala kernel, the installer writes data to the runtime filesystem, so resetting would clear out the kernel.\n", "\n", "## Post-installation Setup\n", "After installing the Scala kernel, you will need to **completely restart the Jupyter instance** for the Scala notebook you want to run. If you are not yet connected to a Jupyter server (check the top right of your screen), you are fine and can immediately start running code.\n", "\n", "However, if you previously started a Jupyter server, you must now go to `Runtime > Manage Sessions` and terminate the session for the Scala notebook. Then after reloading the page, you will see a button to connect to a server, which will start up a new Jupyter server that will now have the Scala kernel loaded.\n", "\n", "**Note:** if your session expires and the machine is shut down, you will need to re-run this installer because Colab resets the filesystem" ] }, { "cell_type": "markdown", "metadata": { "id": "QVJoUDPtb9gX", "colab_type": "text" }, "source": [ "Install the Almond kernel into the global Jupyter kernels." ] }, { "cell_type": "code", "metadata": { "id": "949yQj6ltEoW", "colab_type": "code", "colab": {} }, "source": [ "%%shell\n", "SCALA_VERSION=2.12.8 ALMOND_VERSION=0.3.0+16-548dc10f-SNAPSHOT\n", "curl -Lo coursier https://git.io/coursier-cli\n", "chmod +x coursier\n", "./coursier bootstrap \\\n", " -r jitpack -r sonatype:snapshots \\\n", " -i user -I user:sh.almond:scala-kernel-api_$SCALA_VERSION:$ALMOND_VERSION \\\n", " sh.almond:scala-kernel_$SCALA_VERSION:$ALMOND_VERSION \\\n", " --sources --default=true \\\n", " -o almond-snapshot --embed-files=false\n", "rm coursier\n", "./almond-snapshot --install --global --force\n", "rm almond-snapshot" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "FXlAFUtPcEPo", "colab_type": "text" }, "source": [ "Finally, we modify the kernel definition to preload the Python 3 native library to enable usage of modules such as `numpy` and `tensorflow` in ScalaPy." ] }, { "cell_type": "code", "metadata": { "id": "1kVqkjNBU6K6", "colab_type": "code", "colab": {} }, "source": [ "%%shell\n", "echo \"{\n", " \\\"language\\\" : \\\"scala\\\",\n", " \\\"display_name\\\" : \\\"Scala\\\",\n", " \\\"argv\\\" : [\n", " \\\"bash\\\",\n", " \\\"-c\\\",\n", " \\\"env LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libpython3.6m.so:\\$LD_PRELOAD java -jar /usr/local/share/jupyter/kernels/scala/launcher.jar --connection-file {connection_file}\\\"\n", " ]\n", "}\" > /usr/local/share/jupyter/kernels/scala/kernel.json" ], "execution_count": 0, "outputs": [] } ] }