# Python quickstart

## 1. Install `hypertune-sdk`

Once you have a Python application ready, install Hypertune's Python SDK:

```bash
pip install hypertune-sdk
```

## 2. Install the Hypertune CLI

Run the following command to install the CLI

```
curl -fsSL https://app.hypertune.com/install-cli.sh | sh
```

Alternatively, you can download the Hypertune CLI for your system:

* [Mac (x86\_64)](https://storage.googleapis.com/public-prod-hypertune/cli/darwin_x64/hypertune)
* [Mac M1 / M2 (aarch64)](https://storage.googleapis.com/public-prod-hypertune/cli/darwin_aarch64/hypertune)
* [Linux (x86\_64)](https://storage.googleapis.com/public-prod-hypertune/cli/linux_x64/hypertune)
* [Windows (x86\_64)](https://storage.googleapis.com/public-prod-hypertune/cli/windows_x64/hypertune.exe)

Then:

* Put it somewhere accessible via your `PATH`
* Add execute permissions to it with `chmod +x hypertune`
* Right-click to open it

## 3. Generate the client

Generate a type-safe client to access your flags by running:

```bash
hypertune generate --language python --output-file-dir generated --token <token> 
```

Replace `<token>` with your main project token which you can find in the Settings tab of your project.

## 4. Use the client

{% code title="main.py" %}

```python
import generated.hypertune as hypertune

def main():
    root_node = hypertune.create_source().root({
        "context": {
            "environment": "development",
            "user": {
                "id": "test_id",
                "name": "Test",
                "email": "hi@test.com",
            }
        }
    })
    root_node.wait_for_initialization()
    
    example_flag = root_node.exampleFlag().get(False)


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

{% endcode %}

## Next steps

Now you can update the logic for `exampleFlag` from the Hypertune UI without updating your code or waiting for a new build, deployment, app release, or service restart.

To add a new flag, create it in the Hypertune UI then regenerate the client.
