---
creation date: 2024-08-22
modification date: Thursday 22nd August 2024 09:17:34
tags:
---
# Preamble
### Notable Links
[[2 pymodbus On the BeagleBone]]

## What are we doing?
Figuring out two things: a) what the hell is a virtual environment and b) how to get linux to quit complaining to me that I'm breaking system packages.
## Why are we doing it?
I would like to do this the right way. I think what we've been doing isn't the way to really go. 
## Who cares?
Me. My poor computer.

# What the fuck is Venv?
It's a way to separate environments of projects. This keeps dependencies working if versions change, or if dependencies break with new versions. This keeps every project with its own environment.

# How to create an environment
[I'm following this guy's tutorial](https://www.youtube.com/watch?v=Kg1Yvry_Ydk). 

``` bash
pip3 list
#should be able ot find virtualenv

python3 -m venv beaglebone_env

#This caused me an issue at first. Said I needed to install apt install python3.12-venv

sudo apt install python3.12-venv
#worked!

python3 -m venv beaglebone_env

#actually activate the python environment
source beaglebone_env/bin/activate

>> (beaglebone_env) danesabo@danesabo-desktop: ~/Documents/python_environments
#the environment is successfully loaded and running! You can check where it is using "which python"

# You can leave the environment using 
deactivate

#to delete the environment
rm -rf beaglebone_env/
```

## We can create something called a 'requirements.txt'
This file allows us to recreate the environment quickly on another device. 
```bash
#While in the environement you want to create a requirements list for
pip freeze > env_req.txt
# will create a requirements file with all required dependencies

# to install from a requirements list
pip install -r env_req.txt
```

## There's another way to create a virtual environment, within a project.
```bash
mkdir my_project
python3 -m venv my_project/venv
source my_project/venv/bin/activate

#Then, this will activate the virtual environment within the project!
#This is the more common way to do virtual environments. It keeps the requirements and dependencies in the project, rather than in two different projects.
#Vritual environments are usually not synced to git projects though, but requirments documents are instead.
#Do NOT put project files in the virtual environement.
```