Development Notes¶
Notes for maintaining neuprint-python
.
Prerequisites¶
Make sure you have both flyem-forge
and conda-forge
listed as channels in your .condarc
file.
(If you don’t know where your .condarc
file is, check conda config --show-sources
.)
# .condarc
channels:
- flyem-forge
- conda-forge
- nodefaults # A magic channel that forbids any downloads from the anaconda default channels.
Install conda-build
if you don’t have it yet:
conda install -n base conda-build anaconda-client twine
Packaging and Release¶
neuprint-python
is packaged for both conda
(on the flyem-forge channel)
and pip
(on PyPI).
The package version is automatically inferred from the git tag. To prepare a release, follow these steps:
cd neuprint-python
# Update the change log!
code docs/source/changelog.rst
git commit -m "Updated changelog" docs/source/changelog.rst
# Do the tests still pass?
pytest .
# Do the docs still build?
(
export PYTHONPATH=$(pwd)
cd docs
make html
open build/html/index.html
)
# Tag the git repo with the new version
NEW_TAG=0.3.1
git tag -a ${NEW_TAG} -m ${NEW_TAG}
git push --tags origin
# Build and upload the conda package
conda build conda-recipe
anaconda upload -u flyem-forge $(conda info --base)/conda-bld/noarch/neuprint-python-${NEW_TAG}-py_0.tar.bz2
# Build and upload the PyPI package
./upload-to-pypi.sh
# Deploy the docs
./docs/deploy-docs.sh
Dependencies¶
If you need to add dependencies to neuprint-python
, edit dependencies.txt
(which is used by the conda recipe).
You should also update environment.yml
so that our binder container will acquire the new dependencies
when users try out the interactive tutorial. After publishing a new conda package with the updated dependencies,
follow these steps on a Linux machine:
#!/bin/bash
# update-deps.sh
set -e
# Create an environment with the binder dependencies
TUTORIAL_DEPS="ipywidgets bokeh holoviews hvplot"
SIMULATION_DEPS="ngspice umap-learn scikit-learn matplotlib"
BINDER_DEPS="neuprint-python jupyterlab ${TUTORIAL_DEPS} ${SIMULATION_DEPS}"
conda create -y -n neuprint-python -c flyem-forge -c conda-forge ${BINDER_DEPS}
# Export to environment.yml, but relax the neuprint-python version requirement
conda env export -n neuprint-python > environment.yml
sed --in-place 's/neuprint-python=.*/neuprint-python/g' environment.yml
git commit -m "Updated environment.yml for binder" environment.yml
git push origin master
Documentation¶
The docs are built with Sphinx. See docs/requirements.txt
for the docs dependencies.
To build the docs locally:
cd neuprint-python/docs
make html
open build/html/index.html
We publish the docs via github pages.
Use the script docs/deploy-docs.sh
to build and publish the docs to GitHub in the gh-pages branch.
(At some point in the future, we may automate this via a CI system.)
./docs/deploy-docs.sh
Interactive Tutorial¶
The documentation contains a tutorial which can be launched interactively via binder.
To update the tutorial contents, simply edit the .ipynb
file and re-build the docs.
If the binder setup is broken, make sure the dependencies are configured properly as described above.
It takes a few minutes to initialize the binder container for the first time after a new release. Consider sparing your users from that by clicking the binder button yourself after each release.
Tests¶
The tests require pytest
, and they rely on the public hemibrain:v1.2.1
dataset on neuprint.janelia.org
,
which means you must define NEUPRINT_APPLICATION_CREDENTIALS
in your environment before running them.
To run the tests:
cd neuprint-python
PYTHONPATH=. pytest neuprint/tests