Una pequeña receta para actualizar la versión del interprete de Python que usamos en un entorno virtual creado con Poetry.
En otras plataformas, actualizar la versión del interprete (por ejemplo, y salvando las distancias, la versión del framework en .NET) es relativamente sencillo. Sin embargo en Python no lo es tanto y de hecho es un proceso un poco demasiado manual.
Básicamente el proceso consiste en eliminar el entorno virtual y volver a crearlo con la versión de Python requerida.
Primero tenemos que saber donde está el interprete asociado al entorno virtual:
poetry env info --executable
El anterior comando nos dará la ruta al fichero python.exe
usado por el entorno virtual.
Ahora eliminaremos el entorno virtual:
poetry env remove <PATH_TO_PYTHON.EXE>
En este punto, vamos a crear un nuevo entorno virtual pero seleccionando la versión concreta de Python:
poetry env use <PATH_TO_DESIRED_PYTHON.EXE>
<PATH_TO_DESIRED_PYTHON.EXE>
puede sacarla primero listando la versiones de Python instaladas conpy --list
y, como normalmente la última versión será la de por defecto (la que muestra un asterisco en el listado), conwhere.exe python
tendrás la ruta.
Aquí también puede pasar (dependiendo de si estás haciendo un upgrade o un downgrade) que poetry
te diga que la versión de Python no es compatible con la dependencia que hay en el fichero pyproject.toml
. Te dirá algo así: The specified Python version (3.8.10) is not supported by the project (^3.12). Please choose a compatible version or loosen the python constraint specified in the pyproject.toml file.. Es decir, quiero bajar de 3.12 a 3.8.10, luego tocar editar previamente el fichero pyproject.toml
para ajustar la dependencia de Python.
Otro punto a tener en cuenta es si usas black
, recordar establecer correctamente el valor de target-version
A partir de aquí, haremos lo que haríamos si hubiésemos clonado el repo de un proyecto por primera vez:
poetry install
poetry shell
pre-commit install
Para confirmar la versión de Python en el entorno virtual:
poetry env info
Por otro lado, ya que estás actualizando lo mismo te interesa actualizar también dependencias del proyecto.
Aunque no es una dependencia al uso, te podría interesar (si lo usas, claro) los hooks de pre-commit
. Esto puedes hacerlo con pre-commit autoupdate
que actualizará rev: <NUMBER>
del fichero .pre-commit-config.yaml
.
En cuanto a librerías, lo primero es ejecutar poetry show --outdated --ansi
para ver si hay nuevas versiones disponibles.
Si simplemente quieres actualizar respetando la especificación con caret, es decir, algo como ^1.2.3
, con poetry update debería bastar.
Si por el contrario quieres subir la versión te tocará usar poetry add
. Por ejemplo, en mi caso la salida de poetry show --outdated --ansi
me dice lo siguiente:
flake8 5.0.4 6.1.0 the modular source code checker: pep8 pyflakes and co
Como en el fichero pyproject.toml
tengo flake8 = "^5.0.4"
, poetry update flake8
no hace nada. Sin embargo, con poetry add "flake8==^6.1.0" --group=dev
ahora sí actualizo a la versión 6.1.0 y también actualizo la especificación de versión en el fichero pyproject.toml
. Un cambio así requiere probar bien que todo funciona, lógicamente.
Un saludo!