Skip to content

separate HTTPX 0.28.1 into its own easyconfig, and use it as dependency for JupyterLab + PDM#25289

Merged
branfosj merged 2 commits intoeasybuilders:developfrom
lexming:20260216120938_new_pr_HTTPX0281
Feb 16, 2026
Merged

separate HTTPX 0.28.1 into its own easyconfig, and use it as dependency for JupyterLab + PDM#25289
branfosj merged 2 commits intoeasybuilders:developfrom
lexming:20260216120938_new_pr_HTTPX0281

Conversation

@lexming
Copy link
Copy Markdown
Contributor

@lexming lexming commented Feb 16, 2026

(created using eb --new-pr)

@github-actions github-actions Bot added 2023a 2025a issues & PRs related to 2025a common toolchains 2025b issues & PRs related to 2025b common toolchains change labels Feb 16, 2026
@github-actions
Copy link
Copy Markdown

Updated software JupyterLab-4.2.0-GCCcore-12.3.0.eb

Diff against JupyterLab-4.4.9-GCCcore-14.3.0.eb

easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.9-GCCcore-14.3.0.eb

diff --git a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.9-GCCcore-14.3.0.eb b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.0-GCCcore-12.3.0.eb
index 18514b4a5c..3e435fe334 100644
--- a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.9-GCCcore-14.3.0.eb
+++ b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.0-GCCcore-12.3.0.eb
@@ -1,7 +1,7 @@
 easyblock = 'PythonBundle'
 
 name = 'JupyterLab'
