Metadata-Version: 2.1
Name: zenml
Version: 0.42.2
Summary: ZenML: Write production-ready ML code.
Home-page: https://zenml.io
License: Apache-2.0
Keywords: machine learning,production,pipeline,mlops,devops
Author: ZenML GmbH
Author-email: info@zenml.io
Requires-Python: >=3.8,<3.11
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Distributed Computing
Classifier: Typing :: Typed
Provides-Extra: adlfs
Provides-Extra: connectors-aws
Provides-Extra: connectors-azure
Provides-Extra: connectors-gcp
Provides-Extra: connectors-kubernetes
Provides-Extra: dev
Provides-Extra: gcsfs
Provides-Extra: s3fs
Provides-Extra: secrets-aws
Provides-Extra: secrets-azure
Provides-Extra: secrets-gcp
Provides-Extra: secrets-hashicorp
Provides-Extra: server
Provides-Extra: templates
Requires-Dist: adlfs (>=2021.10.0) ; extra == "adlfs"
Requires-Dist: alembic (>=1.8.1,<1.9.0)
Requires-Dist: analytics-python (>=1.4.0,<2.0.0)
Requires-Dist: azure-identity (>=1.4.0) ; extra == "secrets-azure" or extra == "connectors-azure"
Requires-Dist: azure-keyvault-secrets (>=4.0.0) ; extra == "secrets-azure"
Requires-Dist: azure-mgmt-containerregistry (>=10.0.0) ; extra == "connectors-azure"
Requires-Dist: azure-mgmt-containerservice (>=20.0.0) ; extra == "connectors-azure"
Requires-Dist: azure-mgmt-resource (>=21.0.0)
Requires-Dist: azure-mgmt-storage (>=20.0.0) ; extra == "connectors-azure"
Requires-Dist: azure-storage-blob (>=12.0.0) ; extra == "connectors-azure"
Requires-Dist: black (>=23.3.0,<24.0.0) ; extra == "templates" or extra == "dev"
Requires-Dist: boto3 (>=1.16.0,<=1.24.59) ; extra == "secrets-aws" or extra == "connectors-aws"
Requires-Dist: click (>=8.0.1,<8.1.4)
Requires-Dist: click-params (>=0.3.0,<0.4.0)
Requires-Dist: cloudpickle (>=2.0.0,<3)
Requires-Dist: copier (>=7.0.0) ; extra == "templates"
Requires-Dist: coverage[toml] (>=5.5,<6.0) ; extra == "dev"
Requires-Dist: darglint (>=1.8.1,<2.0.0) ; extra == "dev"
Requires-Dist: distro (>=1.6.0,<2.0.0)
Requires-Dist: docker (>=6.1.0,<6.2.0)
Requires-Dist: fastapi (>=0.75,<0.100) ; extra == "server"
Requires-Dist: fastapi-utils (>=0.2.1,<0.3.0) ; extra == "server"
Requires-Dist: gcsfs (==2022.11.0) ; extra == "gcsfs"
Requires-Dist: gitpython (>=3.1.18,<4.0.0)
Requires-Dist: google-cloud-container (>=2.21.0) ; extra == "connectors-gcp"
Requires-Dist: google-cloud-secret-manager (>=2.12.5) ; extra == "secrets-gcp"
Requires-Dist: google-cloud-storage (>=2.9.0) ; extra == "connectors-gcp"
Requires-Dist: httplib2 (>=0.19.1,<0.20)
Requires-Dist: hvac (>=0.11.2) ; extra == "secrets-hashicorp"
Requires-Dist: hypothesis (>=6.43.1,<7.0.0) ; extra == "dev"
Requires-Dist: jinja2-time (>=0.2.0,<0.3.0) ; extra == "templates"
Requires-Dist: kubernetes (>=18.20.0) ; extra == "connectors-kubernetes" or extra == "connectors-aws" or extra == "connectors-gcp" or extra == "connectors-azure"
Requires-Dist: mike (>=1.1.2,<2.0.0) ; extra == "dev"
Requires-Dist: mkdocs (>=1.2.3,<2.0.0) ; extra == "dev"
Requires-Dist: mkdocs-awesome-pages-plugin (>=2.6.1,<3.0.0) ; extra == "dev"
Requires-Dist: mkdocs-material (>=8.1.7,<9.0.0) ; extra == "dev"
Requires-Dist: mkdocstrings (>=0.17.0,<0.18.0) ; extra == "dev"
Requires-Dist: mypy (==1.3.0) ; extra == "dev"
Requires-Dist: orjson (>=3.8.3,<3.9.0) ; extra == "server"
Requires-Dist: pandas (>=1.1.5)
Requires-Dist: passlib[bcrypt] (>=1.7.4,<1.8.0)
Requires-Dist: pre-commit (>=2.14.0,<3.0.0) ; extra == "dev"
Requires-Dist: pydantic (>=1.9.0,<1.11)
Requires-Dist: pyment (>=0.3.3,<0.4.0) ; extra == "dev"
Requires-Dist: pymysql (>=1.0.2,<1.1.0)
Requires-Dist: pyparsing (>=2.4.0,<3)
Requires-Dist: pytest (>=6.2.4,<7.0.0) ; extra == "dev"
Requires-Dist: pytest-clarity (>=1.0.1,<2.0.0) ; extra == "dev"
Requires-Dist: pytest-mock (>=3.6.1,<4.0.0) ; extra == "dev"
Requires-Dist: pytest-randomly (>=3.10.1,<4.0.0) ; extra == "dev"
Requires-Dist: python-dateutil (>=2.8.1,<3.0.0)
Requires-Dist: python-jose[cryptography] (>=3.3.0,<3.4.0) ; extra == "server"
Requires-Dist: python-multipart (>=0.0.5,<0.1.0) ; extra == "server"
Requires-Dist: python-terraform (>=0.10.1,<0.11.0)
Requires-Dist: pyyaml (>=6.0.1)
Requires-Dist: rich[jupyter] (>=12.0.0,<13.0.0)
Requires-Dist: ruff (>=0.0.270,<0.0.271) ; extra == "templates" or extra == "dev"
Requires-Dist: s3fs (==2022.11.0) ; extra == "s3fs"
Requires-Dist: sqlalchemy_utils (==0.38.3)
Requires-Dist: sqlmodel (==0.0.8)
Requires-Dist: tox (>=3.24.3,<4.0.0) ; extra == "dev"
Requires-Dist: types-Markdown (>=3.3.6,<4.0.0) ; extra == "dev"
Requires-Dist: types-Pillow (>=9.2.1,<10.0.0) ; extra == "dev"
Requires-Dist: types-PyMySQL (>=1.0.4,<2.0.0) ; extra == "dev"
Requires-Dist: types-PyYAML (>=6.0.0,<7.0.0) ; extra == "dev"
Requires-Dist: types-certifi (>=2021.10.8.0,<2022.0.0.0) ; extra == "dev"
Requires-Dist: types-croniter (>=1.0.2,<2.0.0) ; extra == "dev"
Requires-Dist: types-futures (>=3.3.1,<4.0.0) ; extra == "dev"
Requires-Dist: types-protobuf (>=3.18.0,<4.0.0) ; extra == "dev"
Requires-Dist: types-psutil (>=5.8.13,<6.0.0) ; extra == "dev"
Requires-Dist: types-python-dateutil (>=2.8.2,<3.0.0) ; extra == "dev"
Requires-Dist: types-python-slugify (>=5.0.2,<6.0.0) ; extra == "dev"
Requires-Dist: types-redis (>=4.1.19,<5.0.0) ; extra == "dev"
Requires-Dist: types-requests (>=2.27.11,<3.0.0) ; extra == "dev"
Requires-Dist: types-setuptools (>=57.4.2,<58.0.0) ; extra == "dev"
Requires-Dist: types-six (>=1.16.2,<2.0.0) ; extra == "dev"
Requires-Dist: types-termcolor (>=1.1.2,<2.0.0) ; extra == "dev"
Requires-Dist: typing-extensions (>=3.7.4) ; extra == "dev"
Requires-Dist: uvicorn[standard] (>=0.17.5,<0.18.0) ; extra == "server"
Project-URL: Documentation, https://docs.zenml.io
Project-URL: Repository, https://github.com/zenml-io/zenml
Description-Content-Type: text/markdown

