libEnsemble is a Python toolkit for running dynamic ensembles of calculations. Users write generator and simulator functions to express their ensembles. A library of example functions is available which can be modified as needed. These functions can submit unmodified external executables at any scale and in a portable way. System details are detected, and resource management is provided. libEnsemble can be used in a consistent manner on laptops, clusters, and supercomputers with minimal required dependencies.