Poetry
Instal.lació
Section titled “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_completion
Projecte
Section titled “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 {% link “/project/vscode/” %}:
$ code genbu
TODO Operation mode https://python-poetry.org/docs/basic-usage/
Versiona el projecte amb {% link “/project/git/” %}:
$ git init --initial-branch=main
Dependències
Section titled “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:
{% image “add-emoji.png” %}
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
Section titled “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 👍
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”?
{% image “vscode-run.png” %}
Doncs que VS Code ja sap el que ha de fer (des de fa molt poc!):
😄
Gitlab
Section titled “Gitlab”Crea un projecte a {% link “/project/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
Section titled “Activitats”Colorama
Section titled “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:
{% sol %}
from colorama import Fore
print(Fore.RED + "ALARMA!")
{% endsol %}
Executa l’script.
Pendulum
Section titled “Pendulum”Afegeix una dependència a Pendulum:
$ poetry add pendulum
Crea 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.
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: 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 quit
Obre el navegador a http://127.0.0.1:5000
$ poetry config --list$ poetry env list