<!-- PROJECT SHIELDS -->
<!--
*** I'm using markdown "reference style" links for readability.
*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).
*** See the bottom of this document for the declaration of the reference variables
*** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use.
*** https://www.markdownguide.org/basic-syntax/#reference-style-links
-->

[![PyPi][pypi-shield]][pypi-url]
[![PyPi][pypiversion-shield]][pypi-url]
[![PyPi][downloads-shield]][downloads-url]
[![Contributors][contributors-shield]][contributors-url]
[![License][license-shield]][license-url]
<!-- [![Build][build-shield]][build-url] -->
<!-- [![CodeCov][codecov-shield]][codecov-url] -->

<!-- MARKDOWN LINKS & IMAGES -->
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->

[pypi-shield]: https://img.shields.io/pypi/pyversions/zenml?style=for-the-badge

[pypi-url]: https://pypi.org/project/zenml/

[pypiversion-shield]: https://img.shields.io/pypi/v/zenml?style=for-the-badge

[downloads-shield]: https://img.shields.io/pypi/dm/zenml?style=for-the-badge

[downloads-url]: https://pypi.org/project/zenml/

[codecov-shield]: https://img.shields.io/codecov/c/gh/zenml-io/zenml?style=for-the-badge

[codecov-url]: https://codecov.io/gh/zenml-io/zenml

