  We present celmech, an open-source Python package designed to facilitate a
wide variety of celestial mechanics calculations. The package allows users to
formulate and integrate equations of motion incorporating user-specified terms
from the classical disturbing function expansion of the interaction potential
between pairs of planets. The code can be applied, for example, to isolate the
contribution of particular resonances to a system's dynamical evolution and
develop simple analytical models with the minimum number of terms required to
capture a particular dynamical phenomenon. Equations and expressions can be
easily manipulated by leveraging the extensive symbolic mathematics
capabilities of the sympy Python package. The celmech package is designed to
interface seamlessly with the popular $N$-body code REBOUND to facilitate
comparisons between calculation results and direct $N$-body integrations. The
code is extensively documented and numerous example Jupyter notebooks
illustrating its use are available online.
