Select Git revision
d1mach.f
JupyterLab-2023.3.6-GCCcore-11.3.0.eb 38.81 KiB
easyblock = 'PythonBundle'
name = 'JupyterLab'
version = '2023.3.6'
local_jlab_version = '3.6.5'
homepage = 'http://www.jupyter.org'
description = """
Project Jupyter exists to develop open-source software, open-standards, and services
for interactive computing across dozens of programming languages.
"""
toolchain = {'name': 'GCCcore', 'version': '11.3.0'}
toolchainopts = {'pic': True}
builddependencies = [
('binutils', '2.38'),
]
dependencies = [
('Python', '3.10.4'),
('IPython', '8.14.0'),
('ZeroMQ', '4.3.4'),
('PyYAML', '6.0'),
('nodejs', '16.15.1'), # '-corepack'),
('git', '2.36.0', '-nodocs'), # for jupyterlab_git (req. >=2.0)
('SciPy-bundle', '2022.05', '', ('gcccoremkl', '11.3.0-2022.1.0')),
('matplotlib', '3.5.2', '', ('gcccoremkl', '11.3.0-2022.1.0')),
('bokeh', '2.4.2', '', ('gcccoremkl', '11.3.0-2022.1.0')),
('HDF5', '1.12.2', '-serial'),
('h5py', '3.7.0', '-serial'),
('dask', '2022.12.0', '', ('gcccoremkl', '11.3.0-2022.1.0')),
# for bokeh exports
# https://chromedriver.storage.googleapis.com/114.0.5735.16/chromedriver_linux64.zip
# ('ChromeDriver', '114.0.5735.16')
# Extras
('Pandoc', '2.19.2', '', SYSTEM), # For doc-generation
('texlive', '20220321'),
('netcdf4-python', '1.6.1', '-serial'),
('FFmpeg', '4.4.2'), # for pydub
('LLVM', '14.0.3'), # llvmlite
('Seaborn', '0.12.1', '', ('gcccoremkl', '11.3.0-2022.1.0')),
('sympy', '1.11.1', '', ('gcccoremkl', '11.3.0-2022.1.0')),
('Seaborn', '0.12.1', '', ('gcccoremkl', '11.3.0-2022.1.0')),
('xarray', '2022.9.0', '', ('gcccoremkl', '11.3.0-2022.1.0')),
('scikit-build', '0.15.0'),
('scikit-learn', '1.1.2', '', ('gcccoremkl', '11.3.0-2022.1.0')),
('scikit-image', '0.19.3', '', ('gcccoremkl', '11.3.0-2022.1.0')),
('numba', '0.56.4', '-CUDA-11.7', ('gcccoremkl', '11.3.0-2022.1.0')),
('Shapely', '1.8.5.post1'),
]
osdependencies = [('openssl')]
exts_defaultclass = 'PythonPackage'
exts_default_options = {
'filter': ('python -c "import %(ext_name)s"', ''),
'download_dep_fail': True,
'source_urls': [PYPI_SOURCE],
'use_pip': True,
'sanity_pip_check': True,
'use_pip_for_deps': False,
}
# Dependencies can partly tested, created and updated using findPythonDeps.sh:
# https://gist.github.com/Flamefire/49426e502cd8983757bd01a08a10ae0d
exts_list = [
# general
('hatchling', '1.13.0', {
'checksums': ['f8d275a2cc720735286b7c2e2bc35da05761e6d3695c2fa416550395f10c53c7'],
}),
('hatch_nodejs_version', '0.3.1', {
'checksums': ['0e55fd713d92c5c1ccfee778efecaa780fd8bcd276d4ca7aff9f6791f6f76d9c'],
}),
('hatch_jupyter_builder', '0.8.3', {
'checksums': ['0dbd14a8aef6636764f88a8fd1fcc9a91921e5c50356e6aab251782f264ae960'],
}),
('pyzmq', '24.0.1', { # overwrite
'modulename': 'zmq',
'checksums': ['216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77'],
}),
('websocket-client', '1.5.1', {
'modulename': 'websocket',
'checksums': ['3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40'],
}),
('traitlets', '5.9.0', { # overwrite
'checksums': ['f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9'],
}),
('sniffio', '1.3.0', {
'checksums': ['e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101'],
}),
('anyio', '3.6.2', {
'checksums': ['25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421'],
}),
# nbclassic #####################################
('overrides', '7.3.1', {
'checksums': ['8b97c6c1e1681b78cbc9424b138d880f0803c2254c5ebaabdde57bb6c62093f2'],
}),
('jupyter_server', '2.7.0', {
'checksums': ['36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f'],
}),
('jupyter_server_terminals', '0.4.4', {
'checksums': ['57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d'],
}),
('notebook_shim', '0.2.3', {
'checksums': ['f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9'],
}),
('jupyter_core', '5.3.1', { # overwrite
'checksums': ['5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba'],
}),
('jupyter_client', '8.2.0', { # overwrite
'checksums': ['9fe233834edd0e6c0aa5f05ca2ab4bdea1842bfd2d8a932878212fc5301ddaf0'],
}),
('deprecation', '2.1.0', {
'checksums': ['72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff'],
}),
('rfc3339_validator', '0.1.4', {
'checksums': ['138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b'],
}),
('rfc3986_validator', '0.1.1', {
'checksums': ['3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055'],
}),
('jupyter_events', '0.6.3', {
'checksums': ['9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3'],
}),
('python-json-logger', '2.0.7', {
'modulename': 'pythonjsonlogger',
'checksums': ['23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c'],
}),
('nbclassic', '1.0.0', {
'checksums': ['0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3'],
}),
# jupyterlab-server #############################
('requests', '2.30.0', {
'checksums': ['239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4'],
}),
('jsonschema', '4.17.3', {
'checksums': ['0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d'],
}),
('json5', '0.9.11', {
'checksums': ['4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b'],
}),
('jupyterlab_server', '2.23.0', {
'checksums': ['83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7'],
}),
# jupyter_server_ydoc ###########################
('y_py', '0.5.9', {
'sources': ['%(name)s-%(version)s-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl'],
'checksums': ['bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9'],
}),
('jupyter_ydoc', '0.2.4', {
'checksums': ['a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e'],
}),
('jupyter_server_fileid', '0.9.0', {
'checksums': ['171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8'],
}),
('jupyter_server_ydoc', '0.8.0', {
'checksums': ['a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c'],
}),
('aiosqlite', '0.19.0', {
'checksums': ['95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d'],
}),
('aiofiles', '22.1.0', {
'checksums': ['9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6'],
}),
('ypy_websocket', '0.8.2', {
'checksums': ['491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46'],
}),
# jupyterlab ####################################
('jupyterlab', local_jlab_version, {
'patches': [
('401html.patch', 1),
# 'jupyterlab-rendermime_p14618.patch'
],
'checksums': [
'ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923',
'094c89560472168c5ca24b3907d4a6a5b090352ef0c7657995d735246cc338f5', # 401html.patch
],
}),
# jupyter-server-proxy ##########################
('aiosignal', '1.3.1', {
'checksums': ['54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc'],
}),
('async-timeout', '4.0.2', {
'checksums': ['2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15'],
}),
('frozenlist', '1.3.3', {
'checksums': ['58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a'],
}),
('multidict', '6.0.4', {
'checksums': ['3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49'],
}),
('yarl', '1.9.2', {
'checksums': ['04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571'],
}),
('aiohttp', '3.8.4', {
'checksums': ['bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c'],
}),
('simpervisor', '0.4', {
'checksums': ['cec79e13cdbd6edb04a5c98c1ff8d4bd9713e706c069226909a1ef0e89d393c5'],
}),
('jupyter_server_proxy', '4.0.0', {
'patches': [
'jupyter-server-proxy_timeout.patch', # timeout after 15s instead of 5s
],
'checksums': [
'f5dc12dd204baca71b013df3522c14403692a2d37cb7adcd77851dbab71533b5',
'632f95c305dd5363978399a383a077a738069cc4fc13832276a6c9c6e36714e8',
],
# Regular HTTP requests + Unix sockets works already with Tornado 6.2
# BUT (!)) websocket connection + Unix sockets needs Tornado 6.3,
# https://github.com/jupyterhub/jupyter-server-proxy/pull/337
}),
# jupyterlab_lsp ################################
('python-lsp-jsonrpc', '1.0.0', {
'modulename': 'pylsp_jsonrpc',
'checksums': ['7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd'],
}),
('docstring-to-markdown', '0.12', {
'checksums': ['40004224b412bd6f64c0f3b85bb357a41341afd66c4b4896709efa56827fb2bb'],
}),
('python-lsp-server', '1.7.3', {
'modulename': 'pylsp',
'checksums': ['a31b0525be6ec831c7d2b476b744e5aa5074633e1d1b77ee97f332cde15983ea'],
}),
('jupyter-lsp', '2.2.0', {
'checksums': ['8ebbcb533adb41e5d635eb8fe82956b0aafbf0fd443b6c4bfa906edeeb8635a1'],
}),
('jupyterlab-lsp', '4.2.0', {
'checksums': ['3aab01c8cac040a8d3a9ebfa4085223b054b7fbd6219d3c7b560f6a9766ca2f3'],
}),
# jupyter-matplotlib ############################
('ipympl', '0.9.3', {
'checksums': ['49bab75c05673a6881d1aaec5d8ac81d4624f73d292d154c5fb7096f10236a2b'],
}),
# jupyterlab_iframe #############################
('tornado_proxy_handlers', '0.0.5', {
'checksums': ['8250177dbc7567fa2d3cfd22d0a7de71e34cceb8e56c7b7d7c2e5f92ffb5c60a'],
}),
('jupyterlab_iframe', '0.4.4', {
'patches': [('jupyterlab-iframe.config', '.')],
'checksums': [
'f381ffef2a866eea0a9e3e56f428064b117a9155f9f7605c4bf0eb74d03dc378',
'5bdd4bd545aa66c8cb534975d77a0c4a23c9993f507e479b23a06ae9618f695f',
],
}),
# ipyleaflet ####################################
('branca', '0.6.0', {
'checksums': ['55949855214504c7583b71b9a03a84dce2e96a84027613bb53b42d04844ce24e'],
}),
('traittypes', '0.2.1', {
'checksums': ['be6fa26294733e7489822ded4ae25da5b4824a8a7a0e0c2dccfde596e3489bd6'],
}),
('xyzservices', '2023.2.0', {
'checksums': ['3342bba410d7941290eed0e58a2e5aadb0f7b97863ec4283b283c406ee723a28'],
}),
('ipyleaflet', '0.17.3', {
'checksums': ['adca9ebdf009ad55d3e94976191474bfb85d13aa79854698e9b0922338a6fc66'],
}),
# ipyvue ########################################
('ipyvue', '1.9.2', {
'checksums': ['da3f2a6115d1f27995e7efa0e0e267eb976ade5ca982aa3da3106c70d6f878db'],
}),
('ipyvuetify', '1.8.10', {
'checksums': ['9ba44279479f33f5cb83af406aa813050ee96201955c2cba087fd23a843d5b4e'],
}),
# ipywebrtc #####################################
('ipywebrtc', '0.6.0', {
'checksums': ['f8ac3cc02b3633b59f388aef67961cff57f90028fd303bb3886c63c3d631da13'],
}),
# bqplot ########################################
('bqplot', '0.12.39', {
'checksums': ['14d8de6f9a4d1945bbea6c1320ea4d1c93256f72683774f6e0020dcc579f3dd2'],
}),
# ipyvolume #####################################
('ipydatawidgets', '4.3.5', {
'checksums': ['394f2489576587cfd755377a09a067f46cad22081965092021fd1abcbe7852a8'],
}),
('pythreejs', '2.4.2', {
'checksums': ['a568bfdc4c3797c4c2339158928edc7dcf6fa4a267b08e3cec5121e2078b5bd6'],
}),
('ipyvolume', '0.6.3', {
'checksums': ['823226f90a59ce08b1da2699a9ec505f34f65f01ce43accd80e7d3554082d035'],
}),
# jupyterlab-system-monitor #####################
('jupyter_resource_usage', '0.7.2', {
'patches': [('jupyter-resource-usage.config', '.')],
'checksums': [
'ab596a1f2f6ced9e5d063f56b772d88527d2539d61831fbfb80a37f940d3e9df',
'7634bf6c4d941e20dca4d910441315047147aedec073f620e15048ec6b31b053',
],
}),
('jupyterlab-topbar', '0.6.1', {
'checksums': ['f1f9144fd09c29b8921f378662f26c65a460967d9c48eeea8018cea49626fb5f'],
'modulename': False,
}),
('jupyterlab-controlbtn', '0.5.1', {
'source_tmpl': '%(version)s.tar.gz',
'source_urls': ['https://github.com/jhgoebbert/jupyterlab-controlbtn/archive/'],
'checksums': ['ac4c2165d79dd84f2fea0086cc6c3a851cfb239918bb628163b812abb54a4b46'],
'modulename': False,
}),
('jupyterlab-system-monitor', '0.8.0', {
'checksums': ['f8d03d3ee26c84300c85e570f1a9d5f69bdcfa85e9a298f5716b67e36d0d94df'],
'modulename': False,
}),
# jupyterlab-gitlab #############################
# requirement jupyter-server<2,>=1.6
('jupyterlab_gitlab', '3.0.0', {
'patches': [
'jupyterlab-gitlab_jserv2.patch',
('jupyterlab-gitlab.config', '.'),
],
'checksums': [
'5b0367b82e3170d8274465285a36be9c331dac5674d9ba7e8e2b5dd4972d64f7',
'fe6196f8128169e994519a37bec14171711116fe98c4729a0969750611d2b499',
'e3e0b6b294b726e9aecaa4d2b210aa834b7327cba99f97663c2f9297b14eb2a3',
],
}),
# jupyterlab_git ################################
('smmap', '5.0.0', {
'checksums': ['c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936'],
}),
('gitdb', '4.0.10', {
'checksums': ['6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a'],
}),
('GitPython', '3.1.31', {
'modulename': 'git',
'checksums': ['8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573'],
}),
('jupyterlab_git', '0.41.0', {
'checksums': ['51767daa002f08a7cf0b372114eb706eff2f34f12d70b5347700464e6887483e'],
}),
('jupyter_server_mathjax', '0.2.6', {
'checksums': ['bb1e6b6dc0686c1fe386a22b5886163db548893a99c2810c36399e9c4ca23943'],
}),
# nbdime ########################################
('nbdime', '3.2.1', {
'checksums': ['31409a30f848ffc6b32540697e82d5a0a1b84dcc32716ca74e78bcc4b457c453'],
}),
# jupyterlab-latex ##############################
('jupyterlab_latex', '3.2.0', {
'source_tmpl': 'v%(version)s.tar.gz',
'source_urls': ['https://github.com/jupyterlab/jupyterlab-latex/archive/'],
'checksums': ['b396cb1a86ccec019a72f2aad10c47a3680294ff946da3cf8980ed955b7fd5ac'],
}),
# jupyterlab_plugin_playground ##################
('jupyterlab_plugin_playground', '0.4.0', { # 0.4.0 on PyPi installs 0.3.0
'source_tmpl': 'v%(version)s.tar.gz',
'source_urls': ['https://github.com/jupyterlab/jupyterlab-plugin-playground/archive/'],
'checksums': ['d64f51315692402def435008d2ca8c3168c7e39e23933aeffc46405583b3b81b'],
}),
# sidecar #######################################
('sidecar', '0.5.2', {
'checksums': ['fd4558417ce786fb59b81e44f7d6868e4a5beccbdb2ae29506f2b3d1c4f85c80'],
}),
# jupyterlab-s3-browser #########################
('jmespath', '1.0.1', {
'checksums': ['90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe'],
}),
('botocore', '1.29.76', {
'checksums': ['c2f67b6b3f8acf2968eafca06526f07b9fb0d27bac4c68a635d51abb675134a7'],
}),
('aioitertools', '0.11.0', {
'checksums': ['42c68b8dd3a69c2bf7f2233bf7df4bb58b557bca5252ac02ed5187bbc67d6831'],
}),
('s3transfer', '0.6.1', {
'checksums': ['640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9'],
}),
('fsspec', '2023.5.0', {
'checksums': ['b3b56e00fb93ea321bc9e5d9cf6f8522a0198b20eb24e02774d329e9c6fb84ce'],
}),
('wrapt', '1.15.0', {
'checksums': ['d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a'],
}),
('aiobotocore', '2.5.0', {
'checksums': ['6a5b397cddd4f81026aa91a14c7dd2650727425740a5af8ba75127ff663faf67'],
}),
('singleton-decorator', '1.0.0', {
'checksums': ['1a90ad8a8a738be591c9c167fdd677c5d4a43d1bc6b1c128227be1c5e03bee07'],
}),
('s3fs', '2023.5.0', {
'checksums': ['106b5d9a1000e6af413f918156ba4b96789ac832b7e08c99d186eb08164e6981'],
}),
('boto3', '1.26.76', {
'checksums': ['30c7d967ed1c6b5a05643e42cae9d4d36c3f1cb6782637ddc7007a104cfd9027'],
}),
('jupyterlab_s3_browser', 'c8e319b717251cc3265cfaab2fdb5221c3072238', {
'source_tmpl': '%(version)s.tar.gz',
'source_urls': ['https://github.com/IBM/jupyterlab-s3-browser/archive/'],
'patches': ['jupyterlab-s3-browser_pr86_s3v2.patch'],
'checksums': [
'e614d3ba4d28af503f6a01f3ac37c626bcf6335c22174643ac1527b681e5b770',
'7f35ed49cb705f7f85962e09996516c54be2386d98d28cf0320810b589fba1bf',
],
}),
# jupyterlab-favorites ##########################
('jsonmerge', '1.9.0', {
'checksums': ['a2d1f80021c5c1d70a49e31f862b5f068f9db066080d8561e80654de74a3584d'],
}),
('jupyterlab-favorites', '3.1.1', {
'patches': [('update_favorites_json', '.')],
'checksums': [
'ab1bb4e3686d7acf5bef7a34b07869913d48dd609783e671d0edfda13c2b3fb0',
'496a9ef8bb7f399907a8923e1386d541528e77e237ea7e3abe5b28d432a9bd11',
],
}),
# jupyterlab-recents ############################
('jupyterlab_recents', '3.2.0', {
'checksums': ['d295fe2506e24fe7a38d8651c265033528df94a9d535b84f88e28e295017dc01'],
}),
# jupyterlab-spellchecker #######################
('jupyterlab-spellchecker', '0.7.3', {
'checksums': ['5b862228479b33b95b9d4eb47482b4a11c6732efb2c8c8123c7f88efc3695e76'],
}),
('tenacity', '8.2.2', {
'checksums': ['43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0'],
}),
# plotly ########################################
('plotly', '5.15.0', {
'checksums': ['822eabe53997d5ebf23c77e1d1fcbf3bb6aa745eb05d532afd4b6f9a2e2ab02f'],
}),
# jupyter-bokeh #################################
('jupyter_bokeh', '3.0.4', {
'checksums': ['ba3b032f52a039d9e5ed8f6c50f3f9a00dcb97005871c24673a3b3a05465aef5'],
}),
# pyviz #########################################
('param', '1.13.0', {
'checksums': ['59d55048d42a85e148a69837df42bd11c3391d47fad15ba57d118e145f001ef2'],
}),
('pyct', '0.5.0', {
'checksums': ['dd9f4ac5cbd8e37c352c04036062d3c5f67efec76d404761ef16b0cbf26aa6a0'],
}),
('pyviz_comms', '2.2.1', {
'checksums': ['a26145b8ce43d2d934b3c6826d77b913ce105c528eb2e494c890b3e3525ddf33'],
}),
# panel #########################################
('tqdm', '4.65.0', {
'checksums': ['1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5'],
}),
('Markdown', '3.4.3', {
'checksums': ['8bf101198e004dc93e84a12a7395e31aac6a9c9942848ae1d99b9d72cf9b3520'],
'modulename': 'markdown',
}),
('panel', '0.14.4', {
'checksums': ['b853d2f53d7738ec6372525360c5bf9427a71ed990685ccac703bc9b442e9951'],
}),
# holoviews #####################################
('colorcet', '3.0.1', {
'checksums': ['51455a20353d12fac91f953772d8409f2474e6a0db1af3fa4f7005f405a2480b'],
}),
('holoviews', '1.16.0', {
'checksums': ['13416a251858ead03049570d9e7b39cdf1918d39e64530a18e552b6771115a1a'],
}),
# jupyterlab_code_formatter #####################
('isort', '5.12.0', {
'checksums': ['8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504'],
}),
('mypy_extensions', '1.0.0', {
'checksums': ['75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782'],
}),
('black', '22.12.0', {
'checksums': ['229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f'],
}),
('jupyterlab_code_formatter', '1.6.1', {
'checksums': ['ddf084383292ceceddcaae043f4c62b93d27a85850578a280f8fded9a1b93a32'],
}),
# voila #########################################
('websockets', '11.0.3', {
'checksums': ['88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016'],
}),
# voila 0.4.0 has requirement jupyter-client<=7.4.1,>=6.1.3 and jupyter-server<2
# voila >= 0.5.0a5 is not compatible with Jlab 3.6.5 (check 'jupyter labextension list')
('voila', '0.5.0a4', {
'checksums': ['cd381d13d0513ff663c6a87850be9e575a3f796e561549cba4a5864a9aa0d72f'],
}),
('voila-material', '0.4.0', {
'checksums': ['0827a27f0f23ca87bd8f565c4c227c754516d2a120ffce0f7ab1ee12fdec959f'],
'modulename': False,
}),
# voila-gridstack 0.3.1 has requirement voila<0.5.0,>=0.2
# ('voila_gridstack', '0.3.1', {
# 'checksums': [''],
# 'modulename': False,
# }),
# voila-vuetify 0.6.0 has requirement voila<0.5,>=0.2.0
# ('voila-vuetify', '0.6.0', {
# 'checksums': [''],
# 'modulename': False,
# }),
# jupyterlab-tour ###############################
('jupyterlab-tour', '3.1.4', {
'checksums': ['f1d80ec906f689134d259203caf281ea53b8c2353c4a265c29947b557e009229'],
}),
# jupyterlab_hdf ################################
('orjson', '3.8.12', {
'source_tmpl': 'orjson-3.8.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl',
'unpack_sources': False,
'checksums': ['83e8c740a718fa6d511a82e463adc7ab17631c6eea81a716b723e127a9c51d57'],
}),
('tifffile', '2023.4.12', {
'checksums': ['2fa99f9890caab919d932a0acaa9d0f5843dc2ef3594e212963932e20713badd'],
}),
('h5grove', '0.0.14', {
'checksums': ['ead42d2d98f28ef363c83bd4ba421f25f02c111c615201093707a670b9978704'],
}),
('jupyterlab_hdf', '1.3.0', {
'checksums': ['d15c80c25be26bf4f95e9cad58dd28839ef3924b6eddaf336166aac121dd4819'],
}),
# jupyterhub ####################################
('greenlet', '2.0.2', {
'checksums': ['e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0'],
}),
('SQLAlchemy', '2.0.13', {
'modulename': 'sqlalchemy',
'checksums': ['8d97b37b4e60073c38bcf94e289e3be09ef9be870de88d163f16e08f2b9ded1a'],
}),
('pamela', '1.0.0', {
'checksums': ['65c9389bef7d1bb0b168813b6be21964df32016923aac7515bdf05366acbab6c'],
}),
('oauthlib', '3.2.2', {
'checksums': ['9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918'],
}),
('Mako', '1.2.4', {
'modulename': 'mako',
'checksums': ['d60a3903dc3bb01a18ad6a89cdbe2e4eadc69c0bc8ef1e3773ba53d44c3f7a34'],
}),
('alembic', '1.11.0', {
'checksums': ['d8bf706124e96e526889ac9c87a0d50debd9ef325ef32ae5391cf0315bdab4e1'],
}),
('pyOpenSSL', '22.0.0', {
'modulename': 'OpenSSL',
'checksums': ['660b1b1425aac4a1bea1d94168a85d99f0b3144c869dd4390d27629d0087f1bf'],
}),
('certipy', '0.1.3', {
'checksums': ['695704b7716b033375c9a1324d0d30f27110a28895c40151a90ec07ff1032859'],
}),
('ruamel.yaml', '0.17.26', {
'checksums': ['baa2d0a5aad2034826c439ce61c142c07082b76f4791d54145e131206e998059'],
}),
('ruamel.yaml.clib', '0.2.7', {
'checksums': ['1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497'],
'modulename': False,
}),
('jupyter_telemetry', '0.1.0', {
'checksums': ['445c613ae3df70d255fe3de202f936bba8b77b4055c43207edf22468ac875314'],
}),
('jupyterhub', '3.1.1', { # 4.0.1 fails with our backendspawner
'checksums': ['bfdbc55d7cd29ed2b2c84d2fc7943ad13efdfc4a77740519c5dad1079ff75953'],
}), # copy 401.html -> <jupyter-install-dir>/share/jupyter/lab/static/
# jupyter_kernel_gateway ########################
# jupyter-kernel-gateway 2.5.2 has requirement jupyter-client<8.0,>=5.2.0, but you have jupyter-client 8.2.0.
# https://github.com/jupyter-server/kernel_gateway/issues/377
# ('jupyter_kernel_gateway', '2.5.2', {
# 'checksums': [''],
# }),
# ipyparallel ###################################
('ipyparallel', '8.6.1', {
'checksums': ['a39aa5ef9560170bf0e9afedca9ff045e1b9c1832c49303377edcc91cea9fb77'],
}),
# papermill #####################################
('textwrap3', '0.9.2', {
'source_tmpl': 'textwrap3-0.9.2.zip',
'checksums': ['5008eeebdb236f6303dcd68f18b856d355f6197511d952ba74bc75e40e0c3414'],
}),
('ansiwrap', '0.8.4', {
'source_tmpl': 'ansiwrap-%(version)s.zip',
'checksums': ['ca0c740734cde59bf919f8ff2c386f74f9a369818cdc60efe94893d01ea8d9b7'],
}),
('papermill', '2.4.0', {
'checksums': ['6f8f8a9b06b39677f207c09100c8d386bcf592f0cbbdda9f0f50e81445697627'],
}),
# dask ##########################################
('dask_labextension', '6.1.0', {
'checksums': ['397cf6f2106650954c3f3bf84fe269a4fb72fb6bf56e6089c75cc3bbf9ff12ae'],
'preinstallopts': (
# https://github.com/jupyterlab/jupyterlab/issues/14335#issuecomment-1611586421
'jlpm install && '
'jlpm upgrade --caret --scope jupyterlab && '
# Minimize dependency versions
'jlpm add -D yarn-deduplicate@^5.0.0 && '
'jlpm yarn-deduplicate -s fewer && '
'jlpm install && '
)
}),
# nbdev #########################################
('watchdog', '3.0.0', {
'checksums': ['4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9'],
}),
('execnb', '0.1.5', {
'checksums': ['9ee029e0e3007c0deedc32723918c5c3bcbb64bb0b08a11fc521485ea361fa4d'],
}),
('fastcore', '1.5.29', {
'checksums': ['f1a2eb04eb7933f3f9eb4064852817df44dc96e20fab5658c14c035815269a3f'],
}),
('astunparse', '1.6.3', {
'checksums': ['5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872'],
}),
('ghapi', '1.0.3', {
'checksums': ['1804443a2c12261b247bea08a930445fcb5b8fac1c65f8e9e6504b5842ce8f00'],
}),
('nbdev', '2.3.12', {
'checksums': ['01058da82abd20458c2a4906e5bc34a64bd6b6f20c2a405b028b5f4d14533024'],
}),
# pyunicore #####################################
('PyJWT', '2.7.0', {
'modulename': 'jwt',
'checksums': ['bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074'],
}),
('pyunicore', '0.15.0', {
'checksums': ['dc57ef05b1681b20471e8a4a72067671f74b4d41601099fe80324293439175d5'],
}),
# dash ##########################################
### extension `jupyterlab-dash` is part of plotly and does not need to be installed explicitly
('blinker', '1.6.2', {
'checksums': ['4afd3de66ef3a9f8067559fb7a1cbe555c17dcbe15971b05d1b625c3e7abe213'],
}),
('Werkzeug', '2.2.3', {
'checksums': ['2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe'],
}),
('itsdangerous', '2.1.2', {
'checksums': ['5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a'],
}),
('Flask', '2.2.5', {
'modulename': 'flask',
'checksums': ['edee9b0a7ff26621bd5a8c10ff484ae28737a2410d99b0bb9a6850c7fb977aa0'],
}),
('cachelib', '0.9.0', {
'checksums': ['38222cc7c1b79a23606de5c2607f4925779e37cdcea1c2ad21b8bae94b5425a5'],
}),
('Flask-Caching', '2.0.2', {
'modulename': 'flask_caching',
'checksums': ['24b60c552d59a9605cc1b6a42c56cdb39a82a28dab4532bbedb9222ae54ecb4e'],
}),
('dash', '2.11.1', {
'checksums': ['1acc4c634311cb306a1086fff315c1f2aaa3898bac362d93bc8db6b1a6474e5c'],
}),
('dash_core_components', '2.0.0', {
'checksums': ['c6733874af975e552f95a1398a16c2ee7df14ce43fa60bb3718a3c6e0b63ffee'],
}),
('dash_html_components', '2.0.0', {
'checksums': ['8703a601080f02619a6390998e0b3da4a5daabe97a1fd7a9cebc09d015f26e50'],
}),
('dash_table', '5.0.0', {
'checksums': ['18624d693d4c8ef2ddec99a6f167593437a7ea0bf153aa20f318c170c5bc7308'],
}),
('dash_renderer', '1.9.1', {
'checksums': ['73a69e3d145880e68e42723ad10182251d92b44f3efe92b8763145cfd2158e7e'],
}),
('dash-bootstrap-components', '1.4.1', {
'checksums': ['05c2e2767a8ab104fc950d15482d09dde59d21f1e9bd5809d30672e61b7f420c'],
}),
('dash_daq', '0.5.0', {
'checksums': ['a1d85b6799f7b885652fbc44aebdb58c41254616a8d350b943beeb42ade4256a'],
}),
('dash_player', '1.1.0', {
'checksums': ['d1b38690c922de44e7b56647abc9cafa2c3e75743f52a9b1ff9613095c640524'],
}),
('retrying', '1.3.4', {
'checksums': ['345da8c5765bd982b1d1915deb9102fd3d1f7ad16bd84a9700b85f64d24e8f3e'],
}),
('ansi2html', '1.8.0', {
'checksums': ['38b82a298482a1fa2613f0f9c9beb3db72a8f832eeac58eb2e47bf32cd37f6d5'],
}),
]
local_jupyter_config_path = 'etc/jupyter'
local_jupyter_path = 'share/jupyter'
local_jupyterlab_dir = 'share/jupyter/lab'
modextrapaths = {
# search path to find installable data files, such as kernelspecs and notebook extensions
'JUPYTER_PATH': [local_jupyter_path],
# do NOT set JUPYTER_CONFIG_DIR: if not set, if will be ${HOME}/.jupyter, which is just right
'JUPYTER_CONFIG_PATH': [local_jupyter_config_path], # config dir at install time.
# ATTENTION: not config dir at runtime, because this is fixed to {sys.prefix}/etc/jupyter/
}
modextravars = {
'JUPYTER': '%(installdir)s/bin/jupyter',
'JUPYTERLAB_DIR': '%%(installdir)s/%s' % local_jupyterlab_dir,
}
# Ensure that the user-specific $HOME/.local/share/jupyter is first entry in JUPYTHER_PATH and JUPYTER_DATA_DIR
# and the JUPYTER_CONFIG_PATH starts with $HOME/.jupyter
# https://jupyter.readthedocs.io/en/latest/projects/jupyter-directories.html#envvar-JUPYTER_PATH
modluafooter = """
setenv("JUPYTER_DATA_DIR", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
prepend_path("JUPYTER_CONFIG_PATH", pathJoin(os.getenv("HOME"), ".jupyter"))
"""
postinstallcmds = [
# ensure we install in the correct directory !!!
'python3 -m venv %(installdir)s --system-site-packages',
# create setup-environment-script
'echo "#!/bin/bash" > %(builddir)s/env.sh',
'echo "source %(installdir)s/bin/activate" >> %(builddir)s/env.sh',
(
'echo "export PYTHONPATH='
'%(installdir)s/lib/python%(pyshortver)s/site-packages:'
'${EBROOTPYTHON}/lib/python%(pyshortver)s/site-packages:'
'${PYTHONPATH}" >> %(builddir)s/env.sh'
),
'echo "export JUPYTER=%(installdir)s/bin/jupyter" >> %(builddir)s/env.sh',
'echo "export JUPYTER_PATH=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_path,
'echo "export JUPYTERLAB_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyterlab_dir,
# Config dir at install time. ATTENTION: not config dir at runtime. This is picked up by JUPYTER_CONFIG_PATH
'echo "export JUPYTER_CONFIG_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_config_path,
# jupyter will use $JUPYTER_CONFIG_DIR with "--user"
'echo "export JUPYTER_DATA_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_path,
'echo "export PATH=%(installdir)s/bin:${PATH}" >> %(builddir)s/env.sh',
# build JupyterLab app directory for all previous installed extensions in one go
'source %(builddir)s/env.sh && jupyter lab build --dev-build=False', # --minimize=False
# store default in ../share/jupyter/lab/schemas/jupyterlab-favorites/favorites.json
# create dynamic defaults for $HOME, $SCRATCH, $PROJECT with the following script
(
'install -m 0755 '
' %(builddir)s/jupyterlabfavorites/jupyterlab-favorites-3.1.1/update_favorites_json '
' %(installdir)s/bin/ '
),
# language server for jupyter-lsp
# https://jupyterlab-lsp.readthedocs.io/en/latest/Language%20Servers.html
# must be installed _after_ 'jupyter lab build' as this clears the prefix
(
'source %(builddir)s/env.sh && npm install --prefix %(installdir)s/share/jupyter/lab/staging/ '
' bash-language-server@2.1.0 '
' dockerfile-language-server-nodejs@0.9.0 '
' pyright@1.1.309 '
' sql-language-server@1.5.1 '
' typescript-language-server@0.11.2 typescript@5.0.4 '
' vscode-css-languageserver-bin@1.4.0 '
' vscode-html-languageserver-bin@1.4.0 '
' vscode-json-languageserver-bin@1.0.1 '
' yaml-language-server@1.12.0 '
),
# more: javascript-typescript-langserver, jedi-language-server, julia-language-server,
# python-language-server, r-languageserver, texlab, unified-language-server
# jupyterlab server extensions
# 'source %(builddir)s/env.sh && jupyter serverextension enable --py jupyterlab_sql',
'source %(builddir)s/env.sh && jupyter serverextension enable --py jupyterlab_iframe',
'source %(builddir)s/env.sh && jupyter serverextension enable --py jupyterlab_s3_browser',
# STILL NEEDED ???
# dask_labextension
# (
# 'cp %(builddir)s/dask_labextension/dask_labextension-6.1.0/'
# 'dask_labextension/labextension/schemas/dask-labextension/plugin.json '
# ' %(installdir)s/share/jupyter/labextensions/dask-labextension/schemas/dask-labextension/plugin.json'
# ),
# Send2Trash
(
'{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n'
'c.FileContentsManager.delete_to_trash = False\n'
'EOF'
),
# iframe-extension
(
'cat %(builddir)s/jupyterlab_iframe/jupyterlab_iframe-0.4.4/jupyterlab-iframe.config '
' >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py'
),
# jupyter-resource-usage (displayed by jupyterlab-system-monitor)
(
'cat %(builddir)s/jupyter_resource_usage/jupyter_resource_usage-0.7.2/jupyter-resource-usage.config '
' >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py'
),
# jupyterlab-gitlab
(
'cat %(builddir)s/jupyterlab_gitlab/jupyterlab_gitlab-3.0.0/jupyterlab-gitlab.config '
' >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py'
),
# Add the default_setting_override.json file for modifications of the system-wide default settings
'mkdir -p %(installdir)s/etc/jupyter/labconfig/ ',
(
'{ cat > %(installdir)s/etc/jupyter/labconfig/default_setting_overrides.json; } << \'EOF\'\n'
'{\n'
' "jupyterlab-gitlab:drive": {\n'
' "baseUrl": "https://gitlab.jsc.fz-juelich.de",\n'
' "defaultRepo": "jupyter4jsc/j4j_notebooks"\n'
' },\n'
' "@jupyter-lsp/jupyterlab-lsp:plugin": {\n'
' "language_servers": {\n'
' "pyright": {\n'
' "serverSettings": {\n'
' "python.analysis.useLibraryCodeForTypes": true\n'
' },\n'
' "priority": 75\n'
' }\n'
' },\n'
' "loggingConsole": "browser",\n'
' "loggingLevel": "warn",\n'
' "logAllCommunication": false,\n'
' "setTrace": null\n'
' },\n'
' "@jupyterlab/extensionmanager-extension:plugin": {\n'
' "enabled": false\n'
' }\n'
'}\n'
'EOF'
),
# Disable extensions we do not want to show up, but which we want to have installed
(
'{ cat > %(installdir)s/etc/jupyter/labconfig/page_config.json; } << \'EOF\'\n'
'{\n'
' "disabledExtensions": {\n'
' "ipyparallel-labextension": true\n'
' }\n'
'}\n'
'EOF'
),
# add webpage, which leads back to https://jupyter-jsc.fz-juelich.de
'cp %%(builddir)s/jupyterlab/jupyterlab-%s/401.html %%(installdir)s/share/jupyter/lab/static/' % local_jlab_version,
# ###################################################
# IMPORTANT:
# start JupyterLab once (for 60 seconds) to allow some cleanup at first start
# ###################################################
(
'source %(builddir)s/env.sh && '
'{(jupyter lab --no-browser) & } && JLAB_PID=$! && '
'sleep 60 && '
'jupyter lab list --json 2>&1 | grep $JLAB_PID | '
'awk \'{for(i=1;i<=NF;i++)if($i=="\\"port\\":")print $(i+1)}\' | sed \'s/,*$//g\' | '
'xargs -i jupyter lab stop {}'
),
# Ensure Jupyter does not want to build anything on startup
# The build_config.json file is used to track the local directories that have been installed
# using jupyter labextension install <directory>, as well as core extensions that have been explicitly uninstalled.
# 'if [ -e %(installdir)s/share/jupyter/lab/settings/build_config.json ]; then exit 1; fi ',
(
'{ cat > %(installdir)s/share/jupyter/lab/settings/build_config.json; } << \'EOF\'\n'
'{\n'
' "local_extensions": {}\n'
'}\n'
'EOF'
),
# Ensure we remove the virtual environment to avoid wrong search path for python packages
'rm -f %(installdir)s/pyvenv.cfg',
'rm -f %(installdir)s/bin/python',
'rm -f %(installdir)s/bin/python3',
'rm -f %(installdir)s/bin/activate',
'rm -f %(installdir)s/bin/activate*',
'rm -f %(installdir)s/bin/easy_install*',
'rm -f %(installdir)s/bin/pip*',
'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/_distutils_hack',
'rm -f %(installdir)s/lib/python%(pyshortver)s/site-packages/distutils-precedence.pth',
'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip',
'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip-*',
'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pkg_resources',
'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools',
'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools-*',
# Compile Python files to byte-code to speedup execution
# ERROR: returns with exit code 1, because some files cannot be compiled for different reasons
# ###################################################
# Disable possible, because sanity check will #
# force the compile of all python packages anyway#
# ###################################################
# 'source %(builddir)s/env.sh && python -m compileall %(installdir)s',
# ###################################################
# IMPORTANT: must be done manual after eb-install: #
# ###################################################
# 'chmod -R g-w %(installdir)s ', # software-group must not modify the installation on accident
# 'chmod -R ugo-w %(installdir)s/share ', # Noone should add files/configs to the global share after install
# 'chmod -R ug-w ...../2023/software/Python/3.10.6-GCCcore-11.3.0/share ', # Python module, too
]
# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module
# full_sanity_check = True # would result in sanity-errors about yaml,ipython_genutils,IPython,traitlets
sanity_check_paths = {
'files': [],
'dirs': ['lib/python%(pyshortver)s/site-packages'],
}
moduleclass = 'tools'