# Create virtual environment for running Python 3.8

## Background
Some package can only be used in target version, however, I found that the default python version in EC2 instance is fixed. Therefore, I try to use virtual environment to run Python file in other version.
The reason that causes this situation is due to the AMI we choose. AMIs are pre-configured templates for EC2 instances that contain the necessary information to launch an instance. Each AMI is essentially a snapshot of a configured server. This snapshot includes:
* The operating system
* Pre-installed software packages
* Any custom configurations
From the [official document](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html), it is clear that python is one of the pre-installed packages in the AMI.
## Solution
In order to use different python version, we can create a python virtual environment with the following commands.
Install version 3.8:
```sh=
sudo yum remove python3
sudo amazon-linux-extras install python3.8
sudo ln -s /usr/bin/python3.8 /usr/bin/python3
sudo ln -s /usr/bin/pydoc3.8 /usr/bin/pydoc
```
Create environment:
```sh=
python3.8 -m venv myenv
```
Get into that environment:
```sh=
source myenv/bin/activate
```
## REF
- [Python 3.10+ on EC2 running Amazon Linux 2, and the openssl upgrade requirement.](https://repost.aws/questions/QUtA3qNBaLSvWPfD5kFwI0_w/python-3-10-on-ec2-running-amazon-linux-2-and-the-openssl-upgrade-requirement)
- [Amazon Machine Images in Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)
- [Find an AMI that meets the requirements for your EC2 instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)