~~REVEAL~~ ====== 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?direct&400 }} ==== Altres articles sobre Python en aquest web ==== {{topic>python}} \\ ===== 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 [[https://docs.python.org/es/3/library/venv.html|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 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 [[https://virtualenv.pypa.io/en/latest/installation.html|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 [[vcs|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. - 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 - Activem el ''virtualenv'':$ source env/bin/activate - Ara ja podem carregar les llibreries:(env) $ pip install -r requirements.txt \\