Jupyter Packaging Utilities.
Project description
Jupyter Packaging
Tools to help build and install Jupyter Python packages that require a pre-build step that may include JavaScript build steps.
Install
pip install jupyter-packaging
Usage
There are three ways to use jupyter-packaging
in another package.
As a Build Requirement
Use a pyproject.toml
file as outlined in pep-518.
An example:
[build-system]
requires = ["jupyter_packaging~=0.8.0"]
build-backend = "setuptools.build_meta"
Below is an example setup.py
using the above config.
It assumes the rest of your metadata is in setup.cfg
.
We wrap the import in a try/catch to allow the file to be run without jupyter_packaging
so that python setup.py
can be run directly when not building.
from setuptools import setup
try:
from jupyter_packaging import wrap_installers, npm_builder
builder = npm_builder()
cmdclass = wrap_installers(pre_develop=builder, pre_dist=builder)
except ImportError:
cmdclass = {}
setup(cmdclass=cmdclass))
As a Build Backend
Use the jupyter_packaging
build backend.
The pre-build command is specified as metadata in pyproject.toml
:
[build-system]
requires = ["jupyter_packaging~=0.8.0"]
build-backend = "jupyter_packaging.build_api"
[tool.jupyter-packaging.builder]
factory = "jupyter_packaging.npm_builder"
[tool.jupyter-packaging.build-args]
build_cmd = "build:src"
The corresponding setup.py
would be greatly simplified:
from setuptools import setup
setup()
The tool.jupyter-packaging.builder
section expects a func
value that points to an importable
module and a function with dot separators. If not given, no pre-build function will run.
The optional tool.jupyter-packaging.build-args
sections accepts a dict of keyword arguments to
give to the pre-build command.
The build backend does not handle the develop
command (pip install -e .
).
If desired, you can wrap just that command:
import setuptools
try:
from jupyter_packaging import wrap_installers, npm_builder
builder = npm_builder(build_cmd="build:dev")
cmdclass = wrap_installers(pre_develop=builder)
except ImportError:
cmdclass = {}
setup(cmdclass=cmdclass))
As a Vendored File
Vendor setupbase.py
locally alongside setup.py
and import the module directly.
import setuptools
from setupbase import wrap_installers, npm_builder
func = npm_builder()
cmdclass = wrap_installers(post_develop=func, pre_dist=func)
setup(cmdclass=cmdclass)
Usage Notes
- We recommend using
include_package_data=True
andMANIFEST.in
to control the assets included in the package. - Tools like
check-manifest
ormanifix
can be used to ensure the desired assets are included. - Simple uses of
data_files
can be handled insetup.cfg
or insetup.py
. If recursive directories are needed useget_data_files()
from this package. - Unfortunately
data_files
are not supported indevelop
mode (a limitation ofsetuptools
). You can work around it by doing a full install (pip install .
) before the develop install (pip install -e .
), or by adding a script to push the data files tosys.base_prefix
.
Development Install
git clone https://github.com/jupyter/jupyter-packaging.git
cd jupyter-packaging
pip install -e .
You can test changes locally by creating a pyproject.toml
with the following, replacing the local path to the git checkout:
[build-system]
requires = ["jupyter_packaging@file://<path-to-git-checkout>"]
build-backend = "setuptools.build_meta"
Note: you need to run pip cache remove jupyter_packaging
any time changes are made to prevent pip
from using a cached version of the source.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for jupyter_packaging-0.9.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c6107e862a7d6dc5b559c8858a3c62c1f39a2e95ff679308fc437a3cf09c8bbb |
|
MD5 | bd3c1faad27e4e20cb0ebde165f2ebdc |
|
BLAKE2b-256 | 4df365273405faf670bb1f2cd49f19068478091738bdd6c7dd88d0ac7fd7681b |