Package Sync Limitations#

System dependencies aren’t synced#

Package sync doesn’t handle non-Python, system-level packages you’ve installed with a system package manager like apt or homebrew. It’s rare these days, but some Python packages cannot simply be pip-installed and need extra system dependencies to function. In these cases, you can:

  1. (preferred) install system dependencies with conda instead. It’s likely you can find everything you need on conda-forge. Package sync will then mirror all these dependencies automatically, including the non-Python ones.

  2. (advanced) not use package sync, and use Docker instead. You’ll have to build and publish your own Docker image, register it as a software environment, and specify that when creating the cluster.

Dependencies don’t update on running clusters#

If you install a new package, or edit a local dependency, after launching a cluster, the cluster doesn’t update automatically. You have to re-create the cluster to pick up any changes. If you have a use case where this is strictly necessary, you can use Dask’s PipInstall Worker Plugin.

Unsolvable environments#

Your environment needs to be consistent with what your package manager would accept as a valid environment. For example, this will fail:

dask==2022.1.10
distributed==2022.05.1

Pip will error out trying to install this environment, as will conda, because distributed==2022.05.1 requires exactly dask==2022.05.1. If you manage to get your local environment into a state where both those incompatible packages are installed, package sync will not be able to synchronize it.

Packages that do not list their Python build time requirements#

This is a slight variant of compiled packages missing build time system dependencies. If a package uses the deprecated setup.py and imports something that is not listed as a PEP 517 build requirement or setup_requires, the build will also fail.

An example of this is crick 0.0.3, which imports numpy and Cython in setup.py but does not list them as build dependencies.