mirror of
https://github.com/jupyterhub/the-littlest-jupyterhub.git
synced 2025-12-18 21:54:05 +08:00
Merge pull request #658 from jtpio/jupyterlab-3.0
This commit is contained in:
@@ -40,9 +40,7 @@ Apt packages
|
|||||||
============
|
============
|
||||||
|
|
||||||
Base operating system packages, including Python itself, are installed
|
Base operating system packages, including Python itself, are installed
|
||||||
via ``apt`` from the base Ubuntu repositories. The one exception to this
|
via ``apt`` from the base Ubuntu repositories.
|
||||||
is nodejs, which is installed from the `nodesource <https://github.com/nodesource/distributions>`_
|
|
||||||
apt repository. The Ubuntu provided version of nodejs is usually too old.
|
|
||||||
|
|
||||||
We generally do not pin versions of packages provided by apt, instead
|
We generally do not pin versions of packages provided by apt, instead
|
||||||
just using the latest versions provided by Ubuntu.
|
just using the latest versions provided by Ubuntu.
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
Check your memory usage
|
Check your memory usage
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
The `nbresuse <https://github.com/yuvipanda/nbresuse>`_ extension is part of
|
The `jupyter-resource-usage <https://github.com/jupyter-server/jupyter-resource-usage>`_ extension is part of
|
||||||
the default installation, and tells you how much memory your user is using
|
the default installation, and tells you how much memory your user is using
|
||||||
right now, and what the memory limit for your user is. It is shown in the
|
right now, and what the memory limit for your user is. It is shown in the
|
||||||
top right corner of the notebook interface. Note that this is memory usage
|
top right corner of the notebook interface. Note that this is memory usage
|
||||||
@@ -12,4 +12,4 @@ for everything your user is running through the Jupyter notebook interface,
|
|||||||
not just the specific notebook it is shown on.
|
not just the specific notebook it is shown on.
|
||||||
|
|
||||||
.. image:: ../../images/nbresuse.png
|
.. image:: ../../images/nbresuse.png
|
||||||
:alt: Memory limit / usage shown with nbresuse
|
:alt: Memory limit / usage shown with jupyter-resource-usage
|
||||||
|
|||||||
@@ -37,10 +37,10 @@ Verifying a Resize
|
|||||||
#. **To verify changes to memory**, confirm that it worked by starting
|
#. **To verify changes to memory**, confirm that it worked by starting
|
||||||
a new server (if you had one previously running, click "Control Panel -> Stop My Server" to
|
a new server (if you had one previously running, click "Control Panel -> Stop My Server" to
|
||||||
shut down your active server first), opening a notebook, and checking the value of the
|
shut down your active server first), opening a notebook, and checking the value of the
|
||||||
`nbresuse <https://github.com/yuvipanda/nbresuse>`_ extension in the upper-right.
|
`jupyter-resource-usage <https://github.com/jupyter-server/jupyter-resource-usage>`_ extension in the upper-right.
|
||||||
|
|
||||||
.. image:: ../../images/nbresuse.png
|
.. image:: ../../images/nbresuse.png
|
||||||
:alt: nbresuse demonstration
|
:alt: jupyter-resource-usage demonstration
|
||||||
|
|
||||||
#. **To verify changes to CPU**, use the ``nproc`` from a terminal.
|
#. **To verify changes to CPU**, use the ``nproc`` from a terminal.
|
||||||
This command displays the number of available cores, and should be equal to the
|
This command displays the number of available cores, and should be equal to the
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ stop, unlike with RAM.
|
|||||||
The ``20%`` is overhead for TLJH and related services. This is around 20% of a
|
The ``20%`` is overhead for TLJH and related services. This is around 20% of a
|
||||||
single modern CPU. This, of course, is just an estimate. We recommend using
|
single modern CPU. This, of course, is just an estimate. We recommend using
|
||||||
the same process used to estimate Memory required for estimating CPU required.
|
the same process used to estimate Memory required for estimating CPU required.
|
||||||
You cannot use nbresuse for this, but you should carry out normal workflow and
|
You cannot use jupyter-resource-usage for this, but you should carry out normal workflow and
|
||||||
investigate the CPU usage on the machine.
|
investigate the CPU usage on the machine.
|
||||||
|
|
||||||
Disk space
|
Disk space
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ run on.
|
|||||||
==========================
|
==========================
|
||||||
|
|
||||||
The packages ``python3`` and ``python3-venv`` are installed from the apt repositories.
|
The packages ``python3`` and ``python3-venv`` are installed from the apt repositories.
|
||||||
Since we need an recent & supported version of ``nodejs``, we install it from
|
|
||||||
`nodesource <https://github.com/nodesource/distributions>`_.
|
|
||||||
|
|
||||||
Hub environment
|
Hub environment
|
||||||
===============
|
===============
|
||||||
|
|||||||
@@ -13,10 +13,10 @@ def test_serverextensions():
|
|||||||
], stderr=subprocess.PIPE)
|
], stderr=subprocess.PIPE)
|
||||||
|
|
||||||
extensions = [
|
extensions = [
|
||||||
'jupyterlab 2.',
|
'jupyterlab 3.',
|
||||||
'nbgitpuller 0.9.',
|
'nbgitpuller 0.9.',
|
||||||
'nteract_on_jupyter 2.1.',
|
'nteract_on_jupyter 2.1.',
|
||||||
'nbresuse '
|
'jupyter_resource_usage'
|
||||||
]
|
]
|
||||||
|
|
||||||
for e in extensions:
|
for e in extensions:
|
||||||
@@ -33,7 +33,7 @@ def test_nbextensions():
|
|||||||
], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
||||||
|
|
||||||
extensions = [
|
extensions = [
|
||||||
'nbresuse/main',
|
'jupyter_resource_usage/main',
|
||||||
# This is what ipywidgets nbextension is called
|
# This is what ipywidgets nbextension is called
|
||||||
'jupyter-js-widgets/extension'
|
'jupyter-js-widgets/extension'
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -8,11 +8,6 @@ from tljh import installer
|
|||||||
from tljh.yaml import yaml
|
from tljh.yaml import yaml
|
||||||
|
|
||||||
|
|
||||||
def test_ensure_node():
|
|
||||||
installer.ensure_node()
|
|
||||||
assert os.path.exists('/usr/bin/node')
|
|
||||||
|
|
||||||
|
|
||||||
def test_ensure_config_yaml(tljh_dir):
|
def test_ensure_config_yaml(tljh_dir):
|
||||||
pm = installer.setup_plugins()
|
pm = installer.setup_plugins()
|
||||||
installer.ensure_config_yaml(pm)
|
installer.ensure_config_yaml(pm)
|
||||||
|
|||||||
@@ -42,67 +42,6 @@ HERE = os.path.abspath(os.path.dirname(__file__))
|
|||||||
|
|
||||||
logger = logging.getLogger("tljh")
|
logger = logging.getLogger("tljh")
|
||||||
|
|
||||||
def ensure_node():
|
|
||||||
"""
|
|
||||||
Ensure nodejs from nodesource is installed
|
|
||||||
"""
|
|
||||||
key = b"""
|
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
||||||
Version: GnuPG v1
|
|
||||||
Comment: GPGTools - https://gpgtools.org
|
|
||||||
|
|
||||||
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
|
|
||||||
=CLGF
|
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
||||||
""".strip()
|
|
||||||
apt.trust_gpg_key(key)
|
|
||||||
apt.add_source('nodesource', 'https://deb.nodesource.com/node_10.x', 'main')
|
|
||||||
apt.install_packages(['nodejs'])
|
|
||||||
|
|
||||||
def remove_chp():
|
def remove_chp():
|
||||||
"""
|
"""
|
||||||
@@ -166,36 +105,6 @@ def ensure_jupyterhub_service(prefix):
|
|||||||
systemd.enable_service('traefik')
|
systemd.enable_service('traefik')
|
||||||
|
|
||||||
|
|
||||||
def ensure_jupyterlab_extensions():
|
|
||||||
"""
|
|
||||||
Install the JupyterLab extensions we want.
|
|
||||||
"""
|
|
||||||
extensions = [
|
|
||||||
# We don't pin versions here, since labextension will find something
|
|
||||||
# appropriate for our version of jupyterlab
|
|
||||||
'@jupyter-widgets/jupyterlab-manager'
|
|
||||||
]
|
|
||||||
install_options = [
|
|
||||||
'--no-build' # do not build extension at install time. Will build later
|
|
||||||
]
|
|
||||||
utils.run_subprocess([
|
|
||||||
os.path.join(USER_ENV_PREFIX, 'bin/jupyter'),
|
|
||||||
'labextension',
|
|
||||||
'install'
|
|
||||||
] + extensions + install_options)
|
|
||||||
|
|
||||||
# Build all the lab extensions in one go using jupyter lab build command
|
|
||||||
build_options = [
|
|
||||||
'--minimize=False',
|
|
||||||
'--dev-build=False'
|
|
||||||
]
|
|
||||||
|
|
||||||
utils.run_subprocess([
|
|
||||||
os.path.join(USER_ENV_PREFIX, 'bin/jupyter'),
|
|
||||||
'lab',
|
|
||||||
'build'
|
|
||||||
] + build_options)
|
|
||||||
|
|
||||||
|
|
||||||
def ensure_jupyterhub_package(prefix):
|
def ensure_jupyterhub_package(prefix):
|
||||||
"""
|
"""
|
||||||
@@ -506,9 +415,7 @@ def main():
|
|||||||
ensure_user_environment(args.user_requirements_txt_url)
|
ensure_user_environment(args.user_requirements_txt_url)
|
||||||
|
|
||||||
logger.info("Setting up JupyterHub...")
|
logger.info("Setting up JupyterHub...")
|
||||||
ensure_node()
|
|
||||||
ensure_jupyterhub_package(HUB_ENV_PREFIX)
|
ensure_jupyterhub_package(HUB_ENV_PREFIX)
|
||||||
ensure_jupyterlab_extensions()
|
|
||||||
|
|
||||||
# Stop the http server with the progress page before traefik starts
|
# Stop the http server with the progress page before traefik starts
|
||||||
if args.progress_page_server_pid:
|
if args.progress_page_server_pid:
|
||||||
|
|||||||
@@ -5,13 +5,14 @@
|
|||||||
jupyterhub==1.2.*
|
jupyterhub==1.2.*
|
||||||
notebook==6.1.5
|
notebook==6.1.5
|
||||||
# Install additional notebook frontends!
|
# Install additional notebook frontends!
|
||||||
jupyterlab==2.*
|
jupyterlab==3.*
|
||||||
nteract-on-jupyter==2.1.*
|
nteract-on-jupyter==2.1.*
|
||||||
|
# Install jupyterlab extensions from PyPI
|
||||||
# nbgitpuller for easily pulling in Git repositories
|
# nbgitpuller for easily pulling in Git repositories
|
||||||
nbgitpuller==0.9.*
|
nbgitpuller==0.9.*
|
||||||
# nbresuse to show people how much RAM they are using
|
# jupyter-resource-usage to show people how much RAM they are using
|
||||||
nbresuse==0.3.*
|
jupyter-resource-usage==0.5.*
|
||||||
# Most people consider ipywidgets to be part of the core notebook experience
|
# Most people consider ipywidgets to be part of the core notebook experience
|
||||||
ipywidgets==7.5.*
|
ipywidgets==7.6.*
|
||||||
# Pin tornado
|
# Pin tornado
|
||||||
tornado<6
|
tornado>=6.1
|
||||||
|
|||||||
Reference in New Issue
Block a user