Virtual Environment

  • A virtual environment is a tool that helps to keep dependencies isolated.
  • It is used to manage Python packages for different projects
  • Using virtualenv allows you to avoid installing Python packages globally which could break system tools or other projects.
  • This is one of the most important tools that most of the Python developers use.

https://medium.com/expedia-group-tech/simplify-your-python-developer-environment-aba90f32dddb

Why do we need a virtual environment ?

  • Imagine a scenario where you are working on two web based python projects
  • One of them uses a Django 1.9 and the other uses Django 1.10 and so on.
  • In such situations virtual environment can be really useful to maintain dependencies of both the projects

Venv

  • It created venv at current location/dir
    • Created along-with the project
  • Issue
    • Many different venv will be scattered in many different location
    • Changing venv path(moving/renaming) breaks the venv
# Install virtualenv
sudo pip3 install virtualenv

# Create
virtualenv project1

# Activate
source project1/bin/activate

# Install all requirements.txt
pip install -r requirements.txt

# To export all its packages and version for other project
pip freeze > requirements.txt

# Exit from venv
deactivate
  • Create Venv with different specific python version
# Venv with py 2.7
virtualenv -p /usr/bin/python2.7 py27_env

# Install fron req.txt
pip install -r req.txt

python-venv

# Install
pip install virtualenv
sudo apt install python3.8-venv

# Make Venv
mkdir ~/.virtualenvs/
cd ~/.virtualenvs/
python3.6 -m venv testvenv

# Activate venv
source ~/.virtualenvs/testvenv/bin/activate

VirtualEnv with Virtualwrapper

  • All the venv are created at one place in C Drive
  • Manage env variable
  • Easy to –> Activate, Delete
# Install Virtualenvwrapper
pip install virtualenv
pip install virtualenvwrapper

# Add this to vim `~/.zshrc or ~/.basrc`
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3.6
source /usr/local/bin/virtualenvwrapper.sh

# Restart Terminal

# Make Virtualenv
mkvirtualenv imojo

# Activate venv
workon imojo

# Deactivate
deactivate

# Delete Venv
rmvirtualenv imojo

Make Venv with specific python version

mkvirtualenv imojo -p`which python`
mkvirtualenv imojo -p /usr/local/bin/python3.6

Manage env variables

# action after venv is activated
vim /Users/amrit/.virtualenvs/cont_appp/bin/postactivate

# Add `.env` file
export $(cat /Users/amrit/Desktop/IM/contact_app/.env)

# Check
echo $SECRET_KEY
os.getenv('SECRET_KEY')
os.environ.get('SECRET_KEY')

# pip install python-dotenv

Setup and installation issue

# Virtualenvwrapper settings:

export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3.6
export WORKON_HOME=$HOME/.virtualenvs 		# (optional)
export VIRTUALENVWRAPPER_VIRTUALENV=/home/goran/.local/bin/virtualenv # (optional)
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
  • Add this lines end of ~/.bashrc file
    • VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.6
      • path of python where wrapper is installed
      • Not the path of python you want to use
    • . ~/.local/bin/virtualenvwrapper.sh
      • find the path of virtualenvwrapper.sh file

Pipenv