Git Product home page Git Product logo

tljh-voila-gallery's People

Contributors

cornhundred avatar deeplook avatar dhaitz avatar jmp75 avatar jtpio avatar martinrenou avatar mkcor avatar pbugnion avatar sylvaincorlay avatar yuvipanda avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tljh-voila-gallery's Issues

Add monitoring

As mentioned in #27, we should add some basic monitoring to know:

  • the number of visitors
  • the most popular examples
  • errors (500s, error launching servers)

Minimal Instance Requirements - Documentation

Attempting to install the gallery with current examples on the lowest AWS instance settings (t2.micro and 8Gigs storage) leads to docker instances silently failing.

Manually running "python build_images.py" from command line demonstrates running out of memory, or running out of space.

What does hosting look like?

For now, I have registered the domain voila-gallery.org. This currently points to an EC2 instance.

A more permanent solution to this would be good.

Access of shared data in notebooks

I currently use TLJH to host some notebooks with voila. They access shared data from the folder /srv/data/ as described here.
The notebook repositories are also stored locally on the server under /srv/repositories/ and I wonder if I could still access the local data in the notebooks when they are served with voila-gallery. What do you think?

Docker builds for mybinder.org and the gallery give different sets of dependencies

For a given example / repo, the set of dependencies can be different depending on whether it was built for the gallery or for mybinder.org.

For the gallery we use repo2docker to build the examples:

https://github.com/voila-gallery/gallery/blob/c0ab38a26ae38bd484e5470577ce1df93603ebe1/tljh-voila-gallery/tljh_voila_gallery/build_images.py#L31-L45

For BinderHub it's similar:

https://github.com/jupyterhub/binderhub/blob/01b1c59b9e7dc81250c1ed579c492ec2fd6baaf6/binderhub/build.py#L59-L84

However when building the Docker image for the render-stl example we get:

voila-gallery
Warning!!! Possibly conflicting dependencies found:
* jupyterlab-pygments==0.1.0
 - pygments [required: >=2.4.1,<3, installed: 2.3.1]
