-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: actualiza a la nueva versión de uv #47
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #47 +/- ##
=======================================
Coverage 56.52% 56.52%
=======================================
Files 4 4
Lines 46 46
=======================================
Hits 26 26
Misses 20 20 ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
es el uv.lock dependiente del SO?
REspondido: SI
Critically, the lockfile is cross-platform, in that it can be used to install a given project on any platform, regardless of where it was generated. uv defines a unique solution for every platform, producing a readable and auditable lockfile that defines exactly which packages will be installed.
uv.lock
Outdated
@@ -0,0 +1,1585 @@ | |||
version = 1 | |||
requires-python = ">=3.9, <3.12" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
asumo que este archivo se crea automaticamente. De dónde sale lo de >=3.9, <3.12? es decir, se fija la versión a 3.11 en el .python-version
, de dónde saca que es un rango?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si. Sale de pyproject.toml
. El .python-version
es la versión recomendada de desarrollo. Se pueden poner varias en ese fichero también, pero a mi me gusta poner una. Hay dos casos de uso diferenciados:
- librería/paquete: como doraemon. Queremos soportar varias versiones de Python, actualmente 3.9 - 3.12. En .python-version escribes una versión, actualmente la 3.11, que es la que se usa para desarrollar y ejecutar algunas herramientas. No importa mucho porque hay que escribir código Python compatible con todas y testear con todas.
- aplicación. Aquí solo soportamos una versión de Python, que se escribe en el
.python-version
. En estos casos enpyproject.toml
también hay que poner algo como>=3.11, <3.12
, que solo es una versión. uv haría lo propio enuv.lock
.
El resumen es que la versión de Python de .python-version
es importante para aplicaciones, y pyproject.toml
para librerías. Pero como ambos repos tienen ambos ficheros, hay que hacer los ajustes de arriba.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Muchas gracias, clarisimo. Entonces para un proyecto en particular hay que retocar el pyproject.toml. Viendo que el uso más común es proyecto más que librería, conviene cambiar el valor en pyproject.toml
a >=3.11, <3.12
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Podríamos cambiarlo, pero si por ejemplo empezamos a usar Python 3.12 en los proyectos habría que editarlo después igualmente, con lo que tampoco veo mucha ganancia.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Una de las cosas que es útil cuando se está desarrollando, es que la propia librería se ejecuta en modo editable utilizando el pip install -e .
No consigo ver si eso está implementado en los cambios actuales.
Pero viene explicado el cómo hacerlo con fuentes externas aquí, pero en este caso me refiere a la propia librería. No sé si al ejecutar todo con uv run
al vuelo coge lo existente.
Esto está todavía en fase experimental. Sobre el -e, si ejecutas las cosas con uv run no es problema porque regenera el fichero uv.lock e instala todo automáticamente, con lo que siempre tienes la última versión. No tengo claro que pasa si ejecutas sin uv run, activando el entorno manualmente. |
@davidggphy Parece que
En la siguiente sesión entre el primer y segundo import se editó el fichero |
mypy usar por defecto la version de python desde donde se ejecuta
Perfecto, estaba pensando en el modo de desarrollo con notebooks y autoreload en el que vas editando algún módulo a la vez. Que para que funcione cuando tienes el proyecto como librería, debe estar en modo editable |
Para notebooks solo hace falta añadir ipykernel, normalmente a las dependencias de desarrollo y VSCode detecta el kernel del venv automáticamente. Lo único que no funciona es intalar ipykernel con el prompt de VSCode, hay que hacerlo con la terminal. |
Para solucionar #48 se usa la flag "system" en el hook de mypy en pre-commit. Eso quiere decir que hay que intalarlo explicitamente en la Action. Sin embargo, tiene pinta que ahora mismo en la Action uv está instalando las dependencias en un entorno virtual en lugar de en el Python del sistema, por lo que pre-commit no encuentra mypy. Posible parche mientras aqui: astral-sh/uv#5964 |
uv ha añadido soporte para gestionar proyectos. Se prueba en esta PR
Relacionado: https://astral.sh/blog/uv-unified-python-packaging
EDIT:
--require-hashes
astral-sh/uv#6451De esos últimos hilos, probablemente queremos añadir el
--frozen
y el--no-locals
cuando lo implementen.Closes #43
Closes #48
Closes #49