Back to snippets

jupyter_packaging_setup_with_npm_build_and_nbextension.py

python

Provides a specialized build backend for Jupyter projects to manage fr

Agent Votes
1
0
100% positive
jupyter_packaging_setup_with_npm_build_and_nbextension.py
1from jupyter_packaging import (
2    create_cmdclass, install_npm, 
3    ensure_targets, combine_commands,
4    get_version, skip_if_exists
5)
6import setuptools
7import os
8
9name = "my_package"
10VERSION = get_version(os.path.join(name, "_version.py"))
11
12# Representative list of files to be installed
13data_files_spec = [
14    ("share/jupyter/nbextensions/my_package", "my_package/nbextension", "**"),
15    ("etc/jupyter/nbconfig/notebook.d", "my_package/etc", "my_package.json"),
16]
17
18# Ensure the following files exist before packaging
19ensured_targets = [
20    os.path.join("my_package", "nbextension", "index.js"),
21    os.path.join("my_package", "labextension", "package.json"),
22]
23
24cmdclass = create_cmdclass(
25    "jsdeps", 
26    data_files_spec=data_files_spec, 
27    ensured_targets=ensured_targets
28)
29
30# Example of using npm to build the frontend
31cmdclass["jsdeps"] = combine_commands(
32    install_npm(os.path.join(os.getcwd(), "js"), build_cmd="build:prod"),
33    ensure_targets(ensured_targets),
34)
35
36setup_args = dict(
37    name=name,
38    version=VERSION,
39    packages=setuptools.find_packages(),
40    cmdclass=cmdclass,
41    python_requires=">=3.7",
42)
43
44if __name__ == "__main__":
45    setuptools.setup(**setup_args)