[contributors-shield]: https://img.shields.io/github/contributors/zenml-io/zenml?style=for-the-badge

[contributors-url]: https://github.com/othneildrew/Best-README-Template/graphs/contributors

[license-shield]: https://img.shields.io/github/license/zenml-io/zenml?style=for-the-badge

[license-url]: https://github.com/zenml-io/zenml/blob/main/LICENSE

[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555

[linkedin-url]: https://www.linkedin.com/company/zenml/

[twitter-shield]: https://img.shields.io/twitter/follow/zenml_io?style=for-the-badge

[twitter-url]: https://twitter.com/zenml_io

[slack-shield]: https://img.shields.io/badge/-Slack-black.svg?style=for-the-badge&logo=linkedin&colorB=555

[slack-url]: https://zenml.io/slack-invite

[build-shield]: https://img.shields.io/github/workflow/status/zenml-io/zenml/Build,%20Lint,%20Unit%20&%20Integration%20Test/develop?logo=github&style=for-the-badge

[build-url]: https://github.com/zenml-io/zenml/actions/workflows/ci.yml


<!-- PROJECT LOGO -->
<br />
<div align="center">
  <a href="https://zenml.io">
    <img alt="ZenML Logo" src="https://user-images.githubusercontent.com/3348134/223112746-345126ff-a0e8-479f-8ac0-670d78f71712.png" alt="Logo" width="400">
  </a>

<h3 align="center">Build portable, production-ready MLOps pipelines.</h3>

  <p align="center">
    A simple yet powerful open-source framework that integrates all your ML tools.
    <br />
    <a href="https://docs.zenml.io/"><strong>Explore the docs »</strong></a>
    <br />
    <div align="center">
      Join our <a href="https://zenml.io/slack-invite" target="_blank">
      <img width="25" src="https://cdn3.iconfinder.com/data/icons/logos-and-brands-adobe/512/306_Slack-512.png" alt="Slack"/>
    <b>Slack Community</b> </a> and be part of the ZenML family.
    </div>
    <br />
    <a href="https://zenml.io/features">Features</a>
    ·
    <a href="https://zenml.io/roadmap">Roadmap</a>
    ·
    <a href="https://github.com/zenml-io/zenml/issues">Report Bug</a>
    ·
    <a href="https://zenml.io/discussion">Vote New Features</a>
    ·
    <a href="https://blog.zenml.io/">Read Blog</a>
    ·
    <a href="#-meet-the-team">Meet the Team</a>
    <br />
    🎉 Version 0.42.2 is out. Check out the release notes
    <a href="https://github.com/zenml-io/zenml/releases">here</a>.
    <br />
    <br />
    <a href="https://www.linkedin.com/company/zenml/">
    <img src="https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555" alt="Logo">
    </a>
    <a href="https://twitter.com/zenml_io">
    <img src="https://img.shields.io/badge/-Twitter-black.svg?style=for-the-badge&logo=twitter&colorB=555" alt="Logo">
    </a>
    <a href="https://www.youtube.com/c/ZenML">
    <img src="https://img.shields.io/badge/-YouTube-black.svg?style=for-the-badge&logo=youtube&colorB=555" alt="Logo">
    </a>
  </p>
</div>

<!-- TABLE OF CONTENTS -->
<details>
  <summary>🏁 Table of Contents</summary>
  <ol>
    <li><a href="#-introduction">Introduction</a></li>
    <li><a href="#-quickstart">Quickstart</a></li>
    <li>
      <a href="#-create-your-own-mlops-platform">Create your own MLOps Platform</a>
      <ul>
        <li><a href="##-1-deploy-zenml">Deploy ZenML</a></li>
        <li><a href="#-2-deploy-stack-components">Deploy Stack Components</a></li>
        <li><a href="#-3-create-a-pipeline">Create a Pipeline</a></li>
        <li><a href="#-4-start-the-dashboard">Start the Dashboard</a></li>
      </ul>
    </li>
    <li><a href="#-roadmap">Roadmap</a></li>
    <li><a href="#-contributing-and-community">Contributing and Community</a></li>
    <li><a href="#-getting-help">Getting Help</a></li>
    <li><a href="#-license">License</a></li>
  </ol>
</details>

<br />

# 🤖 Introduction

🤹 ZenML is an extensible, open-source MLOps framework for creating portable,
production-ready machine learning pipelines. By decoupling infrastructure from
code, ZenML enables developers across your organization to collaborate more
effectively as they develop to production.

- 💼 ZenML gives data scientists the freedom to fully focus on modeling and
experimentation while writing code that is production-ready from the get-go.

- 👨‍💻 ZenML empowers ML engineers to take ownership of the entire ML lifecycle
  end-to-end. Adopting ZenML means fewer handover points and more visibility on
  what is happening in your organization.

- 🛫 ZenML enables MLOps infrastructure experts to define, deploy, and manage
sophisticated production environments that are easy to use for colleagues.

![The long journey from experimentation to production.](/docs/book/.gitbook/assets/intro-zenml-overview.png)

ZenML provides a user-friendly syntax designed for ML workflows, compatible with
any cloud or tool. It enables centralized pipeline management, enabling
developers to write code once and effortlessly deploy it to various
infrastructures.

<div align="center">
    <img src="docs/book/.gitbook/assets/stack.gif">
</div>

# 🤸 Quickstart

[Install ZenML](https://docs.zenml.io/getting-started/installation) via
[PyPI](https://pypi.org/project/zenml/). Python 3.8 - 3.10 is required:

```bash
pip install "zenml[server]"
```

Take a tour with the guided quickstart by running:

```bash
zenml go
```

# 🖼️ Create your own MLOps Platform

ZenML allows you to create and manage your own MLOps platform using 
best-in-class open-source and cloud-based technologies. Here is an example of 
how you could set this up for your team:

## 🔋 1. Deploy ZenML

For full functionality ZenML should be deployed on the cloud to
enable collaborative features as the central MLOps interface for teams.

![ZenML Architecture Diagram.](docs/book/.gitbook/assets/Scenario3.png)

In case your machine is authenticated with one of the big three cloud 
providers, this command will do the full deployment for you.

```bash
zenml deploy --provider aws  # aws, gcp and azure are supported providers
```

You can also choose to deploy with docker or helm with full control over
the configuration and deployment. Check out the
[docs](https://docs.zenml.io/platform-guide/set-up-your-mlops-platform/deploy-zenml)
to find out how.

## 👨‍🍳 2. Deploy Stack Components

ZenML boasts a ton of [integrations](https://zenml.io/integrations) into 
popular MLOps tools. The [ZenML Stack](https://docs.zenml.io/user-guide/starter-guide/understand-stacks) 
concept ensures that these tools work nicely together, therefore bringing
structure and standardization into the MLOps workflow.

Deploying and configuring this is super easy with ZenML. For **AWS**, this might 
look a bit like this

```bash
# Deploy and register an orchestrator and an artifact store
zenml orchestrator deploy kubernetes_orchestrator --flavor kubernetes --cloud aws
zenml artifact-store deploy s3_artifact_store --flavor s3

# Register this combination of components as a stack
zenml stack register production_stack --orchestrator kubernetes_orchestrator --artifact-store s3_artifact_store --set # Register your production environment
```

When you run a pipeline with this stack set, it will be running on your deployed
Kubernetes cluster.

You can also [deploy your own tooling manually](https://docs.zenml.io/platform-guide/set-up-your-mlops-platform/deploy-and-set-up-a-cloud-stack).

## 🏇 3. Create a Pipeline

Here's an example of a hello world ZenML pipeline in code:

```python
# run.py
from zenml import pipeline, step


@step
def step_1() -> str:
    """Returns the `world` substring."""
    return "world"


@step
def step_2(input_one: str, input_two: str) -> None:
    """Combines the two strings at its input and prints them."""
    combined_str = input_one + ' ' + input_two
    print(combined_str)


@pipeline
def my_pipeline():
    output_step_one = step_1()
    step_2(input_one="hello", input_two=output_step_one)


if __name__ == "__main__":
    my_pipeline()
```

```bash
python run.py
```

## 👭 4. Start the Dashboard

Open up the ZenML dashboard using this command.

```bash
zenml show
```

![ZenML Dashboard](docs/book/.gitbook/assets/landingpage.png)

# 🗺 Roadmap

ZenML is being built in public. The [roadmap](https://zenml.io/roadmap) is a
regularly updated source of truth for the ZenML community to understand where
the product is going in the short, medium, and long term.

ZenML is managed by a [core team](https://zenml.io/company#CompanyTeam) of
developers that are responsible for making key decisions and incorporating
feedback from the community. The team oversees feedback via various channels,
and you can directly influence the roadmap as follows:

- Vote on your most wanted feature on our [Discussion
  board](https://zenml.io/discussion).
- Start a thread in our [Slack channel](https://zenml.io/slack-invite).
- [Create an issue](https://github.com/zenml-io/zenml/issues/new/choose) on our
  Github repo.

# 🙌 Contributing and Community

We would love to develop ZenML together with our community! Best way to get
started is to select any issue from the [`good-first-issue`
label](https://github.com/zenml-io/zenml/labels/good%20first%20issue). If you
would like to contribute, please review our [Contributing
Guide](CONTRIBUTING.md) for all relevant details.

# 🆘 Getting Help

The first point of call should
be [our Slack group](https://zenml.io/slack-invite/).
Ask your questions about bugs or specific use cases, and someone from
the [core team](https://zenml.io/company#CompanyTeam) will respond.
Or, if you
prefer, [open an issue](https://github.com/zenml-io/zenml/issues/new/choose) on
our GitHub repo.

# 📜 License

ZenML is distributed under the terms of the Apache License Version 2.0.
A complete version of the license is available in the [LICENSE](LICENSE) file in
this repository. Any contribution made to this project will be licensed under
the Apache License Version 2.0.