------------------------------------------------------------------------
ipyvolume==0.5.2
  ipywebrtc==0.5.0
    ipywidgets==7.5.0
      ipykernel==5.1.0
        ipython==7.5.0
          backcall==0.1.0
          decorator==4.4.0
          jedi==0.13.3
            parso==0.4.0
          pexpect==4.7.0
            ptyprocess==0.6.0
          pickleshare==0.7.5
          prompt-toolkit==2.0.9
            six==1.12.0
            wcwidth==0.1.7
          Pygments==2.3.1
          setuptools==41.0.1
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        jupyter-client==5.2.4
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          python-dateutil==2.8.0
            six==1.12.0
          pyzmq==18.0.1
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.3.1
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.1
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
      widgetsnbextension==3.5.0
        notebook==5.7.8
          ipykernel==5.1.0
            ipython==7.5.0
              backcall==0.1.0
              decorator==4.4.0
              jedi==0.13.3
                parso==0.4.0
              pexpect==4.7.0
                ptyprocess==0.6.0
              pickleshare==0.7.5
              prompt-toolkit==2.0.9
                six==1.12.0
                wcwidth==0.1.7
              Pygments==2.3.1
              setuptools==41.0.1
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            jupyter-client==5.2.4
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              python-dateutil==2.8.0
                six==1.12.0
              pyzmq==18.0.1
              tornado==6.0.2
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          ipython-genutils==0.2.0
          Jinja2==2.10.1
            MarkupSafe==1.1.1
          jupyter-client==5.2.4
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            python-dateutil==2.8.0
              six==1.12.0
            pyzmq==18.0.1
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          nbconvert==5.5.0
            bleach==3.1.0
              six==1.12.0
              webencodings==0.5.1
            defusedxml==0.5.0
            entrypoints==0.3
            Jinja2==2.10.1
              MarkupSafe==1.1.1
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            mistune==0.8.4
            nbformat==4.4.0
              ipython-genutils==0.2.0
              jsonschema==3.0.1
                attrs==19.1.0
                pyrsistent==0.15.1
                  six==1.12.0
                setuptools==41.0.1
                six==1.12.0
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            pandocfilters==1.4.2
            Pygments==2.3.1
            testpath==0.4.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          nbformat==4.4.0
            ipython-genutils==0.2.0
            jsonschema==3.0.1
              attrs==19.1.0
              pyrsistent==0.15.1
                six==1.12.0
              setuptools==41.0.1
              six==1.12.0
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          prometheus-client==0.6.0
          pyzmq==18.0.1
          Send2Trash==1.5.0
          terminado==0.8.2
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
  ipywidgets==7.5.0
    ipykernel==5.1.0
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.3.1
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      jupyter-client==5.2.4
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        python-dateutil==2.8.0
          six==1.12.0
        pyzmq==18.0.1
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    ipython==7.5.0
      backcall==0.1.0
      decorator==4.4.0
      jedi==0.13.3
        parso==0.4.0
      pexpect==4.7.0
        ptyprocess==0.6.0
      pickleshare==0.7.5
      prompt-toolkit==2.0.9
        six==1.12.0
        wcwidth==0.1.7
      Pygments==2.3.1
      setuptools==41.0.1
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbformat==4.4.0
      ipython-genutils==0.2.0
      jsonschema==3.0.1
        attrs==19.1.0
        pyrsistent==0.15.1
          six==1.12.0
        setuptools==41.0.1
        six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
    widgetsnbextension==3.5.0
      notebook==5.7.8
        ipykernel==5.1.0
          ipython==7.5.0
            backcall==0.1.0
            decorator==4.4.0
            jedi==0.13.3
              parso==0.4.0
            pexpect==4.7.0
              ptyprocess==0.6.0
            pickleshare==0.7.5
            prompt-toolkit==2.0.9
              six==1.12.0
              wcwidth==0.1.7
            Pygments==2.3.1
            setuptools==41.0.1
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          jupyter-client==5.2.4
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            python-dateutil==2.8.0
              six==1.12.0
            pyzmq==18.0.1
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        ipython-genutils==0.2.0
        Jinja2==2.10.1
          MarkupSafe==1.1.1
        jupyter-client==5.2.4
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          python-dateutil==2.8.0
            six==1.12.0
          pyzmq==18.0.1
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        nbconvert==5.5.0
          bleach==3.1.0
            six==1.12.0
            webencodings==0.5.1
          defusedxml==0.5.0
          entrypoints==0.3
          Jinja2==2.10.1
            MarkupSafe==1.1.1
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          mistune==0.8.4
          nbformat==4.4.0
            ipython-genutils==0.2.0
            jsonschema==3.0.1
              attrs==19.1.0
              pyrsistent==0.15.1
                six==1.12.0
              setuptools==41.0.1
              six==1.12.0
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          pandocfilters==1.4.2
          Pygments==2.3.1
          testpath==0.4.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        nbformat==4.4.0
          ipython-genutils==0.2.0
          jsonschema==3.0.1
            attrs==19.1.0
            pyrsistent==0.15.1
              six==1.12.0
            setuptools==41.0.1
            six==1.12.0
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        prometheus-client==0.6.0
        pyzmq==18.0.1
        Send2Trash==1.5.0
        terminado==0.8.2
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
  numpy==1.16.4
  Pillow==6.1.0
  pythreejs==2.1.1
    ipydatawidgets==4.0.1
      ipywidgets==7.5.0
        ipykernel==5.1.0
          ipython==7.5.0
            backcall==0.1.0
            decorator==4.4.0
            jedi==0.13.3
              parso==0.4.0
            pexpect==4.7.0
              ptyprocess==0.6.0
            pickleshare==0.7.5
            prompt-toolkit==2.0.9
              six==1.12.0
              wcwidth==0.1.7
            Pygments==2.3.1
            setuptools==41.0.1
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          jupyter-client==5.2.4
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            python-dateutil==2.8.0
              six==1.12.0
            pyzmq==18.0.1
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        ipython==7.5.0
          backcall==0.1.0
          decorator==4.4.0
          jedi==0.13.3
            parso==0.4.0
          pexpect==4.7.0
            ptyprocess==0.6.0
          pickleshare==0.7.5
          prompt-toolkit==2.0.9
            six==1.12.0
            wcwidth==0.1.7
          Pygments==2.3.1
          setuptools==41.0.1
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        nbformat==4.4.0
          ipython-genutils==0.2.0
          jsonschema==3.0.1
            attrs==19.1.0
            pyrsistent==0.15.1
              six==1.12.0
            setuptools==41.0.1
            six==1.12.0
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
        widgetsnbextension==3.5.0
          notebook==5.7.8
            ipykernel==5.1.0
              ipython==7.5.0
                backcall==0.1.0
                decorator==4.4.0
                jedi==0.13.3
                  parso==0.4.0
                pexpect==4.7.0
                  ptyprocess==0.6.0
                pickleshare==0.7.5
                prompt-toolkit==2.0.9
                  six==1.12.0
                  wcwidth==0.1.7
                Pygments==2.3.1
                setuptools==41.0.1
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              jupyter-client==5.2.4
                jupyter-core==4.4.0
                  traitlets==4.3.2
                    decorator==4.4.0
                    ipython-genutils==0.2.0
                    six==1.12.0
                python-dateutil==2.8.0
                  six==1.12.0
                pyzmq==18.0.1
                tornado==6.0.2
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              tornado==6.0.2
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            ipython-genutils==0.2.0
            Jinja2==2.10.1
              MarkupSafe==1.1.1
            jupyter-client==5.2.4
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              python-dateutil==2.8.0
                six==1.12.0
              pyzmq==18.0.1
              tornado==6.0.2
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            nbconvert==5.5.0
              bleach==3.1.0
                six==1.12.0
                webencodings==0.5.1
              defusedxml==0.5.0
              entrypoints==0.3
              Jinja2==2.10.1
                MarkupSafe==1.1.1
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              mistune==0.8.4
              nbformat==4.4.0
                ipython-genutils==0.2.0
                jsonschema==3.0.1
                  attrs==19.1.0
                  pyrsistent==0.15.1
                    six==1.12.0
                  setuptools==41.0.1
                  six==1.12.0
                jupyter-core==4.4.0
                  traitlets==4.3.2
                    decorator==4.4.0
                    ipython-genutils==0.2.0
                    six==1.12.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              pandocfilters==1.4.2
              Pygments==2.3.1
              testpath==0.4.2
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            nbformat==4.4.0
              ipython-genutils==0.2.0
              jsonschema==3.0.1
                attrs==19.1.0
                pyrsistent==0.15.1
                  six==1.12.0
                setuptools==41.0.1
                six==1.12.0
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            prometheus-client==0.6.0
            pyzmq==18.0.1
            Send2Trash==1.5.0
            terminado==0.8.2
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
      numpy==1.16.4
      six==1.12.0
      traittypes==0.2.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
    ipywidgets==7.5.0
      ipykernel==5.1.0
        ipython==7.5.0
          backcall==0.1.0
          decorator==4.4.0
          jedi==0.13.3
            parso==0.4.0
          pexpect==4.7.0
            ptyprocess==0.6.0
          pickleshare==0.7.5
          prompt-toolkit==2.0.9
            six==1.12.0
            wcwidth==0.1.7
          Pygments==2.3.1
          setuptools==41.0.1
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        jupyter-client==5.2.4
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          python-dateutil==2.8.0
            six==1.12.0
          pyzmq==18.0.1
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.3.1
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.1
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
      widgetsnbextension==3.5.0
        notebook==5.7.8
          ipykernel==5.1.0
            ipython==7.5.0
              backcall==0.1.0
              decorator==4.4.0
              jedi==0.13.3
                parso==0.4.0
              pexpect==4.7.0
                ptyprocess==0.6.0
              pickleshare==0.7.5
              prompt-toolkit==2.0.9
                six==1.12.0
                wcwidth==0.1.7
              Pygments==2.3.1
              setuptools==41.0.1
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            jupyter-client==5.2.4
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              python-dateutil==2.8.0
                six==1.12.0
              pyzmq==18.0.1
              tornado==6.0.2
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          ipython-genutils==0.2.0
          Jinja2==2.10.1
            MarkupSafe==1.1.1
          jupyter-client==5.2.4
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            python-dateutil==2.8.0
              six==1.12.0
            pyzmq==18.0.1
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          nbconvert==5.5.0
            bleach==3.1.0
              six==1.12.0
              webencodings==0.5.1
            defusedxml==0.5.0
            entrypoints==0.3
            Jinja2==2.10.1
              MarkupSafe==1.1.1
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            mistune==0.8.4
            nbformat==4.4.0
              ipython-genutils==0.2.0
              jsonschema==3.0.1
                attrs==19.1.0
                pyrsistent==0.15.1
                  six==1.12.0
                setuptools==41.0.1
                six==1.12.0
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            pandocfilters==1.4.2
            Pygments==2.3.1
            testpath==0.4.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          nbformat==4.4.0
            ipython-genutils==0.2.0
            jsonschema==3.0.1
              attrs==19.1.0
              pyrsistent==0.15.1
                six==1.12.0
              setuptools==41.0.1
              six==1.12.0
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          prometheus-client==0.6.0
          pyzmq==18.0.1
          Send2Trash==1.5.0
          terminado==0.8.2
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
    numpy==1.16.4
  requests==2.21.0
    certifi==2019.3.9
    chardet==3.0.4
    idna==2.8
    urllib3==1.24.2
  traitlets==4.3.2
    decorator==4.4.0
    ipython-genutils==0.2.0
    six==1.12.0
  traittypes==0.2.1
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
jupyterhub==0.9.4
  alembic==1.0.9
    Mako==1.0.9
      MarkupSafe==1.1.1
    python-dateutil==2.8.0
      six==1.12.0
    python-editor==1.0.4
    SQLAlchemy==1.3.3
  async-generator==1.10
  Jinja2==2.10.1
    MarkupSafe==1.1.1
  pamela==1.0.0
  prometheus-client==0.6.0
  python-dateutil==2.8.0
    six==1.12.0
  python-oauth2==1.1.0
  requests==2.21.0
    certifi==2019.3.9
    chardet==3.0.4
    idna==2.8
    urllib3==1.24.2
  SQLAlchemy==1.3.3
  tornado==6.0.2
  traitlets==4.3.2
    decorator==4.4.0
    ipython-genutils==0.2.0
    six==1.12.0
jupyterlab==0.35.4
  jupyterlab-server==0.2.0
    jsonschema==3.0.1
      attrs==19.1.0
      pyrsistent==0.15.1
        six==1.12.0
      setuptools==41.0.1
      six==1.12.0
    notebook==5.7.8
      ipykernel==5.1.0
        ipython==7.5.0
          backcall==0.1.0
          decorator==4.4.0
          jedi==0.13.3
            parso==0.4.0
          pexpect==4.7.0
            ptyprocess==0.6.0
          pickleshare==0.7.5
          prompt-toolkit==2.0.9
            six==1.12.0
            wcwidth==0.1.7
          Pygments==2.3.1
          setuptools==41.0.1
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        jupyter-client==5.2.4
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          python-dateutil==2.8.0
            six==1.12.0
          pyzmq==18.0.1
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      ipython-genutils==0.2.0
      Jinja2==2.10.1
        MarkupSafe==1.1.1
      jupyter-client==5.2.4
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        python-dateutil==2.8.0
          six==1.12.0
        pyzmq==18.0.1
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      nbconvert==5.5.0
        bleach==3.1.0
          six==1.12.0
          webencodings==0.5.1
        defusedxml==0.5.0
        entrypoints==0.3
        Jinja2==2.10.1
          MarkupSafe==1.1.1
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        mistune==0.8.4
        nbformat==4.4.0
          ipython-genutils==0.2.0
          jsonschema==3.0.1
            attrs==19.1.0
            pyrsistent==0.15.1
              six==1.12.0
            setuptools==41.0.1
            six==1.12.0
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        pandocfilters==1.4.2
        Pygments==2.3.1
        testpath==0.4.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.1
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      prometheus-client==0.6.0
      pyzmq==18.0.1
      Send2Trash==1.5.0
      terminado==0.8.2
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
  notebook==5.7.8
    ipykernel==5.1.0
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.3.1
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      jupyter-client==5.2.4
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        python-dateutil==2.8.0
          six==1.12.0
        pyzmq==18.0.1
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    ipython-genutils==0.2.0
    Jinja2==2.10.1
      MarkupSafe==1.1.1
    jupyter-client==5.2.4
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      python-dateutil==2.8.0
        six==1.12.0
      pyzmq==18.0.1
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    jupyter-core==4.4.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbconvert==5.5.0
      bleach==3.1.0
        six==1.12.0
        webencodings==0.5.1
      defusedxml==0.5.0
      entrypoints==0.3
      Jinja2==2.10.1
        MarkupSafe==1.1.1
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      mistune==0.8.4
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.1
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      pandocfilters==1.4.2
      Pygments==2.3.1
      testpath==0.4.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbformat==4.4.0
      ipython-genutils==0.2.0
      jsonschema==3.0.1
        attrs==19.1.0
        pyrsistent==0.15.1
          six==1.12.0
        setuptools==41.0.1
        six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    prometheus-client==0.6.0
    pyzmq==18.0.1
    Send2Trash==1.5.0
    terminado==0.8.2
    tornado==6.0.2
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
nteract-on-jupyter==2.0.12
  notebook==5.7.8
    ipykernel==5.1.0
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.3.1
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      jupyter-client==5.2.4
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        python-dateutil==2.8.0
          six==1.12.0
        pyzmq==18.0.1
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    ipython-genutils==0.2.0
    Jinja2==2.10.1
      MarkupSafe==1.1.1
    jupyter-client==5.2.4
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      python-dateutil==2.8.0
        six==1.12.0
      pyzmq==18.0.1
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    jupyter-core==4.4.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbconvert==5.5.0
      bleach==3.1.0
        six==1.12.0
        webencodings==0.5.1
      defusedxml==0.5.0
      entrypoints==0.3
      Jinja2==2.10.1
        MarkupSafe==1.1.1
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      mistune==0.8.4
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.1
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      pandocfilters==1.4.2
      Pygments==2.3.1
      testpath==0.4.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbformat==4.4.0
      ipython-genutils==0.2.0
      jsonschema==3.0.1
        attrs==19.1.0
        pyrsistent==0.15.1
          six==1.12.0
        setuptools==41.0.1
        six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    prometheus-client==0.6.0
    pyzmq==18.0.1
    Send2Trash==1.5.0
    terminado==0.8.2
    tornado==6.0.2
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
numpy-stl==2.10.1
  numpy==1.16.4
  python-utils==2.3.0
    six==1.12.0
pipdeptree==0.13.2
  pip==19.1
