# Python

# Default Python versie wijzigen in Debian 10

Je kunt meerdere Python versies installeren in Linux.  
Om te zien welke versie op dit moment actief (default) is kan je het volgende uitvoeren:

```bash
python -V
```

Om te zien welke versies geinstalleerd zijn in Linux kan je het volgende commando uitvoeren:

```bash
ls /usr/bin/python*
```

#### **Prioriteren van de verschillende Python versies**

Wanneer je met bovenstaand commando weet welke Python versies zijn geinstalleerd, dan kan je met onderstaand commando de prioriteit aangeven:

```bash
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2
```

In bovenstaand geval heeft Python versie 3.8 de hoogste prioriteit, dus dan is dit de default Python versie.

Wanneer je een Python versie hebt [geïnstalleerd vanuit source](https://www.linuxfun.nl/books/linux/page/python-installeren-vanuit-source-in-debian-10 "Python installeren vanuit source in Debian 10") (zelf gecompileerd), dan kan je deze versie toevoegen met:

```bash
update-alternatives --install /usr/bin/python python /usr/local/bin/python3.9 3
```

Hiermee wordt Python3.9 op prioriteit 3 gezet en heeft dus in dit geval de hoogste prioriteit. Deze versie is dan de actieve Python versie.

#### **Switchen tussen default Python versie**

Wanneer je een andere Python versie de default versie wilt maken, voer dan onderstaand commando uit:

```bash
update-alternatives --config python
```

Je kunt de default versie weer controleren met: python -V

# Python 3.8 installeren in Debian 10 (Buster)

#### **Python 3.8 installeren**

In Debian 10 hebben we standaard alleen de beschikking over Python 2.7 en Python 3.7. Je kan met onderstaand commando controleren welke versies van Python geinstalleerd zijn in Debian:

```bash
ls /usr/bin/python*
```

De actieve Python versie kan je controleren met:

```bash
python -V
```

Nu kunnen we Python vanuit de source installeren, maar we hebben ook de beschikking over een repository die beschikbaar is gesteld door Pascal Roeleven. Het voordeel is dat we dan op de normale manier de Python 3.8 pakketten kunnen installeren.  
Voordat we hiermee verder gaan moeten we eerst nog een paar benodigde pakketten installeren:

```bash
apt-get install gpg wget
```

Daarna kunnen we de GPG key installeren die nodig is:

```bash
wget https://pascalroeleven.nl/deb-pascalroeleven.gpg
apt-key add deb-pascalroeleven.gpg
```

Nu moeten we nog de sources.list aanmaken. Hiervoor maken we een nieuw bestand aan met de tekst editor:

```bash
nano /etc/apt/sources.list.d/python3.8-pascalroeleven.list
```

Hier plaatsen we het volgende in:

```
deb http://deb.pascalroeleven.nl/python3.8 buster-backports main
```

Hierna een update uitvoeren:

```bash
apt-get update
```

En dan uiteindelijk Python 3.8 installeren:

```bash
apt-get install python3.8 python3.8-venv python3.8-dev
```

####   
**BRON:**

[Python 3.8 backport for Debian buster](https://community.home-assistant.io/t/home-assistant-core-python-3-8-backport-for-debian-buster/234859)

# Python installeren vanuit source in Debian 10

De nieuwste Python versie is vrij eenvoudig te installeren vanuit de broncode (source). In onderstaande stappen wordt beschreven hoe men dit kan doen.

#### **Benodigde pakketten installeren**

```bash
apt-get install build-essential libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev
```

#### **Downloaden Python broncode**

Op het moment van schrijven is Python 3.9.4 de nieuwste versie.  
Deze gaan we downloaden en uitpakken.

```
cd /usr/src
wget https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tgz
tar xzf Python-3.9.4.tgz
```

#### **Python compileren en installeren**

```bash
cd Python-3.9.4
./configure --enable-optimizations
make altinstall
```

Het laatste commando “**make altinstall**” zorgt er voor dat de nieuwe versie naast de bestaande Python versies wordt geïnstalleerd. Doet men dit niet, dan wordt de bestaande versie overschreven.  
Python 3.9.4 is nu geïnstalleerd in /usr/local/bin.

#### **Controleren Python versie**

Je kunt nu de Python versie controleren met:

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

#### **Python verwijderen**

Wanneer Python op deze manier wordt geïnstalleerd, dan kan men niet met een commando de installatie weer ongedaan maken. Hiervoor dient men de bestanden en directories met de hand te verwijderen. Onderstaande commando’s zorgen ervoor dat alles verwijderd wordt:

```bash
rm -f /usr/local/bin/2to3-3.9
rm -f /usr/local/bin/easy_install-3.9
rm -f /usr/local/bin/idle3.9
rm -f /usr/local/bin/pip3.9
rm -f /usr/local/bin/pydoc3.9
rm -f /usr/local/bin/python3.9
rm -f /usr/local/bin/python3.9-config
rm -rf /usr/local/bin/include/python3.9
rm -f /usr/local/lib/libpython3.9.a
rm -rf /usr/local/lib/python3.9
rm -rf /usr/local/lib/pkgconfig
rm -f /usr/local/share/man/man1/python3.9.1
```

#### **BRON:**

[How to Install Python 3.8 on Ubuntu, Debian and LinuxMint](https://tecadmin.net/install-python-3-8-ubuntu/)

# 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)