# Virtualenv gebruiken in Python3

**Virtualenv** is een tool om een geïsoleerde Python omgeving te maken.  
Deze omgeving heeft zijn eigen installatie directory die geen libraries deelt met andere virtuele omgevingen.

#### **Verschil tussen virtualenv en venv**

**venv** is een Python package dat standaard aanwezig is in Python3 (niet in Python2).  
**virtualenv** is een python library die meer functionaliteiten biedt dan **venv**.  
Via onderstaande link kan je zien wat de verschillen zijn tussen deze twee omgevingen:

- [https://virtualenv.pypa.io/en/stable](https://virtualenv.pypa.io/en/stable/)

#### **Virtualenv installeren met behulp van pip3**

We gaan er van uit dat Python3 is geïnstalleerd vanuit de source zoals beschreven in [dit artikel](https://www.linuxfun.nl/books/linux/page/python-installeren-vanuit-source-in-debian-10 "Python installeren vanuit source in Debian 10").  
Op het moment van schrijven is dit Python3.9.4. Je kan met onderstaand commando controleren welke versie Python actief is:

```bash
python3.9 -V
```

Met onderstaand commando kan je zien wat het pad is waar Python3.9 is geïnstalleerd:

```bash
which python3.9
```

In ons geval is dat /usr/local/bin/python3.9  
  
We gaan nu eerst de package **pip** updaten. **pip** is de Python package installer.

```bash
python3.9 -m pip install --upgrade pip
```

Hierna kunnen we de **virtualenv** package gaan installeren:

```bash
pip3 install virtualenv
```

#### **Virtuele Python omgeving maken**

We kunnen nu een virtuele omgeving aanmaken met behulp van het commando **virtualenv**.  
Let er op dat je ingelogd bent als de gebruiker waarvoor je de virtuele omgeving wilt maken.  
In onderstaand voorbeeld log ik in vanuit de root console als de gebruiker alex:

```bash
sudo -su alex
```

En maak dan nu de virtuele omgeving aan met:

```bash
virtualenv -p /usr/local/bin/python3.9 /home/alex/pythonvenv
```

Je krijgt dan een vergelijkbare output te zien zoals hier onder:

```bash
alex@tux:~$ virtualenv -p /usr/local/bin/python3.9 /home/alex/pythonvenv

created virtual environment CPython3.9.4.final.0-64 in 274ms
creator CPython3Posix(dest=/mnt/sdb3/home/alex/pythonvenv, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/mnt/sdb3/home/alex/.local/share/virtualenv)
added seed packages: pip==21.0.1, setuptools==56.0.0, wheel==0.36.2
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
```

Je kan de virtuele omgeving een willekeurige naam geven. In bovenstaand voorbeeld is dit dus pythonvenv.  
Er wordt dan automatisch een directory aangemaakt met deze naam waarin de virtuele omgeving in wordt gemaakt.  
Wanneer je daarin kijkt zie je de volgende directories staan:

```bash
alex@tux:~/pythonvenv$ ls -l
total 12
drwxr-xr-x 2 alex alex 4096 Apr 23 11:59 bin
drwxr-xr-x 3 alex alex 4096 Apr 23 11:59 lib
-rw-r--r-- 1 alex alex  227 Apr 23 11:59 pyvenv.cfg
```

Je ziet dat er binnen de virtuele omgeving de directories **bin** en **lib** zijn aangemaakt, evenals een configuratie bestand **pyenv.cfg**.  
De virtuele omgeving heeft nu zijn eigen python en pip versie en de benodigde libraries.  
Het activeren van de virtuele python omgeving kan je doen met:

```bash
source /home/alex/pythonvenv/bin/activate
```

Je ziet dan ook de prompt veranderen in:

```bash
(pythonvenv) alex@tux:~$ 
```

De prefix tussen haakjes (pythonvenv) geeft aan dat je in de virtuele python omgeving werkt.  
Het de-activeren kan nu met het commando:

```bash
deactivate
```

Je krijgt dan weer de normale prompt terug.

#### **Verwijderen van de virtuele Python omgeving**

Het verwijderen van de virtuele Python omgeving is niets meer dan het verwijderen van de complete directory inclusief onderliggende directories en bestanden:

```bash
rm -rf /home/alex/pythonvenv
```

#### **BRON:**

[Installing and using virtualenv with Python 3](https://help.dreamhost.com/hc/en-us/articles/115000695551-Installing-and-using-virtualenv-with-Python-3)