voila==0.1.6
  jupyter-server==0.0.5
    ipykernel==5.1.0
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.3.1
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      jupyter-client==5.2.4
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        python-dateutil==2.8.0
          six==1.12.0
        pyzmq==18.0.1
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    ipython-genutils==0.2.0
    Jinja2==2.10.1
      MarkupSafe==1.1.1
    jupyter-client==5.2.4
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      python-dateutil==2.8.0
        six==1.12.0
      pyzmq==18.0.1
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    jupyter-core==4.4.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbconvert==5.5.0
      bleach==3.1.0
        six==1.12.0
        webencodings==0.5.1
      defusedxml==0.5.0
      entrypoints==0.3
      Jinja2==2.10.1
        MarkupSafe==1.1.1
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      mistune==0.8.4
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.1
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      pandocfilters==1.4.2
      Pygments==2.3.1
      testpath==0.4.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbformat==4.4.0
      ipython-genutils==0.2.0
      jsonschema==3.0.1
        attrs==19.1.0
        pyrsistent==0.15.1
          six==1.12.0
        setuptools==41.0.1
        six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    prometheus-client==0.6.0
    pyzmq==18.0.1
    Send2Trash==1.5.0
    terminado==0.8.2
    tornado==6.0.2
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
  jupyterlab-pygments==0.1.0
    Pygments==2.3.1
  nbconvert==5.5.0
    bleach==3.1.0
      six==1.12.0
      webencodings==0.5.1
    defusedxml==0.5.0
    entrypoints==0.3
    Jinja2==2.10.1
      MarkupSafe==1.1.1
    jupyter-core==4.4.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    mistune==0.8.4
    nbformat==4.4.0
      ipython-genutils==0.2.0
      jsonschema==3.0.1
        attrs==19.1.0
        pyrsistent==0.15.1
          six==1.12.0
        setuptools==41.0.1
        six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    pandocfilters==1.4.2
    Pygments==2.3.1
    testpath==0.4.2
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
wheel==0.33.1
mybinder.org
ipyvolume==0.5.2
  ipywebrtc==0.5.0
    ipywidgets==7.5.0
      ipykernel==5.1.1
        ipython==7.5.0
          backcall==0.1.0
          decorator==4.4.0
          jedi==0.13.3
            parso==0.4.0
          pexpect==4.7.0
            ptyprocess==0.6.0
          pickleshare==0.7.5
          prompt-toolkit==2.0.9
            six==1.12.0
            wcwidth==0.1.7
          Pygments==2.4.2
          setuptools==41.0.1
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        jupyter-client==5.2.4
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          python-dateutil==2.8.0
            six==1.12.0
          pyzmq==18.0.1
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.4.2
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.2
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
      widgetsnbextension==3.5.0
        notebook==5.7.8
          ipykernel==5.1.1
            ipython==7.5.0
              backcall==0.1.0
              decorator==4.4.0
              jedi==0.13.3
                parso==0.4.0
              pexpect==4.7.0
                ptyprocess==0.6.0
              pickleshare==0.7.5
              prompt-toolkit==2.0.9
                six==1.12.0
                wcwidth==0.1.7
              Pygments==2.4.2
              setuptools==41.0.1
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            jupyter-client==5.2.4
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              python-dateutil==2.8.0
                six==1.12.0
              pyzmq==18.0.1
              tornado==6.0.2
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          ipython-genutils==0.2.0
          Jinja2==2.10.1
            MarkupSafe==1.1.1
          jupyter-client==5.2.4
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            python-dateutil==2.8.0
              six==1.12.0
            pyzmq==18.0.1
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          nbconvert==5.5.0
            bleach==3.1.0
              six==1.12.0
              webencodings==0.5.1
            defusedxml==0.5.0
            entrypoints==0.3
            Jinja2==2.10.1
              MarkupSafe==1.1.1
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            mistune==0.8.4
            nbformat==4.4.0
              ipython-genutils==0.2.0
              jsonschema==3.0.1
                attrs==19.1.0
                pyrsistent==0.15.2
                  six==1.12.0
                setuptools==41.0.1
                six==1.12.0
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            pandocfilters==1.4.2
            Pygments==2.4.2
            testpath==0.4.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          nbformat==4.4.0
            ipython-genutils==0.2.0
            jsonschema==3.0.1
              attrs==19.1.0
              pyrsistent==0.15.2
                six==1.12.0
              setuptools==41.0.1
              six==1.12.0
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          prometheus-client==0.6.0
          pyzmq==18.0.1
          Send2Trash==1.5.0
          terminado==0.8.2
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
  ipywidgets==7.5.0
    ipykernel==5.1.1
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.4.2
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      jupyter-client==5.2.4
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        python-dateutil==2.8.0
          six==1.12.0
        pyzmq==18.0.1
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    ipython==7.5.0
      backcall==0.1.0
      decorator==4.4.0
      jedi==0.13.3
        parso==0.4.0
      pexpect==4.7.0
        ptyprocess==0.6.0
      pickleshare==0.7.5
      prompt-toolkit==2.0.9
        six==1.12.0
        wcwidth==0.1.7
      Pygments==2.4.2
      setuptools==41.0.1
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbformat==4.4.0
      ipython-genutils==0.2.0
      jsonschema==3.0.1
        attrs==19.1.0
        pyrsistent==0.15.2
          six==1.12.0
        setuptools==41.0.1
        six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
    widgetsnbextension==3.5.0
      notebook==5.7.8
        ipykernel==5.1.1
          ipython==7.5.0
            backcall==0.1.0
            decorator==4.4.0
            jedi==0.13.3
              parso==0.4.0
            pexpect==4.7.0
              ptyprocess==0.6.0
            pickleshare==0.7.5
            prompt-toolkit==2.0.9
              six==1.12.0
              wcwidth==0.1.7
            Pygments==2.4.2
            setuptools==41.0.1
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          jupyter-client==5.2.4
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            python-dateutil==2.8.0
              six==1.12.0
            pyzmq==18.0.1
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        ipython-genutils==0.2.0
        Jinja2==2.10.1
          MarkupSafe==1.1.1
        jupyter-client==5.2.4
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          python-dateutil==2.8.0
            six==1.12.0
          pyzmq==18.0.1
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        nbconvert==5.5.0
          bleach==3.1.0
            six==1.12.0
            webencodings==0.5.1
          defusedxml==0.5.0
          entrypoints==0.3
          Jinja2==2.10.1
            MarkupSafe==1.1.1
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          mistune==0.8.4
          nbformat==4.4.0
            ipython-genutils==0.2.0
            jsonschema==3.0.1
              attrs==19.1.0
              pyrsistent==0.15.2
                six==1.12.0
              setuptools==41.0.1
              six==1.12.0
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          pandocfilters==1.4.2
          Pygments==2.4.2
          testpath==0.4.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        nbformat==4.4.0
          ipython-genutils==0.2.0
          jsonschema==3.0.1
            attrs==19.1.0
            pyrsistent==0.15.2
              six==1.12.0
            setuptools==41.0.1
            six==1.12.0
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        prometheus-client==0.6.0
        pyzmq==18.0.1
        Send2Trash==1.5.0
        terminado==0.8.2
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
  numpy==1.16.4
  Pillow==6.1.0
  pythreejs==2.1.1
    ipydatawidgets==4.0.1
      ipywidgets==7.5.0
        ipykernel==5.1.1
          ipython==7.5.0
            backcall==0.1.0
            decorator==4.4.0
            jedi==0.13.3
              parso==0.4.0
            pexpect==4.7.0
              ptyprocess==0.6.0
            pickleshare==0.7.5
            prompt-toolkit==2.0.9
              six==1.12.0
              wcwidth==0.1.7
            Pygments==2.4.2
            setuptools==41.0.1
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          jupyter-client==5.2.4
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            python-dateutil==2.8.0
              six==1.12.0
            pyzmq==18.0.1
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        ipython==7.5.0
          backcall==0.1.0
          decorator==4.4.0
          jedi==0.13.3
            parso==0.4.0
          pexpect==4.7.0
            ptyprocess==0.6.0
          pickleshare==0.7.5
          prompt-toolkit==2.0.9
            six==1.12.0
            wcwidth==0.1.7
          Pygments==2.4.2
          setuptools==41.0.1
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        nbformat==4.4.0
          ipython-genutils==0.2.0
          jsonschema==3.0.1
            attrs==19.1.0
            pyrsistent==0.15.2
              six==1.12.0
            setuptools==41.0.1
            six==1.12.0
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
        widgetsnbextension==3.5.0
          notebook==5.7.8
            ipykernel==5.1.1
              ipython==7.5.0
                backcall==0.1.0
                decorator==4.4.0
                jedi==0.13.3
                  parso==0.4.0
                pexpect==4.7.0
                  ptyprocess==0.6.0
                pickleshare==0.7.5
                prompt-toolkit==2.0.9
                  six==1.12.0
                  wcwidth==0.1.7
                Pygments==2.4.2
                setuptools==41.0.1
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              jupyter-client==5.2.4
                jupyter-core==4.4.0
                  traitlets==4.3.2
                    decorator==4.4.0
                    ipython-genutils==0.2.0
                    six==1.12.0
                python-dateutil==2.8.0
                  six==1.12.0
                pyzmq==18.0.1
                tornado==6.0.2
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              tornado==6.0.2
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            ipython-genutils==0.2.0
            Jinja2==2.10.1
              MarkupSafe==1.1.1
            jupyter-client==5.2.4
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              python-dateutil==2.8.0
                six==1.12.0
              pyzmq==18.0.1
              tornado==6.0.2
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            nbconvert==5.5.0
              bleach==3.1.0
                six==1.12.0
                webencodings==0.5.1
              defusedxml==0.5.0
              entrypoints==0.3
              Jinja2==2.10.1
                MarkupSafe==1.1.1
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              mistune==0.8.4
              nbformat==4.4.0
                ipython-genutils==0.2.0
                jsonschema==3.0.1
                  attrs==19.1.0
                  pyrsistent==0.15.2
                    six==1.12.0
                  setuptools==41.0.1
                  six==1.12.0
                jupyter-core==4.4.0
                  traitlets==4.3.2
                    decorator==4.4.0
                    ipython-genutils==0.2.0
                    six==1.12.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              pandocfilters==1.4.2
              Pygments==2.4.2
              testpath==0.4.2
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            nbformat==4.4.0
              ipython-genutils==0.2.0
              jsonschema==3.0.1
                attrs==19.1.0
                pyrsistent==0.15.2
                  six==1.12.0
                setuptools==41.0.1
                six==1.12.0
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            prometheus-client==0.6.0
            pyzmq==18.0.1
            Send2Trash==1.5.0
            terminado==0.8.2
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
      numpy==1.16.4
      six==1.12.0
      traittypes==0.2.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
    ipywidgets==7.5.0
      ipykernel==5.1.1
        ipython==7.5.0
          backcall==0.1.0
          decorator==4.4.0
          jedi==0.13.3
            parso==0.4.0
          pexpect==4.7.0
            ptyprocess==0.6.0
          pickleshare==0.7.5
          prompt-toolkit==2.0.9
            six==1.12.0
            wcwidth==0.1.7
          Pygments==2.4.2
          setuptools==41.0.1
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        jupyter-client==5.2.4
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          python-dateutil==2.8.0
            six==1.12.0
          pyzmq==18.0.1
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.4.2
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.2
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
      widgetsnbextension==3.5.0
        notebook==5.7.8
          ipykernel==5.1.1
            ipython==7.5.0
              backcall==0.1.0
              decorator==4.4.0
              jedi==0.13.3
                parso==0.4.0
              pexpect==4.7.0
                ptyprocess==0.6.0
              pickleshare==0.7.5
              prompt-toolkit==2.0.9
                six==1.12.0
                wcwidth==0.1.7
              Pygments==2.4.2
              setuptools==41.0.1
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            jupyter-client==5.2.4
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              python-dateutil==2.8.0
                six==1.12.0
              pyzmq==18.0.1
              tornado==6.0.2
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          ipython-genutils==0.2.0
          Jinja2==2.10.1
            MarkupSafe==1.1.1
          jupyter-client==5.2.4
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            python-dateutil==2.8.0
              six==1.12.0
            pyzmq==18.0.1
            tornado==6.0.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          nbconvert==5.5.0
            bleach==3.1.0
              six==1.12.0
              webencodings==0.5.1
            defusedxml==0.5.0
            entrypoints==0.3
            Jinja2==2.10.1
              MarkupSafe==1.1.1
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            mistune==0.8.4
            nbformat==4.4.0
              ipython-genutils==0.2.0
              jsonschema==3.0.1
                attrs==19.1.0
                pyrsistent==0.15.2
                  six==1.12.0
                setuptools==41.0.1
                six==1.12.0
              jupyter-core==4.4.0
                traitlets==4.3.2
                  decorator==4.4.0
                  ipython-genutils==0.2.0
                  six==1.12.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            pandocfilters==1.4.2
            Pygments==2.4.2
            testpath==0.4.2
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          nbformat==4.4.0
            ipython-genutils==0.2.0
            jsonschema==3.0.1
              attrs==19.1.0
              pyrsistent==0.15.2
                six==1.12.0
              setuptools==41.0.1
              six==1.12.0
            jupyter-core==4.4.0
              traitlets==4.3.2
                decorator==4.4.0
                ipython-genutils==0.2.0
                six==1.12.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          prometheus-client==0.6.0
          pyzmq==18.0.1
          Send2Trash==1.5.0
          terminado==0.8.2
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
    numpy==1.16.4
  requests==2.22.0
    certifi==2019.3.9
    chardet==3.0.4
    idna==2.8
    urllib3==1.25.3
  traitlets==4.3.2
    decorator==4.4.0
    ipython-genutils==0.2.0
    six==1.12.0
  traittypes==0.2.1
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
jupyterhub==1.0.0
  alembic==1.0.10
    Mako==1.0.10
      MarkupSafe==1.1.1
    python-dateutil==2.8.0
      six==1.12.0
    python-editor==1.0.4
    SQLAlchemy==1.3.4
  async-generator==1.10
  certipy==0.1.3
    pyOpenSSL==19.0.0
      cryptography==2.6.1
        asn1crypto==0.24.0
        cffi==1.12.3
          pycparser==2.19
        six==1.12.0
      six==1.12.0
  entrypoints==0.3
  Jinja2==2.10.1
    MarkupSafe==1.1.1
  oauthlib==3.0.1
  pamela==1.0.0
  prometheus-client==0.6.0
  python-dateutil==2.8.0
    six==1.12.0
  requests==2.22.0
    certifi==2019.3.9
    chardet==3.0.4
    idna==2.8
    urllib3==1.25.3
  SQLAlchemy==1.3.4
  tornado==6.0.2
  traitlets==4.3.2
    decorator==4.4.0
    ipython-genutils==0.2.0
    six==1.12.0