-version = '4.4.9'
+version = '4.2.0'
 
 homepage = 'https://jupyter.org/'
 description = """JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar
@@ -9,34 +9,45 @@ description = """JupyterLab is the next-generation user interface for Project Ju
  etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter
  Notebook."""
 
-toolchain = {'name': 'GCCcore', 'version': '14.3.0'}
+toolchain = {'name': 'GCCcore', 'version': '12.3.0'}
 
 builddependencies = [
-    ('binutils', '2.44'),
+    ('binutils', '2.40'),
     ('hatch-jupyter-builder', '0.9.1'),
 ]
 dependencies = [
-    ('Python', '3.13.5'),
-    ('IPython', '9.4.0'),
-    ('jupyter-server', '2.17.0'),
-    ('HTTPX', '0.28.1'),
+    ('Python', '3.11.3'),
+    ('IPython', '8.14.0'),
+    ('jupyter-server', '2.14.0'),
 ]
 
+use_pip = True
+sanity_pip_check = True
+
 exts_list = [
-    ('json5', '0.12.1', {
-        'checksums': ['b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990'],
+    ('json5', '0.9.25', {
+        'checksums': ['548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae'],
+    }),
+    ('jupyterlab_server', '2.27.1', {
+        'checksums': ['097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d'],
+    }),
+    ('jupyter-lsp', '2.2.5', {
+        'checksums': ['793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001'],
     }),
-    ('jupyterlab_server', '2.27.3', {
-        'checksums': ['eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4'],
+    ('async-lru', '2.0.4', {
+        'checksums': ['b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627'],
     }),
-    ('jupyter_lsp', '2.3.0', {
-        'checksums': ['458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245'],
+    ('h11', '0.14.0', {
+        'checksums': ['8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d'],
     }),
-    ('async_lru', '2.0.5', {
-        'checksums': ['481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb'],
+    ('httpcore', '1.0.5', {
+        'checksums': ['34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61'],
+    }),
+    ('httpx', '0.27.0', {
+        'checksums': ['a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5'],
     }),
     ('jupyterlab', version, {
-        'checksums': ['ea55aca8269909016d5fde2dc09b97128bc931230183fe7e2920ede5154ad9c2'],
+        'checksums': ['356e9205a6a2ab689c47c8fe4919dba6c076e376d03f26baadc05748c2435dd5'],
     }),
 ]
 
@@ -51,10 +62,17 @@ modextrapaths = {'EB_ENV_JUPYTER_ROOT': ''}
 modextravars = {
     # only one path allowed as JUPYTERLAB_DIR
     'JUPYTERLAB_DIR': '%(installdir)s/share/jupyter/lab',
-    # keep user's configuration in their home directory
-    # note: '~' is not expanded by JupyterLab
-    'JUPYTERLAB_SETTINGS_DIR': '$HOME/.jupyter/lab/user-settings',
-    'JUPYTERLAB_WORKSPACES_DIR': '$HOME/.jupyter/lab/workspaces',
 }
 
+# keep user's configuration in their home directory
+# note: '~' is not expanded by JupyterLab
+modluafooter = """
+setenv("JUPYTERLAB_SETTINGS_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "user-settings"))
+setenv("JUPYTERLAB_WORKSPACES_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "workspaces"))
+"""
+modtclfooter = """
+setenv JUPYTERLAB_SETTINGS_DIR "$::env(HOME)/.jupyter/lab/user-settings"
+setenv JUPYTERLAB_WORKSPACES_DIR "$::env(HOME)/.jupyter/lab/workspaces"
+"""
+
 moduleclass = 'tools'
Diff against JupyterLab-4.4.4-GCCcore-14.2.0.eb

easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.4-GCCcore-14.2.0.eb

diff --git a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.4-GCCcore-14.2.0.eb b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.0-GCCcore-12.3.0.eb
index 5021dfd747..3e435fe334 100644
--- a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.4-GCCcore-14.2.0.eb
+++ b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.0-GCCcore-12.3.0.eb
@@ -1,7 +1,7 @@
 easyblock = 'PythonBundle'
 
 name = 'JupyterLab'
-version = '4.4.4'
+version = '4.2.0'
 
 homepage = 'https://jupyter.org/'
 description = """JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar
@@ -9,34 +9,45 @@ description = """JupyterLab is the next-generation user interface for Project Ju
  etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter
  Notebook."""
 
-toolchain = {'name': 'GCCcore', 'version': '14.2.0'}
+toolchain = {'name': 'GCCcore', 'version': '12.3.0'}
 
 builddependencies = [
-    ('binutils', '2.42'),
+    ('binutils', '2.40'),
     ('hatch-jupyter-builder', '0.9.1'),
 ]
 dependencies = [
-    ('Python', '3.13.1'),
-    ('IPython', '9.3.0'),
-    ('jupyter-server', '2.16.0'),
-    ('HTTPX', '0.28.1'),
+    ('Python', '3.11.3'),
+    ('IPython', '8.14.0'),
+    ('jupyter-server', '2.14.0'),
 ]
 
+use_pip = True
+sanity_pip_check = True
+
 exts_list = [
-    ('json5', '0.12.0', {
-        'checksums': ['0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a'],
+    ('json5', '0.9.25', {
+        'checksums': ['548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae'],
     }),
-    ('jupyterlab_server', '2.27.3', {
-        'checksums': ['eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4'],
+    ('jupyterlab_server', '2.27.1', {
+        'checksums': ['097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d'],
     }),
     ('jupyter-lsp', '2.2.5', {
         'checksums': ['793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001'],
     }),
-    ('async_lru', '2.0.5', {
-        'checksums': ['481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb'],
+    ('async-lru', '2.0.4', {
+        'checksums': ['b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627'],
+    }),
+    ('h11', '0.14.0', {
+        'checksums': ['8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d'],
+    }),
+    ('httpcore', '1.0.5', {
+        'checksums': ['34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61'],
+    }),
+    ('httpx', '0.27.0', {
+        'checksums': ['a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5'],
     }),
     ('jupyterlab', version, {
-        'checksums': ['163fee1ef702e0a057f75d2eed3ed1da8a986d59eb002cbeb6f0c2779e6cd153'],
+        'checksums': ['356e9205a6a2ab689c47c8fe4919dba6c076e376d03f26baadc05748c2435dd5'],
     }),
 ]
 
@@ -51,10 +62,17 @@ modextrapaths = {'EB_ENV_JUPYTER_ROOT': ''}
 modextravars = {
     # only one path allowed as JUPYTERLAB_DIR
     'JUPYTERLAB_DIR': '%(installdir)s/share/jupyter/lab',
-    # keep user's configuration in their home directory
-    # note: '~' is not expanded by JupyterLab
-    'JUPYTERLAB_SETTINGS_DIR': '$HOME/.jupyter/lab/user-settings',
-    'JUPYTERLAB_WORKSPACES_DIR': '$HOME/.jupyter/lab/workspaces',
 }
 
+# keep user's configuration in their home directory
+# note: '~' is not expanded by JupyterLab
+modluafooter = """
+setenv("JUPYTERLAB_SETTINGS_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "user-settings"))
+setenv("JUPYTERLAB_WORKSPACES_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "workspaces"))
+"""
+modtclfooter = """
+setenv JUPYTERLAB_SETTINGS_DIR "$::env(HOME)/.jupyter/lab/user-settings"
+setenv JUPYTERLAB_WORKSPACES_DIR "$::env(HOME)/.jupyter/lab/workspaces"
+"""
+
 moduleclass = 'tools'
Diff against JupyterLab-4.2.5-GCCcore-13.3.0.eb

easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.5-GCCcore-13.3.0.eb

diff --git a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.5-GCCcore-13.3.0.eb b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.0-GCCcore-12.3.0.eb
index 84784c0dc0..3e435fe334 100644
--- a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.5-GCCcore-13.3.0.eb
+++ b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.0-GCCcore-12.3.0.eb
@@ -1,7 +1,7 @@
 easyblock = 'PythonBundle'
 
 name = 'JupyterLab'
-version = '4.2.5'
+version = '4.2.0'
 
 homepage = 'https://jupyter.org/'
 description = """JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar
@@ -9,24 +9,27 @@ description = """JupyterLab is the next-generation user interface for Project Ju
  etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter
  Notebook."""
 
-toolchain = {'name': 'GCCcore', 'version': '13.3.0'}
+toolchain = {'name': 'GCCcore', 'version': '12.3.0'}
 
 builddependencies = [
-    ('binutils', '2.42'),
+    ('binutils', '2.40'),
     ('hatch-jupyter-builder', '0.9.1'),
 ]
 dependencies = [
-    ('Python', '3.12.3'),
-    ('IPython', '8.28.0'),
-    ('jupyter-server', '2.14.2'),
+    ('Python', '3.11.3'),
+    ('IPython', '8.14.0'),
+    ('jupyter-server', '2.14.0'),
 ]
 
+use_pip = True
+sanity_pip_check = True
+
 exts_list = [
     ('json5', '0.9.25', {
         'checksums': ['548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae'],
     }),
-    ('jupyterlab_server', '2.27.3', {
-        'checksums': ['eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4'],
+    ('jupyterlab_server', '2.27.1', {
+        'checksums': ['097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d'],
     }),
     ('jupyter-lsp', '2.2.5', {
         'checksums': ['793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001'],
@@ -37,14 +40,14 @@ exts_list = [
     ('h11', '0.14.0', {
         'checksums': ['8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d'],
     }),
-    ('httpcore', '1.0.6', {
-        'checksums': ['73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f'],
+    ('httpcore', '1.0.5', {
+        'checksums': ['34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61'],
     }),
-    ('httpx', '0.27.2', {
-        'checksums': ['f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2'],
+    ('httpx', '0.27.0', {
+        'checksums': ['a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5'],
     }),
     ('jupyterlab', version, {
-        'checksums': ['ae7f3a1b8cb88b4f55009ce79fa7c06f99d70cd63601ee4aa91815d054f46f75'],
+        'checksums': ['356e9205a6a2ab689c47c8fe4919dba6c076e376d03f26baadc05748c2435dd5'],
     }),
 ]
 
@@ -59,10 +62,17 @@ modextrapaths = {'EB_ENV_JUPYTER_ROOT': ''}
 modextravars = {
     # only one path allowed as JUPYTERLAB_DIR
     'JUPYTERLAB_DIR': '%(installdir)s/share/jupyter/lab',
-    # keep user's configuration in their home directory
-    # note: '~' is not expanded by JupyterLab
-    'JUPYTERLAB_SETTINGS_DIR': '$HOME/.jupyter/lab/user-settings',
-    'JUPYTERLAB_WORKSPACES_DIR': '$HOME/.jupyter/lab/workspaces',
 }
 
+# keep user's configuration in their home directory
+# note: '~' is not expanded by JupyterLab
+modluafooter = """
+setenv("JUPYTERLAB_SETTINGS_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "user-settings"))
+setenv("JUPYTERLAB_WORKSPACES_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "workspaces"))
+"""
+modtclfooter = """
+setenv JUPYTERLAB_SETTINGS_DIR "$::env(HOME)/.jupyter/lab/user-settings"
+setenv JUPYTERLAB_WORKSPACES_DIR "$::env(HOME)/.jupyter/lab/workspaces"
+"""
+
 moduleclass = 'tools'

Updated software JupyterLab-4.2.1-GCCcore-12.3.0.eb

Diff against JupyterLab-4.4.9-GCCcore-14.3.0.eb

easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.9-GCCcore-14.3.0.eb

diff --git a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.9-GCCcore-14.3.0.eb b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.1-GCCcore-12.3.0.eb
index 18514b4a5c..f1fce2348e 100644
--- a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.9-GCCcore-14.3.0.eb
+++ b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.1-GCCcore-12.3.0.eb
@@ -1,7 +1,7 @@
 easyblock = 'PythonBundle'
 
 name = 'JupyterLab'
-version = '4.4.9'
+version = '4.2.1'
 
 homepage = 'https://jupyter.org/'
 description = """JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar
@@ -9,39 +9,58 @@ description = """JupyterLab is the next-generation user interface for Project Ju
  etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter
  Notebook."""
 
-toolchain = {'name': 'GCCcore', 'version': '14.3.0'}
+toolchain = {'name': 'GCCcore', 'version': '12.3.0'}
+
+postinstallpatches = [
+    # custom settings for VUB notebook platform
+    ("JupyterLab-4.2_vub-configuration.patch", 1),
+]
+checksums = [
+    {'JupyterLab-4.2_vub-configuration.patch': '4c5c7e6fd09ec188b8712b9a42f356e8816639a60baba470336f685a9382e6b8'},
+]
 
 builddependencies = [
-    ('binutils', '2.44'),
+    ('binutils', '2.40'),
     ('hatch-jupyter-builder', '0.9.1'),
 ]
 dependencies = [
-    ('Python', '3.13.5'),
-    ('IPython', '9.4.0'),
-    ('jupyter-server', '2.17.0'),
-    ('HTTPX', '0.28.1'),
+    ('Python', '3.11.3'),
+    ('IPython', '8.14.0'),
+    ('jupyter-server', '2.14.0'),
 ]
 
+use_pip = True
+sanity_pip_check = True
+
 exts_list = [
-    ('json5', '0.12.1', {
-        'checksums': ['b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990'],
+    ('json5', '0.9.25', {
+        'checksums': ['548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae'],
     }),
-    ('jupyterlab_server', '2.27.3', {
-        'checksums': ['eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4'],
+    ('jupyterlab_server', '2.27.1', {
+        'checksums': ['097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d'],
     }),
-    ('jupyter_lsp', '2.3.0', {
-        'checksums': ['458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245'],
+    ('jupyter-lsp', '2.2.5', {
+        'checksums': ['793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001'],
     }),
-    ('async_lru', '2.0.5', {
-        'checksums': ['481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb'],
+    ('async-lru', '2.0.4', {
+        'checksums': ['b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627'],
+    }),
+    ('h11', '0.14.0', {
+        'checksums': ['8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d'],
+    }),
+    ('httpcore', '1.0.5', {
+        'checksums': ['34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61'],
+    }),
+    ('httpx', '0.27.0', {
+        'checksums': ['a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5'],
     }),
     ('jupyterlab', version, {
-        'checksums': ['ea55aca8269909016d5fde2dc09b97128bc931230183fe7e2920ede5154ad9c2'],
+        'checksums': ['a10fb71085a6900820c62d43324005046402ffc8f0fde696103e37238a839507'],
     }),
 ]
 
 sanity_check_paths = {
-    'files': ['bin/jupyter-lab', 'bin/jupyter-labextension', 'bin/jupyter-labhub'],
+    'files': ['bin/jupyter-lab', 'bin/jupyter-labextension', 'bin/jupyter-labhub', 'etc/jupyter/jupyter_lab_config.py'],
     'dirs': ['etc/jupyter', 'share/jupyter'],
 }
 
@@ -51,10 +70,17 @@ modextrapaths = {'EB_ENV_JUPYTER_ROOT': ''}
 modextravars = {
     # only one path allowed as JUPYTERLAB_DIR
     'JUPYTERLAB_DIR': '%(installdir)s/share/jupyter/lab',
-    # keep user's configuration in their home directory
-    # note: '~' is not expanded by JupyterLab
-    'JUPYTERLAB_SETTINGS_DIR': '$HOME/.jupyter/lab/user-settings',
-    'JUPYTERLAB_WORKSPACES_DIR': '$HOME/.jupyter/lab/workspaces',
 }
 
+# keep user's configuration in their home directory
+# note: '~' is not expanded by JupyterLab
+modluafooter = """
+setenv("JUPYTERLAB_SETTINGS_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "user-settings"))
+setenv("JUPYTERLAB_WORKSPACES_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "workspaces"))
+"""
+modtclfooter = """
+setenv JUPYTERLAB_SETTINGS_DIR "$::env(HOME)/.jupyter/lab/user-settings"
+setenv JUPYTERLAB_WORKSPACES_DIR "$::env(HOME)/.jupyter/lab/workspaces"
+"""
+
 moduleclass = 'tools'
Diff against JupyterLab-4.4.4-GCCcore-14.2.0.eb

easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.4-GCCcore-14.2.0.eb

diff --git a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.4-GCCcore-14.2.0.eb b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.1-GCCcore-12.3.0.eb
index 5021dfd747..f1fce2348e 100644
--- a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.4.4-GCCcore-14.2.0.eb
+++ b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.1-GCCcore-12.3.0.eb
@@ -1,7 +1,7 @@
 easyblock = 'PythonBundle'
 
 name = 'JupyterLab'
-version = '4.4.4'
+version = '4.2.1'
 
 homepage = 'https://jupyter.org/'
 description = """JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar
@@ -9,39 +9,58 @@ description = """JupyterLab is the next-generation user interface for Project Ju
  etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter
  Notebook."""
 
-toolchain = {'name': 'GCCcore', 'version': '14.2.0'}
+toolchain = {'name': 'GCCcore', 'version': '12.3.0'}
+
+postinstallpatches = [
+    # custom settings for VUB notebook platform
+    ("JupyterLab-4.2_vub-configuration.patch", 1),
+]
+checksums = [
+    {'JupyterLab-4.2_vub-configuration.patch': '4c5c7e6fd09ec188b8712b9a42f356e8816639a60baba470336f685a9382e6b8'},
+]
 
 builddependencies = [
-    ('binutils', '2.42'),
+    ('binutils', '2.40'),
     ('hatch-jupyter-builder', '0.9.1'),
 ]
 dependencies = [
-    ('Python', '3.13.1'),
-    ('IPython', '9.3.0'),
-    ('jupyter-server', '2.16.0'),
-    ('HTTPX', '0.28.1'),
+    ('Python', '3.11.3'),
+    ('IPython', '8.14.0'),
+    ('jupyter-server', '2.14.0'),
 ]
 
+use_pip = True
+sanity_pip_check = True
+
 exts_list = [
-    ('json5', '0.12.0', {
-        'checksums': ['0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a'],
+    ('json5', '0.9.25', {
+        'checksums': ['548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae'],
     }),
-    ('jupyterlab_server', '2.27.3', {
-        'checksums': ['eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4'],
+    ('jupyterlab_server', '2.27.1', {
+        'checksums': ['097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d'],
     }),
     ('jupyter-lsp', '2.2.5', {
         'checksums': ['793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001'],
     }),
-    ('async_lru', '2.0.5', {
-        'checksums': ['481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb'],
+    ('async-lru', '2.0.4', {
+        'checksums': ['b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627'],
+    }),
+    ('h11', '0.14.0', {
+        'checksums': ['8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d'],
+    }),
+    ('httpcore', '1.0.5', {
+        'checksums': ['34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61'],
+    }),
+    ('httpx', '0.27.0', {
+        'checksums': ['a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5'],
     }),
     ('jupyterlab', version, {
-        'checksums': ['163fee1ef702e0a057f75d2eed3ed1da8a986d59eb002cbeb6f0c2779e6cd153'],
+        'checksums': ['a10fb71085a6900820c62d43324005046402ffc8f0fde696103e37238a839507'],
     }),
 ]
 
 sanity_check_paths = {
-    'files': ['bin/jupyter-lab', 'bin/jupyter-labextension', 'bin/jupyter-labhub'],
+    'files': ['bin/jupyter-lab', 'bin/jupyter-labextension', 'bin/jupyter-labhub', 'etc/jupyter/jupyter_lab_config.py'],
     'dirs': ['etc/jupyter', 'share/jupyter'],
 }
 
@@ -51,10 +70,17 @@ modextrapaths = {'EB_ENV_JUPYTER_ROOT': ''}
 modextravars = {
     # only one path allowed as JUPYTERLAB_DIR
     'JUPYTERLAB_DIR': '%(installdir)s/share/jupyter/lab',
-    # keep user's configuration in their home directory
-    # note: '~' is not expanded by JupyterLab
-    'JUPYTERLAB_SETTINGS_DIR': '$HOME/.jupyter/lab/user-settings',
-    'JUPYTERLAB_WORKSPACES_DIR': '$HOME/.jupyter/lab/workspaces',
 }
 
+# keep user's configuration in their home directory
+# note: '~' is not expanded by JupyterLab
+modluafooter = """
+setenv("JUPYTERLAB_SETTINGS_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "user-settings"))
+setenv("JUPYTERLAB_WORKSPACES_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "workspaces"))
+"""
+modtclfooter = """
+setenv JUPYTERLAB_SETTINGS_DIR "$::env(HOME)/.jupyter/lab/user-settings"
+setenv JUPYTERLAB_WORKSPACES_DIR "$::env(HOME)/.jupyter/lab/workspaces"
+"""
+
 moduleclass = 'tools'
Diff against JupyterLab-4.2.5-GCCcore-13.3.0.eb

easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.5-GCCcore-13.3.0.eb

diff --git a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.5-GCCcore-13.3.0.eb b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.1-GCCcore-12.3.0.eb
index 84784c0dc0..f1fce2348e 100644
--- a/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.5-GCCcore-13.3.0.eb
+++ b/easybuild/easyconfigs/j/JupyterLab/JupyterLab-4.2.1-GCCcore-12.3.0.eb
@@ -1,7 +1,7 @@
 easyblock = 'PythonBundle'
 
 name = 'JupyterLab'
-version = '4.2.5'
+version = '4.2.1'
 
 homepage = 'https://jupyter.org/'
 description = """JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar
@@ -9,24 +9,35 @@ description = """JupyterLab is the next-generation user interface for Project Ju
  etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter
  Notebook."""
 
-toolchain = {'name': 'GCCcore', 'version': '13.3.0'}
+toolchain = {'name': 'GCCcore', 'version': '12.3.0'}
+
+postinstallpatches = [
+    # custom settings for VUB notebook platform
+    ("JupyterLab-4.2_vub-configuration.patch", 1),
+]
+checksums = [
+    {'JupyterLab-4.2_vub-configuration.patch': '4c5c7e6fd09ec188b8712b9a42f356e8816639a60baba470336f685a9382e6b8'},
+]
 
 builddependencies = [
-    ('binutils', '2.42'),
+    ('binutils', '2.40'),
     ('hatch-jupyter-builder', '0.9.1'),
 ]
 dependencies = [
-    ('Python', '3.12.3'),
-    ('IPython', '8.28.0'),
-    ('jupyter-server', '2.14.2'),
+    ('Python', '3.11.3'),
+    ('IPython', '8.14.0'),
+    ('jupyter-server', '2.14.0'),
 ]
 
+use_pip = True
+sanity_pip_check = True
+
 exts_list = [
     ('json5', '0.9.25', {
         'checksums': ['548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae'],
     }),
-    ('jupyterlab_server', '2.27.3', {
-        'checksums': ['eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4'],
+    ('jupyterlab_server', '2.27.1', {
+        'checksums': ['097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d'],
     }),
     ('jupyter-lsp', '2.2.5', {
         'checksums': ['793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001'],
@@ -37,19 +48,19 @@ exts_list = [
     ('h11', '0.14.0', {
         'checksums': ['8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d'],
     }),
-    ('httpcore', '1.0.6', {
-        'checksums': ['73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f'],
+    ('httpcore', '1.0.5', {
+        'checksums': ['34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61'],
     }),
-    ('httpx', '0.27.2', {
-        'checksums': ['f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2'],
+    ('httpx', '0.27.0', {
+        'checksums': ['a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5'],
     }),
     ('jupyterlab', version, {
-        'checksums': ['ae7f3a1b8cb88b4f55009ce79fa7c06f99d70cd63601ee4aa91815d054f46f75'],
+        'checksums': ['a10fb71085a6900820c62d43324005046402ffc8f0fde696103e37238a839507'],
     }),
 ]
 
 sanity_check_paths = {
-    'files': ['bin/jupyter-lab', 'bin/jupyter-labextension', 'bin/jupyter-labhub'],
+    'files': ['bin/jupyter-lab', 'bin/jupyter-labextension', 'bin/jupyter-labhub', 'etc/jupyter/jupyter_lab_config.py'],
     'dirs': ['etc/jupyter', 'share/jupyter'],
 }
 
@@ -59,10 +70,17 @@ modextrapaths = {'EB_ENV_JUPYTER_ROOT': ''}
 modextravars = {
     # only one path allowed as JUPYTERLAB_DIR
     'JUPYTERLAB_DIR': '%(installdir)s/share/jupyter/lab',
-    # keep user's configuration in their home directory
-    # note: '~' is not expanded by JupyterLab
-    'JUPYTERLAB_SETTINGS_DIR': '$HOME/.jupyter/lab/user-settings',
-    'JUPYTERLAB_WORKSPACES_DIR': '$HOME/.jupyter/lab/workspaces',
 }
 
+# keep user's configuration in their home directory
+# note: '~' is not expanded by JupyterLab
+modluafooter = """
+setenv("JUPYTERLAB_SETTINGS_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "user-settings"))
+setenv("JUPYTERLAB_WORKSPACES_DIR", pathJoin(os.getenv("HOME"), ".jupyter", "lab", "workspaces"))
+"""
+modtclfooter = """
+setenv JUPYTERLAB_SETTINGS_DIR "$::env(HOME)/.jupyter/lab/user-settings"
+setenv JUPYTERLAB_WORKSPACES_DIR "$::env(HOME)/.jupyter/lab/workspaces"
+"""
+
 moduleclass = 'tools'

@lexming
Copy link
Copy Markdown
Contributor Author

lexming commented Feb 16, 2026

@boegelbot please test @ jsc-zen3

@boegelbot
Copy link
Copy Markdown
Collaborator

@lexming: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=25289 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_25289 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 9689

Test results coming soon (I hope)...

Details

- notification for comment with ID 3907906524 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@boegelbot
Copy link
Copy Markdown
Collaborator

Test report by @boegelbot
SUCCESS
Build succeeded for 6 out of 6 (total: 21 mins 9 secs) (6 easyconfigs in total)
jsczen3c3.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.7, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.23
See https://gist.github.com/boegelbot/6b6efc3a4b5572177b5685fa1fe61190 for a full test report.

@branfosj branfosj added this to the next release (5.2.1) milestone Feb 16, 2026
@branfosj
Copy link
Copy Markdown
Member

Test report by @branfosj
SUCCESS
Build succeeded for 10 out of 10 (total: 15 mins 7 secs) (6 easyconfigs in total)
bear-pg0210u03a - Linux RHEL 8.10, x86_64, Intel(R) Xeon(R) Platinum 8480CL (sapphirerapids), Python 3.6.8
See https://gist.github.com/branfosj/0aa4ff6f22732f76912d34089833cb6a for a full test report.

@branfosj
Copy link
Copy Markdown
Member

Going in, thanks @lexming!

@branfosj branfosj merged commit f40c548 into easybuilders:develop Feb 16, 2026
5 checks passed
@lexming lexming deleted the 20260216120938_new_pr_HTTPX0281 branch February 16, 2026 12:21
@boegel boegel changed the title separate HTTPX into its own easyconfig separate HTTPX 0.28.1 into its own easyconfig, and use it as dependency for JupyterLab + PDM Feb 20, 2026
@Micket
Copy link
Copy Markdown
Contributor

Micket commented Mar 4, 2026

Test report by @Micket
SUCCESS
Build succeeded for 6 out of 6 (total: 7 mins 23 secs) (6 easyconfigs in total)
vera-icelake-build - Linux Rocky Linux 9.6, x86_64, Intel(R) Xeon(R) Silver 4316 CPU @ 2.30GHz, Python 3.9.21
See https://gist.github.com/Micket/2234582949a86a5ccff33bec87ff6aa0 for a full test report.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

2025a issues & PRs related to 2025a common toolchains 2025b issues & PRs related to 2025b common toolchains change new

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants