Python Virtual Environment

Les eines de virtual environment per a Python es fan servir per a aïllar cada aplicació (i les seves llibreries i dependències) del sistema operatiu i de les altres aplicacions.

python-virtualenv-project-structure.jpg

Altres articles sobre Python en aquest web

2023/04/19 17:22 ENRIC MIEZA SANCHEZ
2023/06/23 08:47 David Lozano
2019/11/11 15:21 ENRIC MIEZA SANCHEZ
2021/11/24 10:54 ENRIC MIEZA SANCHEZ
2021/11/29 21:25 ENRIC MIEZA SANCHEZ
2022/10/18 17:36 ENRIC MIEZA SANCHEZ
2023/06/30 11:35 Miquel Àngel Amorós
2023/06/27 11:11 MIKEL LOPEZ VILLARROYA
2023/06/28 20:31 EVA BARBEITO ANDRADE
2023/07/06 07:02 RAQUEL ALAMAN NAVAS
2023/07/10 15:04 MAURICI MODOL
2023/07/06 07:22 JOSEP LLADONOSA CAPELL
2023/07/06 08:12 JOSEP LLADONOSA CAPELL
2023/07/06 07:51 JOSEP LLADONOSA CAPELL
2023/07/06 08:01 JOSEP LLADONOSA CAPELL
2020/09/03 20:57 ENRIC MIEZA SANCHEZ
2022/11/30 08:54 ENRIC MIEZA SANCHEZ
2022/07/05 18:00 Josefina Llaberia


Python virtualenv

  • Desenvolupar o posar en producció aplicacions en Python requereix diferents llibreries per cada projecte.
  • Les llibreries es solen instal·lar amb el gestor de paquets pip.
  • Es desaconsella instal·lar llibreries al propi sistema operatiu, pot interferir en el seu funcionament
    • Diverses apps o el SO poden requerir diferents versions de Python o de les llibreries.
    • PROHIBIT sudo pip install …
  • Les eines de virtual environment creen entorns aïllats del propi SO i així no s'interfereixen.


Opcions de Virtual Environment

Els virtual environments es poden instal·lar al menys de 2 maneres:

  • venv : Des de Python 3.3 es pot amb l'eina que porta ja el propi intèrpret.
  • virtualenv : es pot instal·lar el paquet virtualenv amb el gestor PIP.


Pre-requeriments per a Virtualenv

  • Comprova la versió que tens de Python:
    $ python --version
  • En els exemples utilitzarem Python 3. Si no està instal·lat, ho pots fer amb:
    $ sudo apt install python3


Built-in venv

Ve incorporat a l'intèrpret des de Python v3.3. És la forma més senzilla i recomanable ja que no cal instal·lar cap dependència.

Per crear el virtual environment fem:

$ python -m venv <carpeta_venv>

Típicament

$ python -m venv env

Veurem que s'ha creat una carepta env on hi ha els binaris de Python i el gestor de paquets pip.


Virtualenv

Si has creat el teu env amb el built-in venv de Python, no cal que segueixis aquesta secció (virtualenv és una forma alternativa de fer el que Python-venv ja ens ha fet). Pots anar directament a la secció «Utilitzant Virtualenv».

Abans de la versió 3.3 de Python es feia servir la utilitat virtualenv. Si treballem en Pyhton 2.x o <3.3 només tindrem disponible aquesta opció.

  • Necessitem pip3, el gestor de paquets per a Python més conegut. En Debian/Ubuntu l'instal·lem amb:
    $ sudo apt install python3-pip
  • Ara podrem instal·lar el paquet virtualenv:
    $ sudo pip3 install virtualenv
  • Podem comprovar les llibreries instal·lades en el sistema operatiu fent
    $ pip3 freeze
  • Podem crear ara, un entorn de test:
    $ virtualenv envtest

Això ens crearà una carpeta envtest amb l'intèrpret de Python pertinent i on s'emmagatzemaran les llibreries que instal·lem amb pip.

Utilitzant sudo

Aquestes ordres d'instal·lació del virtualenv (el paquet de PyPI instal·lat amb pip) són les úniques que necessiten sudo.

Per treballar com a desenvolupador NO cal fer sudo, llevat de poquíssimes excepcions.

Si estem en producció, potser cal algun cop (quan estem en carpetes del sistema), però estigueu atents a fer-ho quan sigui necessari i no fer-ho perquè sí o perquè la instrucció no funciona sense examinar perquè no va.

La gestió del permisos i propietat dels arxius és fonamental per a la seguretat.


Utilitzant virtualenv

  • Activem el virtualenv:
    $ source envtest/bin/activate
  • Veureu que el prompt ara indica el nom del virtualenv. Si ara mirem les llibreries veurem que està buit:
    (envtest) $ pip3 freeze
  • Podem instal·lar la primera llibreria, per exemple:
    (envtest) $ pip3 install flask
  • Si comproveu amb pip3 freeze veureu que apareix la llibreria flask i totes les seves dependències.
  • En qualsevol moment podem sortir del nostre virtualenv amb la instrucció deactivate:
    (envtest) $ deactivate


requirements.txt

Una bona pràctica habitual en els projectes desenvolupats en Python és disposar d'un arxiu requirements.txt en l'arrel del projecte que indiqui quines llibreries hem d'instal·lar perquè el projecte funcioni.

click==8.0.3
Flask==2.0.2
importlib-metadata==4.8.1
itsdangerous==2.0.1
Jinja2==3.0.2
MarkupSafe==2.0.1
pkg-resources==0.0.0
typing-extensions==3.10.0.2
Werkzeug==2.0.2
zipp==3.6.0


Creant arxiu requirements.txt

Per crear l'arxiu, cal que estiguem en el virtualenv pertinent. Volcarem les seves llibreries amb:

(env) $ pip freeze > requirements.txt

Recordeu incloure requirements.txt en el sistema de control de versions, típicament amb Git:

(env) $ git add requirements.txt


Carregant la configuració d'un requirements.txt

Si estem posant en marxa un projecte que acabem de descarregar, podem carregar les seves llibreries.

  1. Si cal, creem un virtualenv per aïllar-nos del SO i dels altres projectes. Per exemple, amb el built-in venv:
    python -m venv env
  2. Activem el virtualenv:
    $ source env/bin/activate
  3. Ara ja podem carregar les llibreries:
    (env) $ pip install -r requirements.txt