jupyterlab==0.35.4
  jupyterlab-server==0.2.0
    jsonschema==3.0.1
      attrs==19.1.0
      pyrsistent==0.15.2
        six==1.12.0
      setuptools==41.0.1
      six==1.12.0
    notebook==5.7.8
      ipykernel==5.1.1
        ipython==7.5.0
          backcall==0.1.0
          decorator==4.4.0
          jedi==0.13.3
            parso==0.4.0
          pexpect==4.7.0
            ptyprocess==0.6.0
          pickleshare==0.7.5
          prompt-toolkit==2.0.9
            six==1.12.0
            wcwidth==0.1.7
          Pygments==2.4.2
          setuptools==41.0.1
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        jupyter-client==5.2.4
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          python-dateutil==2.8.0
            six==1.12.0
          pyzmq==18.0.1
          tornado==6.0.2
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      ipython-genutils==0.2.0
      Jinja2==2.10.1
        MarkupSafe==1.1.1
      jupyter-client==5.2.4
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        python-dateutil==2.8.0
          six==1.12.0
        pyzmq==18.0.1
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      nbconvert==5.5.0
        bleach==3.1.0
          six==1.12.0
          webencodings==0.5.1
        defusedxml==0.5.0
        entrypoints==0.3
        Jinja2==2.10.1
          MarkupSafe==1.1.1
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        mistune==0.8.4
        nbformat==4.4.0
          ipython-genutils==0.2.0
          jsonschema==3.0.1
            attrs==19.1.0
            pyrsistent==0.15.2
              six==1.12.0
            setuptools==41.0.1
            six==1.12.0
          jupyter-core==4.4.0
            traitlets==4.3.2
              decorator==4.4.0
              ipython-genutils==0.2.0
              six==1.12.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        pandocfilters==1.4.2
        Pygments==2.4.2
        testpath==0.4.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.2
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      prometheus-client==0.6.0
      pyzmq==18.0.1
      Send2Trash==1.5.0
      terminado==0.8.2
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
  notebook==5.7.8
    ipykernel==5.1.1
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.4.2
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      jupyter-client==5.2.4
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        python-dateutil==2.8.0
          six==1.12.0
        pyzmq==18.0.1
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    ipython-genutils==0.2.0
    Jinja2==2.10.1
      MarkupSafe==1.1.1
    jupyter-client==5.2.4
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      python-dateutil==2.8.0
        six==1.12.0
      pyzmq==18.0.1
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    jupyter-core==4.4.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbconvert==5.5.0
      bleach==3.1.0
        six==1.12.0
        webencodings==0.5.1
      defusedxml==0.5.0
      entrypoints==0.3
      Jinja2==2.10.1
        MarkupSafe==1.1.1
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      mistune==0.8.4
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.2
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      pandocfilters==1.4.2
      Pygments==2.4.2
      testpath==0.4.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbformat==4.4.0
      ipython-genutils==0.2.0
      jsonschema==3.0.1
        attrs==19.1.0
        pyrsistent==0.15.2
          six==1.12.0
        setuptools==41.0.1
        six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    prometheus-client==0.6.0
    pyzmq==18.0.1
    Send2Trash==1.5.0
    terminado==0.8.2
    tornado==6.0.2
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
nteract-on-jupyter==2.0.12
  notebook==5.7.8
    ipykernel==5.1.1
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.4.2
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      jupyter-client==5.2.4
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        python-dateutil==2.8.0
          six==1.12.0
        pyzmq==18.0.1
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    ipython-genutils==0.2.0
    Jinja2==2.10.1
      MarkupSafe==1.1.1
    jupyter-client==5.2.4
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      python-dateutil==2.8.0
        six==1.12.0
      pyzmq==18.0.1
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    jupyter-core==4.4.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbconvert==5.5.0
      bleach==3.1.0
        six==1.12.0
        webencodings==0.5.1
      defusedxml==0.5.0
      entrypoints==0.3
      Jinja2==2.10.1
        MarkupSafe==1.1.1
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      mistune==0.8.4
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.2
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      pandocfilters==1.4.2
      Pygments==2.4.2
      testpath==0.4.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbformat==4.4.0
      ipython-genutils==0.2.0
      jsonschema==3.0.1
        attrs==19.1.0
        pyrsistent==0.15.2
          six==1.12.0
        setuptools==41.0.1
        six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    prometheus-client==0.6.0
    pyzmq==18.0.1
    Send2Trash==1.5.0
    terminado==0.8.2
    tornado==6.0.2
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
numpy-stl==2.10.1
  numpy==1.16.4
  python-utils==2.3.0
    six==1.12.0
