Poetry és una eina de gestió de dependències i creació de biblioteques.
A partir d’ara utilitzarem uv per fer les activitats enlloc de poetry.
Instal.lació
Instal.la poetry:
curl -sSL https://install.python-poetry.org | python3 -Tanca la sessió i obre una nova sessió.
Verifica que poetry funciona:
$ poetry --versionPoetry (version 1.8.3)Afegeix les ajudes de Shell per tal que Poetry t’ajudi a completar les ordres amb la tecla “Tab”:
$ poetry completions bash >> ~/.bash_completionProjecte
Crea un projecte amb el nom de poetry:
$ poetry new genbu --name appPots veure que es crea un projecte amb aquesta estructura:
genbu├── pyproject.toml├── README.md├── app│ └── __init__.py└── tests └── __init__.pyObre la carpeta amb VS Code:
$ code genbuTODO Operation mode Basic usage
Versiona el projecte amb Git:
$ git init --initial-branch=mainDependències
En la biblioteca estàndar de Python no està tots el moduls que necessites per implementar un projecte.
Però això hi ha repositoris de paquets: un d’ells és Pyhton Package Index.
Per exemple, instal.la el paquet Emoji:
$ poetry add emojiPots veure que la secció [tool.poetry.dependencies] del fitxer pyproject.toml s’ha modificat:

De manera automàtica Poetry busca una versió adequada a PyPI, a no ser que hagis registrar altres “repositoris” en la secció tool.poetry.source, i instal.la la llibreria i les seves dependències.
Poetry et permet especificar les depenències de manera molt flexible, inclós restriccions mútliples.
Entorn virtual
Crea el fitxer test_emoji.py a la carpeta tests:
import emoji
result = emoji.emojize('Python is :thumbs_up:')
print(result)Amb import pots importar un mòdul a l’entorn d’execució de l’script.
Executa l’script:
$ python tests/test_emoji.pyTraceback (most recent call last): File "/home/box/genbu/tests/test_emoji.py", line 1, in <module> import emojiModuleNotFoundError: No module named 'emoji'Python diu que no pot trobar el mòdul emoji encara que poetry diu que l’ha instal.lat!
🤔
Poetry gestiona un projecte en un entorn virtual, que és un espai aïllat en que només estan les depndències que el projecte vol i cap altre.
Si preguntes a poetry et dirà que l‘“evn” està actiu:
$ poetry env listapp-gLP7tx0M-py3.12 (Activated)El que has de fer és executar l’script des de poetry:
$ poetry run python tests/test_emoji.pyPython is 👍Shell
Si vols pots activar un shell anidat on pots executar les ordres dins de l’entorn virtual:
/$ poetry shellSpawning shell within /home/box/.cache/pypoetry/virtualenvs/app-gLP7tx0M-py3.12:~/genbu$ . /home/box/.cache/pypoetry/virtualenvs/app-gLP7tx0M-py3.12/bin/activate(app-py3.12) :~/genbu$Ara pots executar directament el fitxer test_emoji.py:
(app-py3.12) :~/genbu$ python tests/test_emoji.pyPython is 👍Pots sortir del shell amb l’ordre deactivate:
(app-py3.12) :~/genbu$ deactivate$I que passa si executo directament amb el botó “Run Pyhton File”?

Doncs que VS Code ja sap el que ha de fer (des de fa molt poc!):
😄
Gitlab
Crea un projecte a Gitlab:
- Escull Create blank project
- Desactiva l’opció de “Initialize repository with a README”
Segueix les instruccions de “Push an existing folder” per HTTPS:
git remote add origin https://gitlab.com/...git add .git commit -m "Initial commit"git push --set-upstream origin mainActivitats
Colorama
Afageix el paquet Colorama:
$ poetry add coloramaCrea un fitxer test_colorama que faci un print al terminal amb el text ALARMA!, però en color vermell:
from colorama import Fore
print(Fore.RED + "ALARMA!")Executa l’script.
Pendulum
Afegeix una dependència a Pendulum:
$ poetry add pendulumCrea el fitxer test_pendulum.py:
import pendulum
now = pendulum.now("Europe/Paris")
# Changing timezonenow.in_timezone("America/Toronto")
# Default support for common datetime formatsnow.to_iso8601_string()
# Shiftingnow.add(days=2)Executa el fitxer.
Flask
Afegeix una dependència a Flask.
$ poetry add flaskCrea el fitxer server.py:
from flask import Flask
app = Flask(__name__)
@app.route("/")def home(): return "<h1>Hello, World!</h1>"Excuta flask:
$ poetry run flask --app server.py run * Serving Flask app 'server.py' * Debug mode: offWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:5000Press CTRL+C to quitObre el navegador a http://127.0.0.1:5000
TODO
$ poetry config --list$ poetry env list