---
title: Python experiments installation
showStepsToc: true
---

import { Steps, Step } from 'components/Docs/Steps'
import PythonInstall from '../../integrate/_snippets/install-python.mdx'
import StepCreateExperiment from './_snippets/step-create-experiment.mdx'
import StepAddPrimaryMetric from './_snippets/step-add-primary-metric.mdx'
import StepValidateExperimentEvents from './_snippets/step-validate-experiment-events.mdx'
import StepValidateFeatureFlags from './_snippets/step-validate-feature-flags.mdx'
import StepEvaluateExperimentResults from './_snippets/step-evaluate-experiment-results.mdx'
import Wizard from '../../getting-started/_snippets/wizard.mdx'
import Tab from "components/Tab"

<Steps>

<Step title="Install PostHog Python SDK" badge="required">

<Tab.Group tabs={['Wizard', 'Manual']}>
<Tab.List>
<Tab>Wizard</Tab>
<Tab>Manual</Tab>
</Tab.List>
<Tab.Panels>
<Tab.Panel>
    <Wizard />
</Tab.Panel>
<Tab.Panel>
    <PythonInstall />
</Tab.Panel>
</Tab.Panels>
</Tab.Group>

</Step>

<Step title="Capture conversion event" badge="required">

Once PostHog is initialized, you should be able to capture events. For your experiment to be meaningful, we need to capture an event that we want to measure, such as a conversion event.

For this tutorial, let's report a conversion event when a clicks a CTA. In server SDKs like Node, this can be called when a specific route is visited or reported from your client side app.

```python
posthog.capture('cta clicked', distinct_id='user_distinct_id')
```

</Step>

<Step checkpoint title="Validate PostHog events" subtitle="Confirm events are being sent to PostHog">

<StepValidateExperimentEvents />

</Step>

<Step title="Create an experiment" badge="required">

<StepCreateExperiment />

</Step>

<Step title="Add primary metric and launch" badge="required">

<StepAddPrimaryMetric />

</Step>

<Step title="Call feature flag" badge="required">

Use the PostHog SDK to call the experiment flag and update how your page renders based on the assigned variant.

```python
variant = posthog.get_feature_flag('your-experiment-key', 'user_distinct_id')

if variant == 'test':
    # Show test variant
else:
    # Show control variant
```

Now when a user triggers a `cta clicked` event, PostHog automatically assigns the user to a variant and records an experiment exposure. 

By default, users are split equally between variants. If you want to assign specific users to a specific variant, see more about [distribution and release conditions](/docs/experiments/creating-an-experiment#distribution-and-release-conditions).

</Step>

<Step checkpoint title="Validate feature flag calls">

<StepValidateFeatureFlags />

</Step>

<Step title="Evaluate experiment results" badge="recommended">

<StepEvaluateExperimentResults />

</Step>

</Steps> 