pipdeptree==0.13.2
  pip==19.1
voila==0.1.6
  jupyter-server==0.0.5
    ipykernel==5.1.1
      ipython==7.5.0
        backcall==0.1.0
        decorator==4.4.0
        jedi==0.13.3
          parso==0.4.0
        pexpect==4.7.0
          ptyprocess==0.6.0
        pickleshare==0.7.5
        prompt-toolkit==2.0.9
          six==1.12.0
          wcwidth==0.1.7
        Pygments==2.4.2
        setuptools==41.0.1
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      jupyter-client==5.2.4
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        python-dateutil==2.8.0
          six==1.12.0
        pyzmq==18.0.1
        tornado==6.0.2
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    ipython-genutils==0.2.0
    Jinja2==2.10.1
      MarkupSafe==1.1.1
    jupyter-client==5.2.4
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      python-dateutil==2.8.0
        six==1.12.0
      pyzmq==18.0.1
      tornado==6.0.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    jupyter-core==4.4.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbconvert==5.5.0
      bleach==3.1.0
        six==1.12.0
        webencodings==0.5.1
      defusedxml==0.5.0
      entrypoints==0.3
      Jinja2==2.10.1
        MarkupSafe==1.1.1
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      mistune==0.8.4
      nbformat==4.4.0
        ipython-genutils==0.2.0
        jsonschema==3.0.1
          attrs==19.1.0
          pyrsistent==0.15.2
            six==1.12.0
          setuptools==41.0.1
          six==1.12.0
        jupyter-core==4.4.0
          traitlets==4.3.2
            decorator==4.4.0
            ipython-genutils==0.2.0
            six==1.12.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      pandocfilters==1.4.2
      Pygments==2.4.2
      testpath==0.4.2
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    nbformat==4.4.0
      ipython-genutils==0.2.0
      jsonschema==3.0.1
        attrs==19.1.0
        pyrsistent==0.15.2
          six==1.12.0
        setuptools==41.0.1
        six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    prometheus-client==0.6.0
    pyzmq==18.0.1
    Send2Trash==1.5.0
    terminado==0.8.2
    tornado==6.0.2
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
  jupyterlab-pygments==0.1.0
    Pygments==2.4.2
  nbconvert==5.5.0
    bleach==3.1.0
      six==1.12.0
      webencodings==0.5.1
    defusedxml==0.5.0
    entrypoints==0.3
    Jinja2==2.10.1
      MarkupSafe==1.1.1
    jupyter-core==4.4.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    mistune==0.8.4
    nbformat==4.4.0
      ipython-genutils==0.2.0
      jsonschema==3.0.1
        attrs==19.1.0
        pyrsistent==0.15.2
          six==1.12.0
        setuptools==41.0.1
        six==1.12.0
      jupyter-core==4.4.0
        traitlets==4.3.2
          decorator==4.4.0
          ipython-genutils==0.2.0
          six==1.12.0
      traitlets==4.3.2
        decorator==4.4.0
        ipython-genutils==0.2.0
        six==1.12.0
    pandocfilters==1.4.2
    Pygments==2.4.2
    testpath==0.4.2
    traitlets==4.3.2
      decorator==4.4.0
      ipython-genutils==0.2.0
      six==1.12.0
