## 1. Python Environment Setup

Check if your Python environment is already configured:

```bash
python3 --version
pip3 --version
```

##### Python3 Supported Versions

Currently, rasa supports the following Python versions: `3.7`, `3.8`, `3.9` and `3.10`.
Note that Python `3.10` is only supported for versions `3.4.x` and upwards.
Additionally, rasa installation on Apple Silicon with Python `3.10` is not functional in `3.4.x` but will be supported starting from `3.5.x`.

If these packages are already installed, these commands should display version numbers for each step, and you can skip to the next step.

Otherwise, proceed with the instructions below to install them.

- Ubuntu
- macOS
- Windows

Fetch the relevant packages using `apt`, and install virtualenv using `pip`.

```bash
sudo apt update
sudo apt install python3-dev python3-pip
```

## 2. Virtual Environment Setup

This step is optional, but we strongly recommend isolating python projects using virtual environments. Tools like [virtualenv](https://virtualenv.pypa.io/en/latest/) and [virtualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/) provide isolated Python environments, which are cleaner than installing packages system-wide (as they prevent dependency conflicts). They also let you install packages without root privileges.

- Ubuntu
- macOS
- Windows

Create a new virtual environment by choosing a Python interpreter and making a `./venv` directory to hold it:

```bash
python3 -m venv ./venv
```

Activate the virtual environment:

```bash
source ./venv/bin/activate
```

## M1 / M2 (Apple Silicon) Limitations

Rasa installations on Apple Silicon _don't_ use [Apple Metal](https://developer.apple.com/metal/) by default.
We found that using the GPU on Apple Silicon increased training time for the [`DIETClassifier`](https://legacy-docs-oss.rasa.com/docs/rasa/components#dietclassifier) and [`TEDPolicy`](https://legacy-docs-oss.rasa.com/docs/rasa/policies#ted-policy) dramatically.
You can, however, install the optional dependency to test it yourself or try it with other components using: `pip3 install 'rasa[metal]'`.

Currently, not all of Rasa's dependencies support Apple Silicon natively. This leads to the following restrictions:

- You can not run Duckling as a docker container on Apple Silicon. If you want to use the [duckling entity extractor](https://legacy-docs-oss.rasa.com/docs/rasa/components#ducklingentityextractor) we recommend a cloud deployment of duckling. Progress on this can be tracked on the [Duckling project](https://github.com/facebook/duckling/issues/695).
- Rasa on Apple Silicon does not support the [`ConveRTFeaturizer` component](https://legacy-docs-oss.rasa.com/docs/rasa/components#convertfeaturizer) or pipelines containing it. The component relies on `tensorflow-text` which currently isn't available for Apple Silicon. Progress on this can be tracked on the [Tensorflow Text project](https://github.com/tensorflow/text/issues/823).
