Skip to main content

metaflow-prebuilt

A Metaflow extension that pre-bakes conda/PyPI dependencies into Docker images at deploy time. Tasks start immediately — no conda bootstrap overhead at runtime.

How it works

When you deploy a flow with --environment=prebuilt, the extension:

  1. Resolves the conda/PyPI environment spec for each step.
  2. Builds a Docker image with the environment already installed.
  3. Pushes the image to a registry.
  4. Configures the remote runner (Batch, Kubernetes, etc.) to pull that image instead of bootstrapping conda at task start.

Install

pip install metaflow-prebuilt

Optional extras for specific backends:

pip install 'metaflow-prebuilt[ecr]'       # ECR registry + CodeBuild service
pip install 'metaflow-prebuilt[gcr]'       # GCR registry
pip install 'metaflow-prebuilt[kaniko]'    # Kaniko build service (K8s)

Quick start

from metaflow import FlowSpec, step, conda

class MyFlow(FlowSpec):

    @conda(packages={"numpy": "1.26.4"})
    @step
    def start(self):
        import numpy
        print(numpy.__version__)
        self.next(self.end)

    @step
    def end(self):
        pass

if __name__ == "__main__":
    MyFlow()

Deploy with the prebuilt environment (requires a configured registry and build service — see below):

# Deploy: builds and pushes Docker images, then submits the flow
python my_flow.py --environment=prebuilt run

# Or on Batch/Kubernetes:
python my_flow.py --environment=prebuilt batch run

Configuration

Select backends via environment variables:

Variable Default Purpose
METAFLOW_PREBUILT_BUILD_SERVICE docker Which build service to use
METAFLOW_PREBUILT_IMAGE_REGISTRY dockerhub Which image registry to use

Extension points

DockerBuildService

Controls how Docker images are built and pushed. Select with METAFLOW_PREBUILT_BUILD_SERVICE=<name>.

Name Class Description
docker LocalDockerBuildService Local Docker daemon (docker build + docker push)
buildx BuildxBuildService Docker Buildx (docker buildx build --push), supports remote builders and cross-platform
kaniko KanikoBuildService Kaniko in a Kubernetes Job; uploads context to GCS/S3
codebuild CodeBuildService AWS CodeBuild; uploads context to S3, polls for completion

ImageRegistry

Controls where images are stored. Select with METAFLOW_PREBUILT_IMAGE_REGISTRY=<name>.

Name Class Description
dockerhub DockerHubRegistry Docker Hub (docker.io)
ecr ECRRegistry Amazon ECR
gcr GCRRegistry Google Container Registry
local LocalRegistry Local registry:2 container (dev/CI use)

Contributing a custom backend

Custom build service

Subclass DockerBuildService and implement build_and_push:

from metaflow_extensions.prebuilt.plugins.conda.build_service import DockerBuildService

class MyBuildService(DockerBuildService):
    def build_and_push(self, dockerfile, context_files, image_tag,
                       push_credentials, echo, target_platform=None) -> bool:
        # build and push; return True on success, False on failure.
        # target_platform (e.g. "linux/amd64") is the resolved step's arch for
        # cross-arch builds; None => builder default. Local builders should honor
        # it; remote builders with a fixed build arch may ignore it.
        ...

Register it in your pyproject.toml:

[project.entry-points."metaflow_prebuilt.build_services"]
mybuild = "mypackage.my_module:MyBuildService"

Then use it with METAFLOW_PREBUILT_BUILD_SERVICE=mybuild.

Custom image registry

Subclass ImageRegistry and implement image_tag, push_credentials, and pull_config:

from metaflow_extensions.prebuilt.plugins.conda.image_registry import ImageRegistry

class MyRegistry(ImageRegistry):
    def image_tag(self, env_id) -> str: ...
    def push_credentials(self) -> dict: ...
    def pull_config(self, pull_tag) -> dict: ...

Register it:

[project.entry-points."metaflow_prebuilt.image_registries"]
myregistry = "mypackage.my_module:MyRegistry"

Then use it with METAFLOW_PREBUILT_IMAGE_REGISTRY=myregistry.

License

Apache 2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

metaflow_prebuilt-0.3.2.tar.gz (40.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

metaflow_prebuilt-0.3.2-py2.py3-none-any.whl (47.8 kB view details)

Uploaded Python 2Python 3

File details

Details for the file metaflow_prebuilt-0.3.2.tar.gz.

File metadata

  • Download URL: metaflow_prebuilt-0.3.2.tar.gz
  • Upload date:
  • Size: 40.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for metaflow_prebuilt-0.3.2.tar.gz
Algorithm Hash digest
SHA256 515529b4d83bfe946114fbe6dd4c07eb58eb4bad3b60e65a74e55ae15f4ad409
MD5 ef1eeb2bf22663dd037bca50080f1583
BLAKE2b-256 35c305a95f27ec81edd8018aa2e28b64f966c018ab672876ba0a6c2031594f63

See more details on using hashes here.

Provenance

The following attestation bundles were made for metaflow_prebuilt-0.3.2.tar.gz:

Publisher: python-publish.yml on Netflix/metaflow-nflx-extensions

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file metaflow_prebuilt-0.3.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for metaflow_prebuilt-0.3.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e0dfb4e326957fbd01f6b4268011caa40c2943716807f5699a8c3018c6ef82fe
MD5 6d45723ce21488f49338ad37d7b4dc9b
BLAKE2b-256 c44a339f4310b49101eb517b1916ce96f50b951245baae6a352ba18010e083a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for metaflow_prebuilt-0.3.2-py2.py3-none-any.whl:

Publisher: python-publish.yml on Netflix/metaflow-nflx-extensions

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

This release

0.3.2 This release

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page