wheel==0.33.4

In this example the version of Pygments is different, which is causing #54.

This makes me wonder whether mybinder.org is doing something more that the gallery isn't?

Plan for SciPy announcement

I'm guessing @SylvainCorlay and others will announce Voila at SciPy. We should make sure the Gallery is upto the task of the folks who will be coming to check it out.

  1. Make sure our instance is big enough
  2. Have some monitoring & metrics in place (so we know how many people showed up)
  3. Have more examples?
  4. Quick design refresh
  5. Make sure idle culling is in place.

Other things to do? /cc @pbugnion @jtpio

Name of 'gallery' repo

I changed the name from the somewhat clunky voila-gallery-deploy to just gallery, since we're namespaced in the voila-gallery org.

Any thoughts / objections / preferences for another name?

Add refs to the examples in gallery.yaml

We might want to consider adding refs to the examples in gallery.yaml.
So that adding a new example would mean providing a commit hash when opening the PR.

This could for now solve the issue of knowing when the example has been updated, especially when they are outside of the voila-gallery organization. And also avoid building + serving what is on the master branch.

Updating an example would mean making a new PR to this repo with the new ref.

Change copyright assignment

At the moment, the license says (c) Yuvi Panda. Is it worth changing this to (c) voila-gallery contributors?

Not sure if this makes any difference?

One file per example

One idea brought by @SylvainCorlay is to split gallery.yaml into different config files, so adding new examples consist of adding a new file instead of editing a single one (and avoid conflicts too).

Improve example cards

As a follow-up for #70, and suggested by @SylvainCorlay in #70 (comment), we can do a second pass on the new visual identity:

  • remove the Launch button to make the whole div a launch button (maybe with a transparent > play button on hover)
  • probably remove the Source button to be replaced with a github link in the corner...

Show version in panel

Problem

Would love to be able to show the version of the application e.g.
image

Excuse the terrible screenshot but you get the idea.

Currently we just put it within the name.

Proposed Solution

Add to the gallery.html a div to show the version if passed (with appropriate styling). I am not sure where is best to show it but maybe its in a rather small font and shown in the bottom right of the panel.

Improve extensibility

A couple of points that could be improved to make it easier to deploy custom galleries:

Reuse existing Docker images

It would be interesting if the voila gallery could also reuse prebuilt Docker images, for example created with tljh-repo2docker.

Then it wouldn't be necessary to periodically rebuild the images. And the environments used for the Voila dashboard would be the same as the ones used by the TLJH users.

Point voila-gallery.org to a floating IP

IIRC, currently voila-gallery.org is pointed at the public IP of a single instance.

Instead, we should use a floating IP that can then be associated with any instance as needed. This will let us do failovers when necessary, and give us a lot of flexibility.

It should be easy to migrate as well:

  1. Create a floating IP
  2. Point it to current instance, while keeping current instance's public IP
  3. Point domain to floating IP

This would make sure we don't have a failure during DNS switchover period.

Add easy way to switch to code view

One of the strengths of voila-gallery is that you can drop from the dashboard to the notebook by changing the URL.

This could be made much more explicit, probably with a custom template for the page with a toggle button, or an 'open in lab' button?

How to write the services with own custom jupyterhub

How to write the services with own custom jupyterhub?
I write the services like below:
c.JupyterHub.services = [ { 'name': 'public', 'url':'http://127.0.0.1:9000', 'command': ['voila'], } ]
and I can't find the path to serve

BinderHub as a backend

TLDR: It would be great for the Voila Gallery to use a BinderHub (mybinder.org) as a backend.

BinderHub as a backend for the gallery

