Poetry és una eina de gestió de dependències i creació de biblioteques.
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 --version
Poetry (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_completion
Projecte
Crea un projecte amb el nom de poetry
:
$ poetry new genbu --name app
Pots veure que es crea un projecte amb aquesta estructura:
genbu
├── pyproject.toml
├── README.md
├── app
│ └── __init__.py
└── tests
└── __init__.py
Obre la carpeta amb VS Code:
$ code genbu
TODO Operation mode https://python-poetry.org/docs/basic-usage/
Versiona el projecte amb Git:
$ git init --initial-branch=main
Dependè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 emoji
Pots 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.py
Traceback (most recent call last):
File "/home/box/genbu/tests/test_emoji.py", line 1, in <module>
import emoji
ModuleNotFoundError: 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 list
app-gLP7tx0M-py3.12 (Activated)
El que has de fer és executar l'script des de poetry
:
$ poetry run python tests/test_emoji.py
Python is 👍
Shell
Si vols pots activar un shell anidat on pots executar les ordres dins de l'entorn virtual:
/$ poetry shell
Spawning 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.py
Python 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 main
Activitats
Colorama
Afageix el paquet Colorama:
$ poetry add colorama
Crea 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 pendulum
Crea el fitxer test_pendulum.py
:
import pendulum
now = pendulum.now("Europe/Paris")
# Changing timezone
now.in_timezone("America/Toronto")
# Default support for common datetime formats
now.to_iso8601_string()
# Shifting
now.add(days=2)
Executa el fitxer.
Flask
Afegeix una dependència a Flask.
$ poetry add flask
Crea 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: off
WARNING: 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:5000
Press CTRL+C to quit
Obre el navegador a http://127.0.0.1:5000
TODO
$ poetry config --list
$ poetry env list