# Python Workflows SDK

import { WranglerConfig } from "~/components";

Workflow entrypoints can be declared using Python. To achieve this, you can export a `WorkflowEntrypoint` that runs on the Cloudflare Workers platform.
Refer to [Python Workers](/workers/languages/python) for more information about Python on the Workers runtime.

## Get Started

The main entrypoint for a Python workflow is the [`WorkflowEntrypoint`](/workflows/build/workers-api/#workflowentrypoint) class. Your workflow logic should exist inside the [`run`](/workflows/build/workers-api/#run) handler.

```python
from workers import WorkflowEntrypoint

class MyWorkflow(WorkflowEntrypoint):
    async def run(self, event, step):
        # steps here
```

For example, a Workflow may be defined as:

```python
from workers import Response, WorkflowEntrypoint, WorkerEntrypoint

class PythonWorkflowStarter(WorkflowEntrypoint):
    async def run(self, event, step):

        @step.do('step1')
        async def step_1():
            # does stuff
            print('executing step1')

        @step.do('step2')
        async def step_2():
            # does stuff
            print('executing step2')

        await step_1()
        await step_2()

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        await self.env.MY_WORKFLOW.create()
        return Response("Hello world!")
```

You must add both `python_workflows` and `python_workers` compatibility flags to your Wrangler configuration file.

<WranglerConfig>
```jsonc
{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "hello-python",
	"main": "src/entry.py",
	"compatibility_flags": [
		"python_workers",
		"python_workflows"
	],
	"compatibility_date": "$today",
	"workflows": [
		{
			"name": "workflows-demo",
			"binding": "MY_WORKFLOW",
			"class_name": "PythonWorkflowStarter"
		}
	]
}
```
</WranglerConfig>

To run a Python Workflow locally, use [Wrangler](/workers/wrangler/), the CLI for Cloudflare Workers:

```bash
npx wrangler@latest dev
```

To deploy a Python Workflow to Cloudflare, run [`wrangler deploy`](/workers/wrangler/commands/general/#deploy):

```bash
npx wrangler@latest deploy
```

Join the #python-workers channel in the [Cloudflare Developers Discord](https://discord.cloudflare.com/) and let us know what you would like to see next.