The proposal is as follows:

  • The Voila Gallery is nothing more but a collection of links to pre-built Binders
  • It uses the BinderHub API to spawn the examples
  • Static website built with Jekyll
  • Hosted on GitHub Pages
  • The examples stay in a yaml file (or multiple files)

Demo

Here is a repo that already implements this idea. The end result is relatively simple and minimal:

voila-gallery-binder

Why

It's simpler, and simpler to operate.

This would fix #57, #55, #31, potentially #49 and close voila-gallery/voila-gallery.org-deploy#1.

For #21, we would make voila-gallery.org point to voila-dashboards.github.io and add a CNAME file that contains voila-gallery.org.

Also since making the example work on Binder is part of the steps to add it to the gallery, it sounds reasonable to launch that Binder image directly.

TLJH plugin

We can keep the TLJH plugin for the users who want to deploy the gallery on their own on a single machine using TLJH.

This proposed change is for the public facing gallery, with mybinder.org as the BinderHub. But the BinderHub host could technically be changed to something else in the config.

The repo for the public facing gallery would be https://github.com/voila-dashboards/voila-gallery.org and the content would be the same as https://github.com/jtpio/voila-gallery-binderhub.

The current repo would be renamed to https://voila-dashboards/tljh-voila-gallery, and the gallery.yaml simplified (less examples). The tljh_voila_gallery package could also be published to pypi.org.

Adding a new example

Pretty much the same as before:

Pros

  • Simpler setup
  • Static web site
  • Hosted on GitHub pages
  • We can still keep the plugin for those who want to deploy the gallery on one machine using TLJH
  • The gallery can have links to dashboards deployed on Heroku
  • Opening a PR to add a new example will make sure the ref has been built by Binder before it can be merged
  • Very low maintenance (no need to deploy changes and manage servers)
  • Save $100/month that could be invested in the OVH Binder cluster instead

Cons

  • Slightly longer to launch the examples
  • Puts the load on mybinder.org? The number of concurrent users isn't high so that might not be such an issue. Also the gallery will only link to repos that have already been built (pinned commit hash)

Transition

Here are the steps to transition voila-gallery.org to this setup:

I would be happy to hear other opinions on this proposal!

cc @pbugnion @yuvipanda @SylvainCorlay

Also pinging @betatim since it's related to mybinder.org (event though this is not a lot of traffic)

Move to the voila-dashboards GitHub organization?

We are moving voilà to the voila-dashboards organization, as well as the voilà templates that we work on...

Should voila-gallery also be moved to this organization? It may make sense to only have the examples of the public voila-gallery.org deployment in this organization? Thoughts?

cc @yuvipanda @jtpio

Installation issues

There's still a few installation niggles:

  • the gallery.yaml file needs to be manually copied into site-packages. The best way to solve this might be through package data? Addressed in PR #13 .
  • the installation of the tljh-voila-gallery package does not currently install the package. Addressed in PR #9.
  • dockerspawner is only installed after hub has started running. This requires running sudo systemctl restart jupyterhub after dockerspawner has been installed.
  • the build-images script still needs PyYaml -- this should be removed in favour of ruamel.yaml. Addressed in PR #12 .
  • we could create the build-images systemd service as a post-install step.

As of now, running the following commands brings up a fully working system:

git clone https://github.com/jupyterhub/the-littlest-jupyterhub.git
git clone https://github.com/voila-gallery/gallery.git
cd ~/the-littlest-jupyterhub/
sudo python3 bootstrap/bootstrap.py --plugin /home/ubuntu/gallery/tljh-voila-gallery/
sudo systemctl restart jupyterhub  # restart with dockerspawner
sudo /opt/tljh/hub/bin/build-gallery-images

Adding authentication

It would be great if there were an option to enable authentication before the gallery opens up. And to add the description for it in readme or somewhere else.

Many thanks

Credit OVH for hosting

OVH hosts voila-gallery. How should we credit that?

Suggestions so far:

  • including ovh in the domain name
  • having a 'hosted by OVH' banner somewhere

Automated deployment

Currently:

  • the gallery runs on a single machine using TLJH provisioned using this bootstrap command
  • when the hooks have changed we need to run this command on the instance: sudo python3 the-littlest-jupyterhub/bootstrap/bootstrap.py --plugin tljh-voila-gallery/
  • systemd units are periodically rebuilding the Docker images and resintalling the gallery package (#50)

It should be possible to automate all of this while keeping the single instance setup:

  • Setup CI for this repo (or a gallery-deploy repo)
  • Trigger the deployment when merging into master, or using a simplified version of the mybinder.org recipe
  • Use the openstack client with a voila-gallery-deploy user to start a new instance behind a floating IP (see #55) and do a rolling upgrade
  • At the end of the TLJH setup, build the Docker images (only once)
  • No systemd / scripts running periodically, so the instance stays "immutable"

Example template

It could be useful to add a template-example repo to the voila-gallery example.

Or even a hello-world example with the basics notebook from the voila repo (So easy, voilà!).

So it can serve as a reference for those who want to create their own examples.

Add Unit Tests

We should have some unit tests. Specific ones I can think of:

  1. Write a JSON Schema for gallery.yaml and enforce it
  2. ???

Update the Docker installation

We currently install docker using the tljh_extra_apt_packages hook:

@hookimpl
def tljh_extra_apt_packages():
return [
'docker.io'
]

However the Docker documentation recommends uninstalling docker.io and use a different procedure instead:

https://docs.docker.com/engine/install/ubuntu/

We could then add the steps to install docker-ce in the tljh_post_install hook instead:

@hookimpl
def tljh_post_install():
ensure_builder_units()

By executing apt commands directly, similar to what is done in TLJH:

https://github.com/jupyterhub/the-littlest-jupyterhub/blob/bdaab082ea1171b65a30bd93e27db4fc9b694a44/bootstrap/bootstrap.py#L127-L129

Ownership of `voila-gallery.org` domain

Currently, I own the voila-gallery.org domain. It's registered with AWS Route 53 in a subaccount that I own and Yuvi has access to.

To avoid:

  • my becoming a bottleneck
  • having a bus factor of 1
  • having the domain completely divorced from the hosting

I think it makes sense to transfer it somewhere:

  • does OVH provide domain registration?
  • what's existing best practice for open source deployment? @yuvipanda where is mybinder.org registered, for instance?

Voila scaling

Does voila scale to support 500+ users or is it more of an individual laptop application to render notebooks in the browser?

Add an overview diagram

It would be useful to have an overview diagram in the README.md file to get a quick idea of how the voila gallery plugin works as a TLJH plugin.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.