{"id":9164,"library":"outerbounds","title":"Outerbounds (Metaflow Distribution)","description":"Outerbounds is an opinionated distribution of Metaflow, designed to streamline machine learning workflows by providing pre-configured cloud infrastructure and a curated set of dependencies. It aims to reduce administrative overhead, allowing data scientists to focus more on model development. The current version is 0.12.28 and it follows a continuous release cadence, often aligning with Metaflow updates.","status":"active","version":"0.12.28","language":"en","source_language":"en","source_url":"https://github.com/outerbounds/metaflow","tags":["data-science","machine-learning","mlops","workflow","orchestration","cloud","metaflow","aws","kubernetes"],"install":[{"cmd":"pip install outerbounds","lang":"bash","label":"Install Outerbounds"}],"dependencies":[{"reason":"Outerbounds is a distribution of Metaflow; all core functionality is provided by Metaflow.","package":"metaflow","optional":false}],"imports":[{"symbol":"FlowSpec","correct":"from metaflow import FlowSpec"},{"symbol":"step","correct":"from metaflow import step"},{"symbol":"current","correct":"from metaflow import current"},{"note":"Outerbounds itself does not introduce new APIs; all core Metaflow symbols are imported directly from 'metaflow'.","wrong":"from outerbounds import project","symbol":"project","correct":"from metaflow import project"}],"quickstart":{"code":"from metaflow import FlowSpec, step\n\nclass MyFirstFlow(FlowSpec):\n    @step\n    def start(self):\n        self.message = 'Hello, Outerbounds!'\n        print(self.message)\n        self.next(self.end)\n\n    @step\n    def end(self):\n        print(f\"Flow finished with message: {self.message}\")\n\nif __name__ == '__main__':\n    MyFirstFlow()","lang":"python","description":"This quickstart demonstrates a basic Metaflow workflow. While `outerbounds` provides underlying configuration for cloud execution, the code itself remains standard Metaflow. To run this, save it as a Python file (e.g., `my_flow.py`) and execute `python my_flow.py run` from your terminal. For cloud execution, you'll need to configure your Outerbounds environment (e.g., `metaflow configure aws`)."},"warnings":[{"fix":"Always refer to `metaflow` documentation for API usage. Think of `outerbounds` as the 'batteries included' version of `metaflow`.","message":"Outerbounds is primarily a distribution and configuration layer for Metaflow. It does not introduce new Python APIs compared to `metaflow`. All core functionalities and imports come directly from the `metaflow` package.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Ensure your environment is correctly configured for your chosen cloud provider (e.g., AWS credentials, Kubernetes context) before attempting to run flows on the cloud. Consult the Outerbounds/Metaflow documentation for specific `metaflow configure` commands.","message":"The primary value of `outerbounds` comes from its pre-configured cloud integration (AWS, Kubernetes). While you can run flows locally, leveraging its full capabilities requires proper cloud setup and authentication.","severity":"gotcha","affected_versions":"All versions"},{"fix":"For each step, identify external dependencies and add appropriate decorators (e.g., `@conda(libraries={'scikit-learn': '1.0'})`) to ensure they are available in the execution environment. Missing dependencies are a common source of runtime errors in cloud steps.","message":"When running flows in a distributed cloud environment, ensure all necessary Python dependencies are specified. `outerbounds` bundles common ML dependencies, but custom or less common packages may need to be explicitly listed using `@conda`, `@pypi`, or `@pip` decorators in your Metaflow code.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Before major upgrades of `outerbounds` (or when `metaflow` itself gets a major upgrade), review the `metaflow` release notes for breaking changes. Test your critical workflows in a staging environment.","message":"While `outerbounds` aims for stability, underlying `metaflow` versions may introduce breaking changes. Upgrading `outerbounds` implicitly upgrades `metaflow` and its dependencies, which can occasionally lead to unexpected behavior if your code relies on deprecated `metaflow` features.","severity":"breaking","affected_versions":"Metaflow versions 2.x to 3.x (and subsequent major versions)"}],"env_vars":null,"last_verified":"2026-04-16T00:00:00.000Z","next_check":"2026-07-15T00:00:00.000Z","problems":[{"fix":"Ensure `outerbounds` (and thus `metaflow`) is installed correctly: `pip install outerbounds`. If using virtual environments, activate the correct environment.","cause":"The `outerbounds` package, despite being a distribution, explicitly depends on `metaflow`. This error indicates that `metaflow` itself was not installed or is not accessible in the current Python environment.","error":"ModuleNotFoundError: No module named 'metaflow'"},{"fix":"Verify your cloud credentials and configuration. For AWS, run `aws configure` or ensure `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, and `AWS_DEFAULT_REGION` are set. For Kubernetes, ensure your `kubectl` context is correct and `metaflow configure kubernetes` has been run.","cause":"This typically means your cloud environment (AWS, Kubernetes) is not properly configured, or your credentials are missing/invalid for Metaflow to store/retrieve data or orchestrate tasks.","error":"RuntimeError: Failed to connect to backend: Failed to connect to S3 (AWS) / Failed to connect to Kubernetes (K8s)"},{"fix":"Ensure that all methods intended as steps in your Metaflow flow are decorated with `@step` (e.g., `@step\ndef start(self):`).","cause":"A Metaflow flow requires at least one method decorated with `@step`. This error occurs if no methods in your `FlowSpec` subclass are marked as steps.","error":"Flow 'MyFlow' did not find any steps. Did you decorate your methods with '@step'?"},{"fix":"Metaflow data attributes are passed between steps. Ensure `self.some_data = value` is set in an earlier step before it's accessed in a later one. Verify variable names for typos.","cause":"Attempting to access a data attribute (e.g., `self.some_data`) in a Metaflow flow before it has been set in a preceding step, or if there's a typo.","error":"AttributeError: 'SomeFlow' object has no attribute 'some_data'"}]}